0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gensimで類似単語を取得する

Posted at

はじめに

データ分析をする際に,とある単語に対する類似単語を取得したかった。

概要

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のドキュメントで。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?