LoginSignup
85

More than 3 years have passed since last update.

Word2Vecの学習済み日本語モデルを読み込んで使う

Last updated at Posted at 2018-02-20

モデルを読み込む

https://qiita.com/Hironsan/items/8f7d35f0a36e0f99752c
上記のサイトに書かれているようにWord2Vecの学習済み日本語モデルを読み込んでみる。


import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('ja.bin', binary=True)

するとこんなエラーが

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte

少し調べてみて、引数でbinary=Falseにしたりunicode_errors='ignore'にしたりしてみたがダメ

もう少し調べてみると、どうやら

save_word2vec_formatで保存したモデルはload_word2vec_formatで読み込めて、
saveで保存したモデルはloadで読み込めるらしい

そこで、モデルを構築しているコードをみているとやはりsaveで保存していたのでloadを試してみる


model = gensim.models.Word2Vec.load('ja.bin')

読み込めました

モデルを使ってみる

ベクトルを取り出す


>> model["日本"]
array([ -1.74537051e+00,  -4.53219324e-01,  -6.23617232e-01,
        -2.89993620e+00,   3.06393117e-01,  -3.30475301e-01,
        -1.27820873e+00,  -1.35765445e+00,  -8.48491848e-01,
        ....

類似の単語を探す

>> model.most_similar("日本")
[('ドイツ', 0.5213181376457214),
 ('インドネシア', 0.45377281308174133),
 ('トカラ', 0.4508640170097351),
  ....

単語の加減を計算して類似の単語を探す


>> model.most_similar(positive=['姪', '男性'], negative=['女性'])
[('叔母', 0.5650175213813782),
 ('伯母', 0.5648938417434692),
 ('甥', 0.5636885762214661),
 ('義弟', 0.550722599029541),
 ('義妹', 0.5479429960250854),

(正解は"甥")

参考:https://qiita.com/naotaka1128/items/2c4551abfd40e43b0146

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
85