読者です 読者をやめる 読者になる 読者になる

ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

【python3】word2vecでKeyError

環境

Windows10
cygwin
word2vec 0.91
pyton3.5.1

事象

こんな感じで「KeyError」ってエラー発生

$ python-windows -i
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import word2vec
>>> word2vec.word2vec('c:/tmp/wakati_text.txt', 'c:/tmp/wakati_text.bin', size=300, verbose=True)
b'Starting training using file c:/tmp/wakati_text.txt\r\n'b'Vocab size: 279\r\n'b'Words in train file: 3935\r\n'>>> 
>>> model = word2vec.load('c:/tmp/wakati_text.bin')
>>> model.cosine('ブラジル')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python3.5\lib\site-packages\word2vec\wordvectors.py", line 76, in cosine
    metrics = np.dot(self.vectors, self[word].T)
  File "C:\Python3.5\lib\site-packages\word2vec\wordvectors.py", line 45, in __getitem__
    return self.get_vector(word)
  File "C:\Python3.5\lib\site-packages\word2vec\wordvectors.py", line 54, in get_vector
    idx = self.ix(word)
  File "C:\Python3.5\lib\site-packages\word2vec\wordvectors.py", line 42, in ix
    return self.vocab_hash[word]
KeyError: 'ブラジル'

関係しそうな情報発見
>その語が登録されていないと、KeyErrorを返す
ノート/テキストマイニング/gensim-word2vecでベクトル空間を試す - 東邦大学理学部情報科学科 山内のサイト


もしかしたら元データが文字化けとしかしてる?
それか文字コードの関係とか・・

wakati_text.txtを確認した所、UTF-8

これも関係しそう。

>word2vecでモデルを構築するときにデフォルトだと頻度が5未満の文字は無視されてしまう。頻度がどれくらいなら無視するかはmin_countパラメータで設定できる。
Tech Tips: word2vecで遊ぶ


コーパスファイルの中を確認して頻出しそうなワードを指定してみるとエラー出なかった。

>>> model.cosine('ライフ')