使用gensim和FastText进行单词嵌入,对预训练的向量进行训练。

问题描述 投票:0回答:1

我试图用下面的代码加载Facebook fasttext crawl-300d-2M.vec的预训练vec文件。

from gensim.models.fasttext import load_facebook_model, load_facebook_vectors

model_facebook = load_facebook_vectors('fasttext/crawl-300d-2M.vec')

但却出现了下一个错误

NotImplementedError: Supervised fastText models are not supported

"无法加载这个向量"?

如果可以,之后我可以用自己的句子来训练它吗?

先谢谢你了。

整个错误跟踪。

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-181-f8262e0857b8> in <module>
----> 1 model_facebook = load_facebook_vectors('fasttext/crawl-300d-2M.vec')

/opt/conda/lib/python3.7/site-packages/gensim/models/fasttext.py in load_facebook_vectors(path, encoding)
   1196 
   1197     """
-> 1198     model_wrapper = _load_fasttext_format(path, encoding=encoding, full_model=False)
   1199     return model_wrapper.wv
   1200 

/opt/conda/lib/python3.7/site-packages/gensim/models/fasttext.py in _load_fasttext_format(model_file, encoding, full_model)
   1220     """
   1221     with gensim.utils.open(model_file, 'rb') as fin:
-> 1222         m = gensim.models._fasttext_bin.load(fin, encoding=encoding, full_model=full_model)
   1223 
   1224     model = FastText(

/opt/conda/lib/python3.7/site-packages/gensim/models/_fasttext_bin.py in load(fin, encoding, full_model)
    339         model.update(dim=magic, ws=version)
    340 
--> 341     raw_vocab, vocab_size, nwords, ntokens = _load_vocab(fin, new_format, encoding=encoding)
    342     model.update(raw_vocab=raw_vocab, vocab_size=vocab_size, nwords=nwords, ntokens=ntokens)
    343 

/opt/conda/lib/python3.7/site-packages/gensim/models/_fasttext_bin.py in _load_vocab(fin, new_format, encoding)
    192     # Vocab stored by [Dictionary::save](https://github.com/facebookresearch/fastText/blob/master/src/dictionary.cc)
    193     if nlabels > 0:
--> 194         raise NotImplementedError("Supervised fastText models are not supported")
    195     logger.info("loading %s words for fastText model from %s", vocab_size, fin.name)
    196 

NotImplementedError: Supervised fastText models are not supported
python gensim word-embedding fasttext
1个回答
1
投票

我相信,但不确定,在这个特定的情况下,你得到这个错误是因为你试图加载一组普通向量(FastText项目倾向于将其命名为以 .vec)与一个被设计用于FastText特定格式的方法,其中包括子虫模型信息。

结果,它将文件的前导字节误解为将模型声明为使用 FastText'-supervised'模式的模型。(Gensim确实不支持这样的完整模型,在那个不太常见的模式下。但它可以从这样的模型中加载终端向量,无论如何,你的文件并不是真正来自于该模式)。)

已发布的文件可以与 load_facebook_vectors() 通常以 .bin. 更多细节请参见该方法的文档。

https:/radimrehurek.comgensimmodelsfasttext.html#gensim.models.fasttext.load_facebook_vectors。

所以,你可以或者。

  • 提供一个备用的 .bin-命名的,Facebook-FastText格式化的向量集(带子词信息)到这个方法。(从快速查看他们的下载选项,我相信他们的文件与你的第一次尝试类似,将被命名为 crawl-300d-2M-subword.bin &amp;大小约为7.24GB)。

  • 加载你所拥有的文件,只有它的全词向量,通过。

    from gensim.models import KeyedVectors
    model = KeyedVectors.load_word2vec_format('fasttext/crawl-300d-2M.vec', binary=False)

在后一种情况下,没有FastText特有的功能(比如使用子词向量合成词汇外的猜测向量)将是可用的--但无论如何,这些信息不在'crawl-300d-2M.vec'文件中。(如果您使用更大的 .bin 文件&amp。.load_facebook_vectors() 上述方法)。)

© www.soinside.com 2019 - 2024. All rights reserved.