Pythonとword2vecで類義語を出力する方法

word2vecを使用すると単語のベクトル情報を取得することができます。これを使うと文章間の類似度なども計測できるのですが、ここでは類義語を取得してみることにします。

日本語モデルの準備が必要です

日本語モデルを用意しないとword2vecを試してみることはできません。ありがたいことに、いろいろなブログなどで、日本語モデルが公開されているので、ありがたく使わせて頂くことにします。この記事ではhttp://public.shiroyagi.s3.amazonaws.com/latest-ja-word2vec-gensim-model.zipからダウンロードしたモデルを使っていますが、お好きなものを使って頂いて構いません。

Pythonでword2vecを使うときはgensimです

Pythonでword2vecを使うときはgensimが便利です。
pip install gensim
などで、インストールしておいてください。

プログラム

from gensim.models import word2vec
import sys
#モデルまでのパス
model_path = 'word2vec.gensim.model'
#モデルの読み込み
model = word2vec.Word2Vec.load(model_path)
item = model.most_similar("織田信長")
print(item)

織田信長と似た言葉を列挙するプログラムです。
普通の類義語辞書では、このような検索はできませんね。

実行結果

('武田信玄’, 0.9450377225875854),
('上杉謙信’, 0.9392963647842407),
('豊臣秀吉’, 0.9344321489334106),
('徳川家康’, 0.9294288158416748),
('今川義元’, 0.9271211624145508),
('明智光秀’, 0.9218041896820068),
('信玄’, 0.9203308820724487),
('毛利元就’, 0.9200537800788879),
('羽柴秀吉’, 0.9194742441177368),
('上杉景勝’, 0.9125052690505981)

という結果が得られました。
とりあえず、似た年代の戦国武将が出力されましたね。
うまく動いている様子です。

システム開発

Posted by @erestage