Como carrego o modelo pré-treinado FastText com o Gensim?

21

Tentei carregar o modelo pré-treinado fastText a partir daqui, modelo Fasttext . Estou usando wiki.simple.en

from gensim.models.keyedvectors import KeyedVectors

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

Mas, mostra os seguintes erros

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

Pergunta 1 Como eu carrego o modelo de texto rápido com o Gensim?

Pergunta 2 Além disso, depois de carregar o modelo, quero encontrar a semelhança entre duas palavras

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

Como eu faço isso?

Sabbiu Shah
fonte

Respostas:

17

Aqui está o link para os métodos disponíveis para implementação de texto rápido em 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
fonte
Eu entendo DeprecationWarning: Call to deprecated `load_fasttext_format` (use load_facebook_vectors. Então eu estou usando from gensim.models.fasttext import load_facebook_model
Hrushikesh Dhumal
8

Para uso .bin : load_fasttext_format()(normalmente contém modelo completo com parâmetros, ngrams, etc.).

Para uso .vec : load_word2vec_format(contém APENAS vetores de palavras -> sem ngrams + você não pode atualizar um modelo).

Nota :: Se você estiver enfrentando problemas com a memória ou não conseguir carregar modelos .bin, verifique o modelo pyfasttext para ver o mesmo.

Créditos: Ivan Menshikh (mantenedor de Gensim)

Akash Kandpal
fonte
1
"Para .bin .... você pode continuar o treinamento após o carregamento." Isso não é verdade, como a documentação declara: "Devido a limitações na API do FastText, você não pode continuar treinando com um modelo carregado dessa maneira". radimrehurek.com/gensim/models/…
Andriy Drozdyuk
Isso não é mais verdade: DeprecationWarning: Deprecated. Use gensim.models.KeyedVectors.load_word2vec_format.
mickythump
2

O formato binário do FastText (que é o que parece que você está tentando carregar) não é compatível com o word2vecformato do Gensim ; o primeiro contém informações adicionais sobre unidades de subpalavras, que word2vecnão são utilizadas.

Há alguma discussão sobre o problema (e uma solução alternativa) na página do FastText Github. Em resumo, você precisará carregar o formato de texto (disponível em https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md ).

Depois de carregar o formato de texto, você pode usar o Gensim para salvá-lo no formato binário, o que reduzirá drasticamente o tamanho do modelo e acelerará o carregamento futuro.

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

Fred
fonte