2018年10月27日土曜日

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

 単語のベクトル表現により、単語間の加算や減算ができることを利用します。

 前回(その2)では、日本語Wikipediaの全文の全単語のベクトル表現化を行って、指定した特定の植物に最も類似する植物を見つけました。うまく行った例を5つ示しましたが、失敗の場合もあります。失敗のパタンはいくつかありますが、同音異義語もその一つです。

 同音異義による類似検索失敗の例を以下に示します。「サワラ」という植物に最も近い類似語として、魚の「オヒョウ」が出力されました!「サワラ」という魚がいるためです。

植物の「サワラ」の類似語検索の結果です。ウヒョゥ!困りました。


 ここで思い付いたのが、以下の類語検索例です。「男ではないが、王子のように振る舞う女の類義語」または「男で王子のような人は、女ではどんな人」を検索するには、以下のように、単語(ベクトル)間の加減算を使えばいい。

  most_similar(positive = [ '王子', '' ], negative = '' )
  →  (‘王女',  0.6557) good !

 これに習って、植物の(魚ではない)「サワラ」の類語検索をします。つまり、「魚のサワラのようなのは、植物ではどんなの」を探します。

  most_similar(positive = [ 'サワラ', '植物' ], negative = '' )
  →  (‘コナラ',  0.7683) good !「コナラ」は植物!

 この検索結果を、画像でも主観的に確かめてみます。以下のとおり、まずまずです。


0 件のコメント:

コメントを投稿