通过排除某些词汇来更快地加载 fasttext 模型
Posted
技术标签:
【中文标题】通过排除某些词汇来更快地加载 fasttext 模型【英文标题】:Load fasttext model faster by excluding certain vocabulary 【发布时间】:2017-11-20 18:30:42 【问题描述】:在本地机器上加载 Facebook Research 发布的预训练 fasttext wordvectors 需要很长时间,我这样做是这样的:
model = fs.load_word2vec_format('wiki.en.vec')
print(model['test']) # get the vector of the word 'test'
我正在寻求通过删除未出现在我的数据集中的单词的词向量来减少加载时间。 IE。我想将预训练的向量模型简化为构成我需要分析的数据集的单词,这是预训练模型的子集。
我正要尝试通过提取我需要的词向量并保存到新模型来构建一个新模型,但类型会从 FastTextKeyedVectors 更改为 FastText:
#model2 = gensim.models.Word2Vec(iter=1)
#model2 = FastText()
for word in words:
if (word in model):
model2[] = model[word]
如何减少加载时间?我的方法有意义还是我走错了路?
【问题讨论】:
【参考方案1】:如果可以迭代 .vec 格式,那将是消除不需要的单词的最快方法。要知道这一点,您应该查看数据库的结构。如果它是接近 xml 格式的东西,那应该是可行的,并且如何在 python 中迭代 xml 文件已被广泛记录。
但是,关于您的方法,假设您刚刚以字典的形式将整个 model
加载到 RAM 中,只是一个快速提示,请使用理解语法:
model=model[word] for word in model if word in mywords
mywords
是您要保留的单词列表。
【讨论】:
这会引发“int is not iterable”的错误,但所涉及的结构都不是int类型。你能帮忙吗?以上是关于通过排除某些词汇来更快地加载 fasttext 模型的主要内容,如果未能解决你的问题,请参考以下文章