Jak załadować wstępnie przeszkolony model FastText za pomocą Gensim?

21

Próbowałem załadować wstępnie wyszkolony model fastText stąd Model Fasttext . Korzystam z wiki.simple.en

from gensim.models.keyedvectors import KeyedVectors

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

Ale pokazuje następujące błędy

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

Pytanie 1 Jak załadować model szybkiego tekstu za pomocą Gensim?

Pytanie 2 Po załadowaniu modelu chcę znaleźć podobieństwo między dwoma słowami

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

Jak mam to zrobic?

Sabbiu Shah
źródło

Odpowiedzi:

17

Oto link do metod dostępnych do implementacji fasttext w 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
źródło
I dostać DeprecationWarning: Call to deprecated `load_fasttext_format` (use load_facebook_vectors. Więc używam from gensim.models.fasttext import load_facebook_model
Hrushikesh Dhumal
8

Do użytku w bin : load_fasttext_format()(zazwyczaj zawiera pełny model z parametrami, ngramami itp.).

Do użytku w .vec : load_word2vec_format(zawiera TYLKO wektory słów -> bez ngramów + nie można zaktualizować modelu).

Uwaga :: Jeśli masz problemy z pamięcią lub nie możesz załadować modeli .bin, sprawdź model pyfasttext pod kątem tego samego.

Kredyty: Ivan Menshikh (Gensim Maintainer)

Akash Kandpal
źródło
1
„Dla .bin… możesz kontynuować trening po załadowaniu.” Nie jest to prawdą, ponieważ dokumentacja stwierdza: „Z powodu ograniczeń w interfejsie API FastText nie można kontynuować treningu z modelem w ten sposób załadowanym”. radimrehurek.com/gensim/models/…
Andriy
To już nie jest prawda: DeprecationWarning: Deprecated. Zamiast tego użyj gensim.models.KeyedVectors.load_word2vec_format.
mickythump
2

Format binarny FastText (który wygląda na to, że próbujesz załadować) nie jest zgodny z formatem Gensim word2vec; poprzednia zawiera dodatkowe informacje o jednostkach pod słowem, z których word2vecnie korzysta.

Dyskusja na ten temat (i obejście) na stronie FastText Github. Krótko mówiąc, będziesz musiał załadować format tekstu (dostępny na https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md ).

Po załadowaniu formatu tekstowego możesz użyć Gensim, aby zapisać go w formacie binarnym, co znacznie zmniejszy rozmiar modelu i przyspieszy przyszłe ładowanie.

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

Fred
źródło