Wie lade ich FastText Pretrained Model mit Gensim?

21

Ich habe versucht, ein FastText-vortrainiertes Modell von hier aus zu laden . Ich benutze wiki.simple.de

from gensim.models.keyedvectors import KeyedVectors

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

Es werden jedoch die folgenden Fehler angezeigt

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

Frage 1 Wie lade ich ein Fasttext-Modell mit Gensim?

Frage 2 Nach dem Laden des Modells möchte ich auch die Ähnlichkeit zwischen zwei Wörtern feststellen

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

Wie mache ich das?

Sabbiu Shah
quelle

Antworten:

17

Hier ist der Link zu den Methoden, die für die Fasttext-Implementierung in gensim fasttext.py zur Verfügung stehen

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
Sabbiu Shah
quelle
Ich bekomme DeprecationWarning: Call to deprecated `load_fasttext_format` (use load_facebook_vectors . Also benutze ich from gensim.models.fasttext import load_facebook_model
Hrushikesh Dhumal
8

Für die Verwendung von .bin : load_fasttext_format()(Dies enthält normalerweise ein vollständiges Modell mit Parametern, Ngrammen usw.).

Für .vec verwenden: load_word2vec_format(dies enthält NUR Wortvektoren -> keine ngramme + Sie können kein Modell aktualisieren).

Hinweis :: Wenn Sie Probleme mit dem Arbeitsspeicher haben oder keine .bin-Modelle laden können, überprüfen Sie das Pyfasttext- Modell.

Credits: Ivan Menshikh (Gensim-Betreuer)

Akash Kandpal
quelle
1
"Für .bin .... können Sie nach dem Laden weiter trainieren." Dies ist nicht der Fall, da in der Dokumentation heißt: "Aufgrund von Einschränkungen in der FastText-API können Sie mit einem auf diese Weise geladenen Modell nicht weiter trainieren." radimrehurek.com/gensim/models/…
Andriy Drozdyuk
Dies gilt nicht mehr: DeprecationWarning: Veraltet. Verwenden Sie stattdessen gensim.models.KeyedVectors.load_word2vec_format.
Mickythump
2

Das FastText-Binärformat (anscheinend möchten Sie es laden) ist nicht mit dem word2vecFormat von Gensim kompatibel . Ersteres enthält zusätzliche Informationen zu Unterworteinheiten, die word2vecnicht verwendet werden.

Auf der FastText Github-Seite wird das Problem (und eine Problemumgehung) erörtert. Kurz gesagt, Sie müssen das Textformat laden (verfügbar unter https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md ).

Sobald Sie das Textformat geladen haben, können Sie es mit Gensim im Binärformat speichern, wodurch die Modellgröße drastisch reduziert und das zukünftige Laden beschleunigt wird.

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

Fred
quelle