はじめに
データ分析をする際に,とある単語に対する類似単語を取得したかった。
概要
Pythonの自然言語処理ライブラリであるgensimと学習済み単語ベクトル表現を用いて,とある単語に対する類似単語を取得する。
準備
pipでgensimをインストールする。
$ pip install gensim
学習済み単語ベクトル表現をダウンロードする。今回はFacebookが公開しているfastTextを使う。結構サイズが大きいのでダウンロードには少し時間がかかる。
$ wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.ja.300.vec.gz
プログラムの作成
ダウンロードした学習済み単語ベクトル表現と同じ階層にプログラムを作成する。
directory
├── ruizi.py
└── cc.ja.300.vec.gz
ruizi.py
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format(
"cc.ja.300.vec.gz", binary=False
)
results = model.most_similar(positive=["ゲーム"]) #ここで元の単語を指定する
for result in results:
print(result)
モデルのロードには時間がかかるので,実行すると10分くらい待たされる。いろいろ試したい場合はjupyter notebookなどの対話型実行環境で動かしたほうが良い。実行結果は次のようになる。
$ python ruizi.py
('ミニゲーム', 0.62871915102005)
('RPG', 0.6233924627304077)
('ゲームプレイ', 0.6169121265411377)
('コンシューマーゲーム', 0.6154342293739319)
('プレイ', 0.6067700982093811)
('コンシューマ', 0.6023121476173401)
('スマホゲーム', 0.5920637845993042)
('アニメ', 0.5835986733436584)
('ソーシャルゲーム', 0.5811622738838196)
('マルチプレイゲーム', 0.5735786557197571)
"ゲーム"に関係していそうな単語がいい感じにとれている。
他にも,2つの単語の類似度を取得することもできる。
print(model.similarity("サッカー", "スポーツ"))
# 0.5706692
print(model.similarity("サッカー", "テナガザル"))
# 0.21133302
詳しくは,gensimのドキュメントで。