I am a professor emeritus of CS at Kanagawa Institute of Technology, Japan. Originally my specialty was parallel and distributed systems. My current interests include machine learning, natural language processing, creating mobile apps with MIT App Inventor, and quantum computing. In the web version of this blog, clicking the icon on the right (a plastic sphere) will take you to the "List of Quantum Computing Articles". - Fujio Yamamoto (for e-mail, add "@ieee.org" after "yamamotof")
2022年11月6日日曜日
Amazon AlexaとMIT App Inventorのコラボ
2022年3月25日金曜日
植物図鑑などで珍しい形態の「葉」を見つけたい
植物図鑑や写真集を眺めていて、「葉」の形態が珍しいものを見つけたいと思いました。でも、漫然と眺めていたのでは日が暮れてしまいます。そこで、植物の特性の説明文に対する自然言語処理の登場です。
■「葉」の特性を示す用語の抽出
まず、参考資料[1]に掲載されている、植物全2,174種(別名を含めると3,000種以上)に関する、簡潔な一行説明文の全てに自然言語処理(形態素解析と単語間・文節間係り受け解析)を施します。その結果を利用して、「葉」の特性に関する用語を全て抽出します。原則的には、「葉」の前方にある名詞、形容詞、動詞などの修飾語と、「葉」からその述語までの範囲の関連用語が対象となりますが、例外的に、その範囲を超えて、述語の後方まで調べる場合もあります。当然、その中で、「葉」以外の「花」や「果実」等に関する用語は除去するのですが、これがなかなか難しいです。ですが、用語の品詞と係り受けの種類などを頼りに、何とか曲がりなりにも目的を達するアプリケーションを作成しました。その実行結果が図1なのです!
このようにして、「葉」の幾つかの珍しい特性が見つかりました。例えば、図2に示すように、「表裏逆転」「右右左左」「2回偶数羽状複葉」「魚骨状」などです。あまり聞いたことのない、何か珍しそうな特性に見えます。
[2] yasuokaの日記: spaCy向け国語研長単位モデルja_gsdluw仮リリース
https://srad.jp/~yasuoka/journal/653385/
[3] UD Japanese GSD+GSDLUW r2.9 with Named Entity Gold Labels
https://github.com/megagonlabs/UD_Japanese-GSD/releases/tag/r2.9-NE
2020年12月17日木曜日
神奈川工科大学で講義:自然言語処理と機械学習(事後編)
【what is this】神奈川工科大学_情報工学科向けの「入門:自然言語処理と機械学習」講義後の報告です。前回の続編になります。現状の小生にとって、今年のn大ニュース(n ≦ 3)入りとなりました。
■久しぶりに約140名に90分講義(講演)
前回記載のとおり、90分のオンライン講演を実施(2020-12-10)。対象は、約140名の2年生ですが、先生方や大学院生にも聴いていただきました。このコロナ禍ゆえ、自宅からZOOMを利用した講演でしたが、特にトラブルもなく終えることができました。
熱心に聴講し質問もしてくれた学生諸君に、そして準備された担当の先生、応援して質問もしていただいた先生方に感謝したい。当方としてはここ2ヶ月間、構想を練り準備してきた甲斐があり、たいへん嬉しく思っています。下図のスクリーンショット、どこか良い雰囲気を醸し出しているような気がします。
![]() |
| 2年生約140名と、院生、先生方にも参加していただいた |
上図右欄に見えますが、講演後に学生諸君から3件ほどの質問がチャットで寄せられました。対面授業では通常、ほとんど出ませんので、これは、オンライン授業の良い点のようです。ただ、質問時間は限られていたので、その場でパチパチ素早く質問を正確に打つのは難しかったと思います。後でメールでも質問できるように、当方のメールアドレスも講義スライドに記載はしておきました。
![]() |
| ここで、小さなどよめきや笑いが起こるのでは... |
- メモは取ったが、講義資料が公開されていなければ、後で理解を深めることは困難だったが、それがあったので非常に助かった。((注)スライドが役立って良かった。)
- 資料を見返してしっかりとまとめたメモと見比べなんとなく理解するところまで行けたことは、個人的にとても大きかったです。((注)予習して臨んだようです。)
- 内容だけを見たらすごく難しいものを簡単に見せる工夫や見る側が興味を持つようなしゃべり方をしていたので参考にしたいと思いました。((注)よく分かってくれました!)
- 最初は基礎的な部分から、徐々に内容を複雑にしていって、尚且つ前のスライドでその話に持っていきやすいように、しっかりその情報の開示・整理を行っていたために理解しやすくて、((注)そこまで、よくぞ分かってくれました!「以心伝心」という言葉が頭に浮かんだ。)
- 退職後も自分の興味で調査や実験をしたという事を聞いて、私も自分自身で動く行動力や何にでも興味を持つ好奇心を忘れないようにしたいと思いました。((注)こんなところにも気がついてくれました!)
- 自身が気になったから実際に行ってみたという動機や実体験を元にした説明だったので、内容がわかりやすく伝えたい事も明確で、全体的にとても良かった((注)そのとおり。自分でやってみること!)
- Google翻訳を使っているが((注)そういう学生が非常に多かった!)、それに関連する技術や動向の概要が分かった。機械翻訳がこれほど凄い技術でなりたっているとは思わなかった。
- 数学の知識が不足しているのでそれを身に付けたい。((注)講義では、誤差逆伝播や微分等については直接言及しなかったのだが、学生は、数学的手法を感じ取った!)
![]() |
| 事前に決めておいた時間配分(配布スライドにも記載) |
2020年12月2日水曜日
神奈川工科大学で講義:自然言語処理と機械学習(事前編)
【what is this】情報工学科2年生向けの「入門:自然言語処理と機械学習」の概要です。90分のオンライン講義用です。(事後編はこちら)
■久しぶりの90分授業
縁あって今回(2020-12-10)、神奈川工科大学情報工学科2年生向けに、90分のオンライン講義をすることになりました。全部で15回あるオムニバス形式の情報工学特別講義の1回分です。
内容は、「自然言語処理と機械学習」です。ここ2,3年、興味をもって調べたり、自分で実験してみた事項に基づいています。自然言語処理の基本的な解析から機械翻訳までの重要と思われる技術について述べます。
本当は学生諸君の顔を見ながらの対面授業でやりたいのですが、このコロナ禍のもとでは致し方ありません。しかし、自宅の机上から講義するのですから、やりやすい面もあります。
![]() |
| 講義のタイトル |
![]() |
| 講義の全体構成と時間配分目安 |
■講義にあたって留意したこと
- スライド枚数を適切に抑えて、講義時間を超過しないこと。最終的には、目次なども含めて、全62枚のスライドを準備し、(90分だが)85分で終了することをめざす。
- 全体を大きく4分割し、それぞれ20分程度の話として明確に区分すること。またそれら各部の相互関連も示すこと。
- できる限り、独自の例題、独自のプログラム、独自撮影の画像、身近な話題などを使って、当方の取り組み姿勢を示す。
- インパクトのある素晴らしい、他の人の成果は積極的に引用させていただく。
- 技術の詳細の講義ではないが、「ふわー」としたお話しに終わらずに、なるべく一定の深さまで掘り下げ、具体例をあげ、簡単な計算例なども加えること。
- 一方、詳細な技術内容には立ち入れないとしても、何か「凄いぞ!」「こんなことも考えられているのか!」と驚きを感じ興味を持ってもらう場面も作ること。
以下は、4区分したスライドの縮刷版です。実寸スライドは(先生方にはすでにご覧いただいていますが)講義時までに学生諸君へ公開します。
![]() |
| part1 人工言語、自然言語、機械学習、サービス |
![]() |
| part2 基本解析、形態素解析、係り受け解析、分類問題、コーパス |
![]() |
| part3 単語の意味理解、共起語、単語の実数ベクトル空間への埋込み |
この講義は、「入門」としています。このあとはどうするか、少しギャップがあると思いますが、技術的にさらに深めたものを作りたいと思っています。特に、最新の機械翻訳の仕組みを明確に説明できることを目指したい。
- 黒橋禎夫:改訂版 自然言語処理、放送大学教育振興会、2020年:基本概念とアルゴリズムを簡潔かつ精緻に叙述した定評の教科書。手計算できる小さな例題で理解を深める。改訂版では、最近の機械翻訳(20ページ)が追加された。(全202頁)
- 杉本徹・岩下志乃:Javaで学ぶ自然言語処理と機械学習、オーム社、2018年:基本概念と基本技術が、幅広く丁寧に解説されている。明解なJavaプログラムとその解説があり、それを動かしながら理解を深められる。(全262頁)
- 斉藤康毅:ゼロから作るDeep Learning(2)自然言語処理編、オライリー、2018年:定番の「ゼロから作る…」の第2弾、自然言語処理編。じっくり一歩づつ(Pythonでプログラムしながら)進む。最初の方にDeep Learningの一般的解説もある。(全412頁)
- 柴原一友:自然言語解析アルゴリズムBERT(前編)、日経ソフトウェア2020年7月:情報検索や機械翻訳で注目されているBERTの考え方のやさしい解説。BERTの中核であるTransformerとAttentionがどんなものかをイメージすることができる。 (全13頁)
- 奥野陽他2:自然言語処理の基本と技術、翔泳社、2016年:広範な話題を数式を使わずやさしく解説しようとしている。初心者が技術の概観を得るのに適す。機械翻訳の解説もあるが、発行が少し前のためか、ニューラル機械翻訳は含まれない。(全239頁)
2020年9月7日月曜日
誰もが実感できる自然言語処理の発展
趣味で、Googleアシスタント(OK Google!)を利用しています。自然言語処理の応用は、自動翻訳だけではないようです。今回は、植物の特性や台風情報等を音声で与えて、所望の情報が得られるかどうか確認してみます。
【音声による検索】
♪ 漏斗状の赤紫の花を咲かせる植物
♪ 葉脈が明瞭な植物
♪ 虎柄の長い葉を持つ植物
♪ 葉は掌状で果実は楕円形
♪ 去年の台風で920hPa以下に発達したものはありますか
♪ それでは3.14かける8の答えは
結論から言いますと、上記の最初の4例(植物)に対する結果は、いずれも、かなり優秀だと思います。Googleのやり方は、よく分かりませんが、最近雑誌などでも解説が増えているBERTという仕組みのもとで、実用的な自然言語処理がなされているのだと思います。
利用した感触としては、出力結果はあくまで「候補」、ということのようです。ですから、例えば、「赤い4枚の花弁を持つ植物」と与えても、4枚に限らず、5枚や3枚の花弁のものも候補に挙がる場合があります。恐らく、この場合は、花弁の枚数よりも「赤い」が優先されるのだと思います。それはそれで、我々の感性に合致しているように思います。
また、残りの2つの音声検索からも分かるように、人間がしゃべったことを正確に理解しているのではなく、いわば「拾い読み(赤字の部分のみを)」して、候補らしい回答を出力しているようです。的確な拾い読みができるとすれば、それは素晴らしい能力です。最終的には人間が判断するのですが、そのための有力な情報を与えるということでよろしいとおもいます。
2020年6月26日金曜日
日本語係り受け解析を有効活用するために(その2)
2020年5月23日土曜日
植物に関する自由記述からJSONを自動生成(その3)
■ねらい
植物の特徴を1行で簡潔に記述した文から、その内容を反映するJSON形式テキストを自動生成する試みです。これによって、高度な検索や、植物の世界の特性の集合を求めたりすることができそうです。方式の概要は以下のとおりです。
- 内容が簡潔に圧縮されているので、自然言語解析にとっては難しそうであるが、CaboChaによる係り受け解析をベースにJSONを生成する。
- JSONのタグは、"葉"、"花"、"果"のそれぞれについて、type、what、howとする。
- 係り受け解析の結果は、右端の文節を根とする木(tree)になるので、その部分木を根や葉の方向に適宜だどり、辺どおしの関係も考慮しながらJSONを生成する。
以下において、対象となる原文はすべて、参考資料[1]にあるものを利用させていただきました。まず一例として、「シロモジ」に対する説明の原文、係り受け解析結果の要約、および、JSON(tag : value)生成結果を示します。(この例は、解析と生成がうまくできる易しい場合です。もっと難しいケースは多数あります。)
シロモジ:葉は3中裂し、黄色くて小さい花が咲き、丸い液果ができる。
【係り受け解析結果の要約】
0→1 葉は | 名詞-一般, 助詞-係助詞
1→5 3中裂し、 | [0] 動詞-自立, 記号-読点
2→3 黄色くて | 形容詞-自立, 助詞-接続助詞
3→4 小さい | [2] 形容詞-自立
4→5 花が | [3] 名詞-一般, 助詞-格助詞-一般
5→8 咲き、 | [1][4] 動詞-自立, 記号-読点6→7 丸い | 形容詞-自立
7→8 液果が | [6] 名詞-一般, 助詞-格助詞-一般
8→E できる。 | [5][7] 動詞-自立, 記号-句点
【Json(tag:value)生成結果】
<葉> type:葉, what:, how:3中裂し
<花> type:花, what:黄色くて小さい, how:咲き
<果> type:液果, what:丸い, how:できる
上記方式の解析と生成の性能を調べ、その課題は何かを把握するため、約3,000行(約3,000種の植物)の記述(参考資料[1]で示されている)のうちから、33例を対象として実験を行いました。実験結果を要約すると以下のようになります。原文に軽微な変更(句読点の追加)を許容するとすれば、33件のうち、約82%(=27/33)で正常にJSON生成ができたことになります。(->詳細な結果は後の方にあります。)
(a) 原文のままで、正常にJSON生成 -> 17件
(b) 原文に句読点を追加することで、正常にJSON生成 -> 10件
(c) 原文の助詞等を置き換えることで、正常にJSON生成 -> 5件
(d) 妥当な係り受け解析結果を得るために原文の一部を書き換え -> 1件
以上のうち、(b)は、原文に含まれている複文(主語と述語の組が複数)の区切りを、係り受け解析がうまく判断できなかったためです。複文を単文に切り分けることは、(b)のように単純に句読点を追加すれば済む場合もありますが、一般にはそれでは済まない場合も多く知られています。
また、(c)のケースは、人間が意図した意味が伝わらないという問題です。本格的な対応としては、もっと意味解析が必要かもしれません。
■感想
上記の問題(c)(d)を扱うには、(深層格フレーム辞書を用いるような)意味解析も必要かとも思いますが、このような植物記述の分野で考えた場合は、もっと単純に意味を対応づけるための辞書を使う方が実用的とも思います。
JSON生成アルゴリズムの不備は、試行しながらかなり改善できました。
■33件の解析結果の詳細(変更しました:2020-6-2)
上記に述べた、33件の解析とJSON生成結果ですが、ここに記載していましたが、取り止めました。もう少し完全な結果が得られた後に(全3,000件への適用結果の分析後に)改めて概要を報告したいと思います。
2018年12月24日月曜日
App Inventor for Android で SVM(サポートベクトルマシン)分類
「なぜ山に登るのか」
「なぜスマホでSVM分類するのか」
下記の書籍は、数多くある機械学習関連のうちの非常に優れた一冊です。これに刺激を受けて、その中にあった、SVMによる分類の例題を、Android向けにデモアプリとして動かしました。下図のとおりです。
歴史上の人物の特徴量を与えて、その人を「政治家」か「非政治家」かに分類する例題です。
このアプリでは、20名のデータのうち、ランダムに1名を選んで、それを「テスト用データ」とし、残り19名のデータを「学習用データ」として学習、テストを繰り返し実行できます。
また、このアプリの学習データを入れ替えれば、類似の問題、例えば有名な「タイタニック号の乗客の生死」の分類等にも(データ加工に幾らかの工夫は必要でしょうが)適用できそうです。
●参考書籍
杉本徹+岩下志乃共著「Javaで学ぶ自然言語処理と機械学習」、オーム社
2018年10月28日日曜日
私には嬉しい「Javaで自然言語処理」
しかし、一方では、長年使ってきたJava言語の魅力は捨てがたいものがあります。そんななかで、小生が最近取り組んでいる「自然言語処理と機械学習」をJavaで学ぶという書籍が発売になりました。内容はとても精緻に書かれている印象があります。当然ながら、広く使われているMeCab、CaboCha、LIBSVM、word2vecなどのツールやライブラリも、Pythonの場合と同じように、Javaと連携しています。私にとっては、とても嬉しい書籍なので、これも学びます。
![]() |
| 私にはうれしい書籍が発売になった |
2018年10月21日日曜日
自然言語処理をMATLABで楽しむ(その1)
現代の自然言語処理は、機械学習(Deep Learningを含む)が重要な役割を担っているようです。しかし、この記事は、難しいことを言うのではなく、楽しんでみようというつもりで書きます。ここでは、MATLABを使います。というのも、その最新版(R2018b)のText Analytics Toolboxでは日本語対応の機械学習機能も提供されているからです。もとのテキストの前処理や、解析結果のビジュアル化なども含んでいます。
何か実際のまとまった日本語のテキストデータを対象としたいですね。ここでは、以下のWebサイトを利用させていただきました。
植物の名前を探しやすい デジタル植物写真集(作成:渡辺 坦 氏)
http://plantidentifier.ec-net.jp
植物の名前を探し出して、その説明を見つけるためのサイトです。「大まかな特徴から細かな特徴へと段階的に見て探す」、「花の色によって探す」、「葉の形状によって探す」等々などが提供されています。豊富な写真も掲載されています。また、「植物の名前で探す」のセクションには、約2,500の植物それぞれについて、その特徴が1行で簡潔に記述されています。葉の形状や花の色などを含めて、特徴が自由形式で書かれています。JsonやXmlなどのフォーマットではなく、まさに自然言語の様式なのです。具体的には、以下のような記述が約2,500行あります。
... 前省略
ムキュウギク: ゲンペイコギク の別名
ムギワラギク: 葉は被針形で、花茎先に盛り上がった総苞片が開く。
ムクゲ: 先が3浅裂した葉が互生し、紅紫色の5弁花が咲く。
ムクノキ: 葉は長楕円形で、丸い核果が黒紫色に熟す。
ムクロジ: 偶数羽状複葉、花は黄緑色で、飴色の袋に黒い核がある。
ムサシアブミ: 3出複葉が2枚あり、あぶみ状の仏炎苞が出る。
ムシクサ: 葉は狭被針形で、葉腋に白い4弁花が単生し、蒴果がつく。
ムシトリナデシコ: 葉は長卵形で花は薄紅色で萼筒が長く花下の茎が粘る。
ムシトリビランジ: 根生葉は線形で、紅紫色で花筒の長い5弁花が咲き蒴果がつく。
ムシヨケギク: 葉は羽状に細裂し、舌状花は白く筒状花は黄色い。
ムスカリ: 葉は細長く、ブドウの房のように青く丸い花がぶら下がる。
ムツオレグサ: 淡緑色の小穂のついた枝が花茎に密着し細長い花序となる。
ムニンノボタン: 葉は長楕円形で3脈明瞭で、白い花が咲き丸い蒴果がつく。
ムベ: 葉は革質の掌状複葉で、楕円形の液果は割れない。
ムユウジュ: 羽状複葉の小葉は長楕円形で、赤橙色の花が散形状に咲く。
ムラサキ: 根は暗紫色で太く葉は被針形で、花冠の5裂した白い花が咲く。
... 後省略
MATLABのText Analytics Toolboxでこのテキスト全体を解析してみます。まず、単語の出現頻度解析です。原文を一定の前処理を行って整形したあと、形態素解析して単語を切り出し、単語をベクトル化し、と言う手順を含みます。その結果として得られたWord Cloudが以下の図です。この結果は、単語間の相互関係には関知せず、単に単語の出現頻度の高いものを大きく表示しただけです。しかし、これだけでも、このテキスト全体の概要をよく表していると思います。
![]() |
| 2,500の植物の特徴記述における単語出現状況 - Word Cloud |
次に、もう一歩踏み込んで、この文書全体を解析します。トピックモデルというやつです。難しそうですが、LDA(Latent Dirichlet Allocation)という手法が、関数呼び出し一発で使えるようになっています。これは、文書のなかから自動的にトピックスを見つける(潜在的な意味を見つける)というものです。MATLABでは、"An LDA model discovers underlying topics in a collection of documents and infers word probabilities in topics"と書かれています。 さっそくやってみます。もちろん、トピックスのキーとなる単語などは全く指定していません。結果は以下の通りでした。(幾つかのパラメータにより変動します。)
![]() |
| LDAにより自動的に発見(抽出)された3つのトピックス |
先に示したWord Cloudで出現頻度の高かった「花」、「葉」、「...状」を中心としたトピックスが示され、それぞれを形成する単語の出現頻度(確率)が示されています。例えば、「花」と「葉」のトピックスはちょっと微妙ではありますが、花の色や葉の形状がおぼろげながら纏められているようです。また、「...状」のトピックでは、葉や枝の付き方などの状況がある程度示されているように思われます。応用としては、これらのトピックスにある値(特性を表す単語)を手がかりに、特定の植物の特徴を与えて検索することに繋がるかも知れません。
さらに奥へ進んでみます。Word2VecによるWord Embeddingです。だんだん、混沌とした未知の領域に入って行く感がありますが、可能性は感じ取れます。下図のように、形態素解析後の有効な単語(word)をベクトル空間へ埋め込みます。この場合のベクトル空間の次元は、形態素解析後の語彙の数になり、単語のベクトル成分は、その単語の周りにくる他の単語の出現確率を反映しているはずです。埋め込み結果の一例を以下に示します。(拡大してご覧下さい。)
ハマクサギ: 葉は広卵形で、花は白→淡黄と変わり、丸い核果が黒紫に熟す。
ギンバイカ: 葉は卵形で芳香があり、長い雄しべが多数ある白い5弁花が咲く。
確かに、3つの植物の葉の形状(卵形)と花の色(白)に共通的な記述がありました!とりあえずGoodですね。
これら3者の写真(Wikipediaより引用)も確認します。主観的にも、上記の結果は納得できそうです!




























