Comment charger le modèle pré-formé FastText avec Gensim?

21

J'ai essayé de charger le modèle pré-formé fastText à partir d'ici le modèle Fasttext . J'utilise wiki.simple.en

from gensim.models.keyedvectors import KeyedVectors

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

Mais, il montre les erreurs suivantes

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

Question 1 Comment charger un modèle fasttext avec Gensim?

Question 2 Aussi, après avoir chargé le modèle, je veux trouver la similitude entre deux mots

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

Comment puis-je faire cela?

Sabbiu Shah
la source

Réponses:

17

Voici le lien pour les méthodes disponibles pour l'implémentation fasttext dans gensim fasttext.py

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
la source
Je comprends DeprecationWarning: Call to deprecated `load_fasttext_format` (use load_facebook_vectors. Donc j'utilise from gensim.models.fasttext import load_facebook_model
Hrushikesh Dhumal
8

Pour l' utilisation de .bin : load_fasttext_format()(il contient généralement un modèle complet avec des paramètres, des ngrammes, etc.).

Pour l' utilisation .vec : load_word2vec_format(cela ne contient que des vecteurs de mots -> pas de ngrams + vous ne pouvez pas mettre à jour un modèle).

Remarque :: Si vous rencontrez des problèmes avec la mémoire ou si vous ne parvenez pas à charger les modèles .bin, vérifiez le modèle pyfasttext pour le même.

Crédits: Ivan Menshikh (mainteneur Gensim)

Akash Kandpal
la source
1
"Pour .bin .... vous pouvez continuer la formation après le chargement." Ce n'est pas vrai, comme l'indique la documentation: "En raison des limitations de l'API FastText, vous ne pouvez pas continuer à vous entraîner avec un modèle chargé de cette façon." radimrehurek.com/gensim/models/…
Andriy Drozdyuk
Ce n'est plus vrai: DeprecationWarning: Obsolète. Utilisez plutôt gensim.models.KeyedVectors.load_word2vec_format.
mickythump
2

Le format binaire FastText (qui ressemble à ce que vous essayez de charger) n'est pas compatible avec le word2vecformat de Gensim ; le premier contient des informations supplémentaires sur les unités de sous-mots, qui word2vecne sont pas utilisées.

Il y a une discussion sur le problème (et une solution de contournement), sur la page FastText Github. En bref, vous devrez charger le format texte (disponible sur https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md ).

Une fois que vous avez chargé le format texte, vous pouvez utiliser Gensim pour l'enregistrer au format binaire, ce qui réduira considérablement la taille du modèle et accélérera le chargement futur.

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

Fred
la source