使用 gensim 和 FastText 进行词嵌入,对预训练向量进行训练
Word embedding with gensim and FastText, training on pretrained vectors
我正在尝试使用下一个代码加载 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
我相信,但不确定,在这种特殊情况下,您会收到此错误,因为您正在尝试加载一组简单的向量(FastText 项目倾向于将其命名为以 .vec
) 以及一种专为 FastText 特定格式使用而设计的方法,其中包括 subword/model 信息。
因此,它将文件的前导字节误解为使用 FastText 的“-supervised”模式声明模型。 (Gensim 确实不支持这样的完整模型,在不太常见的模式下。但它可以从这样的模型加载结束向量,无论如何你的文件不是真正来自那个模式。)
可与 load_facebook_vectors()
一起使用的已发布文件通常以 .bin
结尾。有关详细信息,请参阅此方法的文档:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_vectors
所以,您可以:
向此方法提供备用 .bin
命名的 Facebook-FastText 格式的向量集(带有子词信息)。 (通过快速查看他们的下载选项,我相信他们的文件类似于您的第一次尝试将被命名为 crawl-300d-2M-subword.bin
并且大小约为 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
文件和上面的 .load_facebook_vectors()
方法,这些功能将可用。)
我正在尝试使用下一个代码加载 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
我相信,但不确定,在这种特殊情况下,您会收到此错误,因为您正在尝试加载一组简单的向量(FastText 项目倾向于将其命名为以 .vec
) 以及一种专为 FastText 特定格式使用而设计的方法,其中包括 subword/model 信息。
因此,它将文件的前导字节误解为使用 FastText 的“-supervised”模式声明模型。 (Gensim 确实不支持这样的完整模型,在不太常见的模式下。但它可以从这样的模型加载结束向量,无论如何你的文件不是真正来自那个模式。)
可与 load_facebook_vectors()
一起使用的已发布文件通常以 .bin
结尾。有关详细信息,请参阅此方法的文档:
https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_vectors
所以,您可以:
向此方法提供备用
.bin
命名的 Facebook-FastText 格式的向量集(带有子词信息)。 (通过快速查看他们的下载选项,我相信他们的文件类似于您的第一次尝试将被命名为crawl-300d-2M-subword.bin
并且大小约为 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
文件和上面的 .load_facebook_vectors()
方法,这些功能将可用。)