Harukaのnote

Linuxやプログラミング,写真,旅行等の記録帳

Gensim の KeyedVectors でエラー (is this really the text format?)

自分で Word2Vec のような各単語に対し,そのベクトルを表記したモデルを作成したとき,KeyedVectors を使います.

model.txt 等には以下の用に書き出します.

[単語数] [次元数]
word1 -0.101747 -0.011735
word2 -0.017135 0.051458
︙

これを KeyedVectors で読み込んで使いたいときこう書きます.

from gensim.models import KeyedVectors

vectors = KeyedVectors.load_word2vec_format('./model.txt', binary=False)

これで正しいはずですが,何度も

ValueError: invalid vector on line 行番号 (is this really the text format?)

エラーが発生します.model.txtの該当行をみても不審な点はなくわけがわかりませんでした.しかし,目視チェックと少量ずつの実行を繰り返し,やっと原因がわかりました.

犯人は「PlayStation 2」!!

正確には「 2 」部分ですが,上述したように,KeyedVectors で読み込まれるファイルは半角スペース区切りであるため,PlayStation 2 の行だけは 2 をベクトルの1つと認識したため,
次元数が合わずエラーになっていたようです.

なら該当行はそこを教えて欲しいのですが…

今回私がした作業のように元々のWord2Vecモデルをゴニョゴニョして,そこに含まれる単語に新たなベクトルを追加する場合,おそらく元のモデルはバイナリ表記だから半角スペースを含む単語でも問題なくて,今回扱いやすくユニコードで出力して読み込みしたので,こうなったのでしょう.

本来読み込みがうまく行っていたデータだけになかなか気づきませんでした.

PlayStation 2」→「PlayStation2」のようにすべて処理して解決!