gpt4 book ai didi

python - Word2Vec:使用 Gensim 和 Google-News 数据集 - 执行时间非常慢

转载 作者:行者123 更新时间:2023-12-02 03:10:57 25 4
gpt4 key购买 nike

代码是用Python编写的。我将二进制模型加载到 python 上的 gensim 中,并使用“init_sims”选项来加快执行速度。操作系统是OS X。加载大约需要 50-60 秒。以及查找“most_similar”的等效时间。这是正常的吗?在使用 init_sims 选项之前,几乎花费了两倍的时间!我感觉这可能是操作系统 RAM 分配问题。

model=Word2Vec.load_word2vec_format('GoogleNewsvectorsnegative300.bin',binary=True)
model.init_sims(replace=True)
model.save('SmallerFile')
#MODEL SAVED INTO SMALLERFILE & NEXT LOAD FROM IT
model=Word2Vec.load('SmallerFile',mmap='r')
#GIVE RESULT SER!
print model.most_similar(positive=['woman', 'king'], negative=['man'])

最佳答案

请注意,init_sims(replace=True) 的内存节省效果不会在保存/加载周期中持续存在,因为保存始终会保存“原始”向量(单位归一化向量中的原始向量)。向量可以重新计算)。因此,即使在重新加载之后,当您第一次调用 most_similar() 时,init_sims() 也会在幕后调用,并且内存使用量将翻倍。

而且,GoogleNews 数据集非常大,即使在单位标准化可能使内存使用量增加一倍之前也需要 3+ GB 来加载。因此,根据您正在运行的其他内容和机器的 RAM,您可能在运行 most_similar() 计算时使用交换内存 - 这对于“calculate-against-every”来说非常慢-向量和排序结果相似操作。 (不过,第一次之后的任何 most_similar() 检查都不需要重新填充单位标准化向量缓存,因此应该比第一次调用更快。)

鉴于您在 init_sims(replace=True) 之后保存了模型,其原始向量已经单位标准化。因此,您可以在 load() 之后手动修补模型以跳过重新计算:

model.syn0norm = model.syn0

然后,即使您的第一个 most_similar() 也只会查阅(单个、内存映射的)向量集,而不会触发 init_sims()

如果仍然太慢,您可能需要更多内存或将向量修剪为子集。 GoogleNews 向量似乎被排序为最早放置最常见的单词,因此扔掉最后 10%、50%、甚至 90% 可能仍然会给您留下一组有用的最常见单词。 (您需要通过查看模型对象和源代码自行执行此修剪。)

最后,您可以使用最近邻居索引来获得更快的前 N ​​匹配,但代价是额外的内存和近似结果(可能会错过一些真正的前 N ​​匹配)。最近的 gensim 版本中有一个 IPython 笔记本教程:annoytutorial.ipynb gensim 中演示 IPython 笔记本的 IPython 笔记本 docs/notebooks目录。

关于python - Word2Vec:使用 Gensim 和 Google-News 数据集 - 执行时间非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com