単語埋め込みとは、単語を200次元~300次元の実数ベクトルで表現する技術です。近い意味の単語を近いベクトルに対応させることができるとともに、ベクトルの足し引きで king – man + women = queenのような演算ができるようになります。

実際にPythonで単語ベクトルの演算を実演している方の動画があるので参考にどうぞ。

日本語は日本語の学習済み単語ベクトルが必要?

実際にこの方法でやってみたのですが、’king’ – ‘male’ + ‘female’ = ‘queen’という結果は得られるのですが、「王様」-「男」+「女」だと期待している「女王」という結果が得られません。日本語の処理は苦手なようです。

でも日本語でも同じようなことをしてみたいので探してみた結果、以下のようなfastTextの日本語の学習済み単語ベクトルがあることがわかりました。モデルにはいくつか種類がありますが、今回はこちらにあるWEBクローラーとWikipediaの文書から学習したモデルを利用します。cc.ja.300.vec.gzのサイズは1.2GB。ちょっと大きいけれどもダウンロードしてJupiterLabで処理をしてみることにします。

まずpipコマンドでgensimをインストールしておきます。

そのあと

「王様」-「男」+「女」=「女王」

実行結果は以下のようになります。

他にもやってみました。

アメリカ合衆国の首都はニューヨーク?

韓国の首都は釜山?

ちょっと答えが違うんじゃないかと思うものもありますが、だいたいはいい線を突いています。

AKB48? 知らんがな

このようにすれば「アイドル」と類似する単語が10件表示されます。

ではこれならどうでしょうか?

ただちょっと変えて’AKB48’ではなく’AKB’で調べてみると結果は返されます。姉妹グループの名前が表示されています。

有名なメンバーの名前ならどうか試してみましたが、”Key ‘○○’ not present”というエラーしかでません。

WEBクローラーとWikipediaの文書から学習したモデルなのですが、全名詞について網羅されているわけではないということです。興味がある分野の単語に関しては自分で集めるしかないのかな?