Gensim word2vec大规模杀伤性武器相似性词典

2024-05-08 16:30:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在100万个摘要数据集(20亿字)上使用word2vec。为了找到最相似的文档,我使用gensim.similarities.WmdSimilarity类。当尝试使用wmd_similarity_index[query]检索最佳匹配时,计算将大部分时间用于构建字典。这是一块原木:

2017-08-25 09:45:39,441 : INFO : built Dictionary(127 unique tokens: ['empirical', 'model', 'estimating', 'vertical', 'concentration']...) from 2 documents (total 175 corpus positions)                                                        
2017-08-25 09:45:39,445 : INFO : adding document #0 to Dictionary(0 unique tokens: [])          

这部分是什么?它是否依赖于查询?所有这些计算都有办法吗?在

编辑:我的代码中的培训和评分阶段:

培训并保存到磁盘:

^{pr2}$

装载和划线:

w2v = gensim.models.Word2Vec.load(utils.paths.PATH_DATA_GENSIM_WORD2VEC)
words = [t for t in proc_text if t in w2v.wv]
corpus_w2v_wmd_index = gensim.similarities.docsim.Similarity.load(utils.paths.PATH_DATA_GENSIM_CORPUS_WORD2VEC_WMD_INDEX)
scores_w2v = np.array(corpus_w2v_wmd_index[words])  

Tags: pathinfodataindexdictionaryloadutilscorpus
1条回答
网友
1楼 · 发布于 2024-05-08 16:30:00

“单词移动距离”的计算相对昂贵——对于每个成对的文档比较,它会搜索语义位置的最佳“移位”,而这种移位本身取决于每个被比较文档中所有单词之间的成对简单距离。在

也就是说,与两个高维向量之间的简单余弦距离相比,它涉及的计算量要大得多,而且两个文档越长,计算量也就越多。在

texts语料库中,直到知道查询的单词为止,没有多少内容可以预先计算出来。(每个成对计算取决于查询的单词,以及它们与每个语料库文档单词的简单距离。)

也就是说,gensimWmdSimilarity类还没有做一些优化。在

原始的大规模杀伤性武器论文描述了一种更快的计算方法,可以帮助消除语料库文本,这些文本不可能出现在与大规模杀伤性武器相似的前N个结果中。理论上,gensim WmdSimilarity也可以实现这种优化,并给出更快的结果,至少在使用num_best参数初始化WmdSimilarity时。(如果没有它,每个查询都会返回所有WMD相似性得分,因此这种优化不会有帮助。)

另外,目前,WmdSimilarity类只是将对语料库文档对的每个查询调用KeyedVectors.wmdistance(doc1, doc2),作为原始文本。因此,从所有doc1单词到doc2单词的成对简单距离每次都将被重新计算,即使在语料库中有许多对重复出现。(也就是说,如果“apple”在查询中,而“orange”在每个语料库文档中,它仍然会重复计算“apple”到“orange”的距离。)

因此,一些临时值的缓存可能会有助于性能。例如,在所有语料库文档中,查询1000个单词,词汇量为100000个单词,可以使用200MB预先计算一次((1000 * 100,000) / 2)5000万个成对单词的距离,然后由所有后续的大规模杀伤性武器计算共享。添加此优化将需要WmdSimilarity.get_similarities()和{}的协同重构。在

最后,Word2Vec/Doc2Vec应用程序不一定需要停止单词删除或词干提取,也不一定从中获益。但是,由于大规模杀伤性武器计算的开销会随着文档和词汇表的大小而增加,因此任何缩小有效文档大小的方法都有助于提高性能。因此,在对大型文档集使用大规模杀伤性武器时,可以考虑各种方法来丢弃低值单词,或者合并相似的单词。在

相关问题 更多 >