GensimでFastText事前学習済みモデルを読み込むにはどうすればよいですか?


21

ここでFasttextモデルからfastText事前学習済みモデルをロードしようとしました。私はwiki.simple.enを使用しています

from gensim.models.keyedvectors import KeyedVectors

word_vectors = KeyedVectors.load_word2vec_format('wiki.simple.bin', binary=True)

ただし、次のエラーが表示されます

Traceback (most recent call last):
  File "nltk_check.py", line 28, in <module>
    word_vectors = KeyedVectors.load_word2vec_format('wiki.simple.bin', binary=True)
  File "P:\major_project\venv\lib\sitepackages\gensim\models\keyedvectors.py",line 206, in load_word2vec_format
     header = utils.to_unicode(fin.readline(), encoding=encoding)
  File "P:\major_project\venv\lib\site-packages\gensim\utils.py", line 235, in any2unicode
    return unicode(text, encoding, errors=errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position 0: invalid start byte

質問1 FastsimモデルをGensimで読み込むにはどうすればよいですか?

質問2また、モデルを読み込んだ後、2つの単語間の類似性を見つけたい

 model.find_similarity('teacher', 'teaches')
 # Something like this
 Output : 0.99

どうすればいいですか?

回答:


17

gensim fasttext.pyのfasttext実装で利用可能なメソッドへのリンクはこちらです

from gensim.models.wrappers import FastText

model = FastText.load_fasttext_format('wiki.simple')

print(model.most_similar('teacher'))
# Output = [('headteacher', 0.8075869083404541), ('schoolteacher', 0.7955552339553833), ('teachers', 0.733420729637146), ('teaches', 0.6839243173599243), ('meacher', 0.6825737357139587), ('teach', 0.6285147070884705), ('taught', 0.6244685649871826), ('teaching', 0.6199781894683838), ('schoolmaster', 0.6037642955780029), ('lessons', 0.5812176465988159)]

print(model.similarity('teacher', 'teaches'))
# Output = 0.683924396754

私は得るDeprecationWarning: Call to deprecated `load_fasttext_format` (use load_facebook_vectors。だから私は使用しています from gensim.models.fasttext import load_facebook_model
Hrushikeshドゥマル

8

以下のために.binファイルを使用:load_fasttext_format()(これは通常、パラメータ、ngramsなどとの完全なモデルが含まれています)。

.vec使用:load_word2vec_format(これが唯一の単語ベクトルが含まれています- >あなた+何ngramsがモデルを更新することはできません)。

::メモリに問題がある場合、または.binモデルをロードできない場合は、pyfasttextモデルで同じことを確認してください。

クレジット:Ivan Menshikh(Gensim Maintainer)


1
「.bin ....の場合、ロード後にトレーニングを続行できます。」「FastText APIの制限により、この方法でロードされたモデルでトレーニングを続行することはできません。」 radimrehurek.com/gensim/models/...
アンドリーDrozdyuk

これはもはや真実ではありません:DeprecationWarning:非推奨。代わりにgensim.models.KeyedVectors.load_word2vec_formatを使用してください。
mickythump

2

FastTextバイナリ形式(ロードしようとしているように見えるもの)は、Gensimのword2vec形式と互換性がありません。前者にはサブワードユニットに関する追加情報が含まれていますが、これword2vecは利用されていません。

FastText Githubページで、この問題に関するいくつかの議論(および回避策)があります。つまり、テキスト形式(https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.mdで入手可能)を読み込む必要があります

テキスト形式を読み込んだら、Gensimを使用してバイナリ形式で保存することができます。これにより、モデルのサイズが大幅に削減され、将来の読み込みが高速化されます。

https://github.com/facebookresearch/fastText/issues/171#issuecomment-294295302

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.