前提
Google Colabを使用しています.
学習済みword2vecモデルを実行したいです.
使用しているのは,東北大学の乾・岡崎研究室(http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/)
で配布されている20170201.tar.bz2を解凍したものです.
実現したいこと
エラーメッセージで,配列のサイズが合っていないということは分かったのですが,この方法以外でモデルを読み込み,どう実行できるか分かりません.
この方法以外で実行できる方法はありますでしょうか?
またソースコードに間違いがあれば教えていただきたいです.
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-22-fc9c6d2fe55a> in <module> 1 from gensim.models import KeyedVectors 2 model_dir = './entity_vector.model.bin' ----> 3 model = KeyedVectors.load_word2vec_format(model_dir, binary=True) 4 results = model.most_similar(u'[人生]') 5 for result in results: 2 frames /usr/local/lib/python3.8/dist-packages/gensim/models/keyedvectors.py in load_word2vec_format(cls, fname, fvocab, binary, encoding, unicode_errors, limit, datatype) 1434 """ 1435 # from gensim.models.word2vec import load_word2vec_format -> 1436 return _load_word2vec_format( 1437 cls, fname, fvocab=fvocab, binary=binary, encoding=encoding, unicode_errors=unicode_errors, 1438 limit=limit, datatype=datatype) /usr/local/lib/python3.8/dist-packages/gensim/models/utils_any2vec.py in _load_word2vec_format(cls, fname, fvocab, binary, encoding, unicode_errors, limit, datatype) 211 word = utils.to_unicode(b''.join(word), encoding=encoding, errors=unicode_errors) 212 weights = fromstring(fin.read(binary_len), dtype=REAL).astype(datatype) --> 213 add_word(word, weights) 214 else: 215 for line_no in xrange(vocab_size): /usr/local/lib/python3.8/dist-packages/gensim/models/utils_any2vec.py in add_word(word, weights) 193 logger.warning("vocabulary file is incomplete: '%s' is missing", word) 194 result.vocab[word] = Vocab(index=word_id, count=None) --> 195 result.vectors[word_id] = weights 196 result.index2word.append(word) 197 ValueError: could not broadcast input array from shape (194,) into shape (200,)
該当のソースコード
python
1from gensim.models import KeyedVectors 2 3model_dir = 'entity_vector.model.bin' 4model = KeyedVectors.load_word2vec_format(model_dir, binary=True) 5results = model.most_similar(u'[人生]') 6for result in results: 7 print(result)
補足情報(FW/ツールのバージョンなど)
python 3.8.15
当方のmacで、
https://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/
から「20170201.tar.bz2」を落として解凍して、pythonにgensim 3.8.3を入れて、質問のコードをそのまま実行したら、エラーは出ずに実行できました
gensimは、学習時とバージョンが大きく違うと、エラーがよく出ますので、今回のもそれかもしれません
私もマシンローカルの python 3.8.13 + gensim 3.8.3 と python 3.8.13 + gensim 4.2.0 とでそのままのコードが動きました。
ファイルの置き方などをスクリーンショットで追加した方がいいかもしれません。
gensim 4.2.0でも動いたのですね
なんでしょうね
質問者さんが使ってるgensimのバージョンが、かなり古いとか
コメントありがとうございます.連絡が開いてしまいすみません.
gensimは3.6.0を使用しており,pythonは3.8.16を使用しています.
マシンローカルで動かすことも検討し,windowsにpipをダウンロードしてからpip install gensimとダウンロードを試みましたがエラーが出たためダウンロードできませんでした.
出力結果だけ得られれば良いので,googlecolabでもローカルでもなんでもいいです
出力結果というのはこのプログラムの結果ではなくて,これをもとに特定の2つの単語のコサイン類似度を得たいと考えているので,そのコサイン類似度のことを指しています.分かりにくくてすみません
https://pypi.org/project/gensim/3.6.0/#files
どうやって3.6.0がイントールできたのですか?
訂正: Google Colabでソースからビルドインストールは普通に出来ますね。失礼しました
> マシンローカルで動かすことも検討し,windowsにpipをダウンロードしてから
このPythonのバージョンはなんですか? 3.11とか使ってたりしませんよね?
まさに3.11.1を使っています.良くなかったでしょうか?
コマンドプロンプトからgensimを入れようとすると,Visual Studioが必要だからインストールしてとエラーが吐かれたので,今インストールしているところです
https://pypi.org/project/gensim/#files
3.11用のファイルはまだ準備されてないです。
そうなんですね.ではひとまず3.11はアンインストールして,3.10とかをインストールし直したらいいでしょうか?
colabがもはや関係ないなら3.10系でいいと思います
google colabで、
!wget https://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/data/20170201.tar.bz2
!tar xf 20170201.tar.bz2
!mv ./entity_vector/entity_vector.model.bin .
を実行してから、質問のコードをそのまま実行したら、エラーは出ずに実行できました
> gensimは3.6.0を使用しており
は同じです
(そのバージョンが、もともとgoogle colabにインストール済みでした)
> そのバージョンが、もともとgoogle colabにインストール済みでした
納得です。2022/12/12 18:02 のコメントはやはり完全に見当違いでした。失礼しました。
ということはコードを実行前に20170201.tar.bz2を取得して解凍した手順が明らかにされる必要がありそうです。
そこに勘違いがあるとWindowsでも同じ間違いをしそう。(colabで上手くいくやり方が示されていますが同じ結果になる作業が正しくできる必要があります。普通に心配になります)
