FastTextKeyedVectors向量,vectors_vocab和vectors_ngrams实例变量之间的差异
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastTextKeyedVectors向量,vectors_vocab和vectors_ngrams实例变量之间的差异相关的知识,希望对你有一定的参考价值。
我下载了wiki-news-300d-1M-subword.bin.zip并按如下方式加载:
import gensim
print(gensim.__version__)
model = gensim.models.fasttext.load_facebook_model('./wiki-news-300d-1M-subword.bin')
print(type(model))
model_keyedvectors = model.wv
print(type(model_keyedvectors))
model_keyedvectors.save('./wiki-news-300d-1M-subword.keyedvectors')
按预期,我看到以下输出:
3.8.1
<class 'gensim.models.fasttext.FastText'>
<class 'gensim.models.keyedvectors.FastTextKeyedVectors'>
我还看到了下面的三个numpy数组序列化到磁盘上:
$ du -h wiki-news-300d-1M-subword.keyedvectors*
127M wiki-news-300d-1M-subword.keyedvectors
2.3G wiki-news-300d-1M-subword.keyedvectors.vectors_ngrams.npy
2.3G wiki-news-300d-1M-subword.keyedvectors.vectors.npy
2.3G wiki-news-300d-1M-subword.keyedvectors.vectors_vocab.npy
我了解vectors_vocab.npy
和vectors_ngrams.npy
,但是vectors.npy
内部使用的是gensim.models.keyedvectors.FastTextKeyedVectors
?如果查看用于查找word vector的源代码,则看不到如何在任何地方使用属性vectors
。我看到使用了vectors_vocab
和vectors_ngrams
Bing属性。但是,如果删除vectors.npy
文件,则无法使用gensim.models.keyedvectors.FastTextKeyedVectors.load
方法加载模型。
有人可以解释使用此变量的位置吗?如果我感兴趣的只是查找字向量(以减少内存占用),可以删除它吗?
谢谢。
vectors_ngrams
是存储从单词片段(字符n-gram)中学习到的向量的存储桶。无论遇到多少个n-gram,它都是固定大小的-因为多个n-gram可以“碰撞”到同一插槽中。
vectors_vocab
是通过FastText算法训练的完整单词令牌向量。但是,请注意,FastText为词汇中的单词返回的实际单词向量被定义为该向量vectors
存储词汇中单词的实际,可返回的全单词向量。也就是说:它是vectors_vocab
值加上所有单词的n-gram向量的预先计算的组合。
因此,vectors
从不直接训练,并且始终可以从其他数组重新计算。它可能
不应
作为已保存模型的一部分存储(因为它是多余的信息,可以根据需要进行重构)。 ((对于FastText的特定情况,甚至可以将其作为可选的优化方式-愿意节省内存,但每字查找速度较慢的用户,将其丢弃。但是,这会使非常普通且重要的操作变得复杂类似于most_similar()
的操作,如果它们具有所有潜在答案词向量的完整且就绪的数组,则效率会更高。)如果没有看到直接访问vectors
,则可能您没有考虑从超类继承的方法。
尽管使用vectors
保存的任何模型在以后.load()
出现时都需要该文件,但可以想象通过放弃model.wv.vectors
属性
之前
保存,然后强制对其进行重构,从而节省磁盘存储空间加载后。加载模型后,您仍然需要支付RAM成本。 计算出vectors
之后,并且如果您完全完成了培训,则可以想象会放弃vectors_vocab
属性以节省RAM。 (对于任何已知的单词,可以直接查询vectors
以进行即时查找,并且仅在进行进一步培训或需要重新生成vectors_vocab
的情况下才需要vectors
。)以上是关于FastTextKeyedVectors向量,vectors_vocab和vectors_ngrams实例变量之间的差异的主要内容,如果未能解决你的问题,请参考以下文章