2018年10月26日金曜日

自然言語処理をMATLABで楽しむ(その2)

 テキストで表現された植物の特徴事典から、類似植物を見つけられるか?

(最後の方に、「類似度」とは何かについて追加しました。)

 これをやってみたいと思います。ここでは事典として、植物に限らず、広く社会科学、工学、理学、医学等の膨大な用語を解説している「日本語Wikipedia」を用います。そのテキスト全文(公開されている)から全ての単語(名詞、動詞、形容詞など)を切り出し、それを多次元(ここでは次元削減後の100次元)ベクトル表現したものを用意します。それらベクトル間の類似度で、単語どうしの類似性を判断します。以上は、現代の自然言語処理の定番のやり方なのであります。

 日本語Wikipedia全文のテキストは、xml形式の圧縮版で2.75GBあります。その中の全単語をベクトル表現化したものは、どこかで公開されているかも知れませんが、今回は自分で全部作ることにしました。解凍、テキスト化、形態素解析を行い、分かち書きの結果をWord2Vecでベクトル表現化しました。それら全体に要したパソコン(Core i7, 3GHz)の処理経過時間は、実に約5時間でした!(その間は、コーヒータイム&クラシック音楽鑑賞なので問題なし。)

 その結果何ができるかと言いますと、例えば、テキストとして与えた、植物名「クヌギ」に対して最も類似度の高い言葉(恐らく植物名になる)を見つけられます。結構うまく行った類似検索結果を以下に5つ示します。
  • 「クヌギ」に最も類似するもの→「コナラ」(accuracy 0.90)
  • 「リンドウ」に最も類似するもの→「キキョウ」(accuracy 0.87)
  • 「ホタルブクロ」に最も類似するもの→「ムラサキケマン」(accuracy 0.88)
  • 「カラマツ」に最も類似するもの→「アカマツ」(accuracy 0.94)
  • 「サワグルミ」に最も類似するもの→「アカガシ」(accuracy 0.88)

 繰り返しになりますが、この類似度検索は、テキストで書かれた情報だけを使っています。画像などでの判断は全く行っていません。ですから、この類似度判定結果が妥当かどうかを、主観的に画像による形態比較で判断してみます。以下がその結果です。Very Goodではないでしょうか。

 これらの画像は、以下のURLにあるものを使わせていただきました。
 渡辺 坦 氏による「植物の名前を探しやすいデジタル植物写真集」
 



  まとめとして、日本語Wikipedia(このテキスト情報だけ)を使って、指定した植物名に最も類似すると思われる植物名を特定できました。もちろん、いつもうまく行くとは限りませんが、上記の5題の結果は、いくつかの可能性を示していると思います。

-------------------------------
 ここまで来たところで、「類似度」とは何かを確認したいと思います。上記と同じ、Wikipediaを使った「夏」と「休暇」の類似語検索結果は以下のようになりました。

  •  → (0.90)、(0.88)、(0.87)
  • 休暇 → 休養(0.69)、休み(0.69)、育休(0.67)

 これは、現代の自然言語処理(単語のベクトル表現化)で主流となっている「分布仮説」が使われているためと思われます。すなわち、「単語の意味は、その周囲に出現する単語によって形成される」ということです。ですから、例えば、「夏」と「冬」は全く違うじゃないかと思うかも知れませんが、両者は文章の中で共に近傍に出現するか、あるいは良く似た文脈に出現する確率が高いことを示しています。また同様に、「休暇」と「休養」が別々に出現する文章があった場合、それらの文章は同じような文脈で使われることが多い。すなわち、「休暇」と「休養」のまわりに出現する単語は似ている、と考えられるのです。
 上記の植物の説明文において、植物学上の分類や葉の形状や花の色、等々に関する多数の単語の出現具合が似ているかどうかで類似度が決まるはず。このような背景を踏まえて結果を眺める必要がありそうです。

0 件のコメント:

コメントを投稿