首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化Gensim word mover的速度距离函数( distance )

优化Gensim word mover的速度距离函数( distance )
EN

Stack Overflow用户
提问于 2017-08-30 12:38:55
回答 1查看 2.5K关注 0票数 3

我正在使用gensim wmdistance计算引用句和其他1000个句子之间的相似度。

代码语言:javascript
复制
    model = gensim.models.KeyedVectors.load_word2vec_format(
     'GoogleNews-vectors-negative300.bin', binary=True)
    model.init_sims(replace=True)  

    reference_sentence = "it is a reference sentence"
    other_sentences = [1000 sentences]
    index = 0
    for sentence in other_sentences: 
      distance [index] = model.wmdistance(refrence_sentence, other_sentences)
      index = index + 1

根据gensim 源代码model.wmdistance返回以下内容:

代码语言:javascript
复制
emd(d1, d2, distance_matrix)

哪里

代码语言:javascript
复制
d1 =  # Compute nBOW representation of reference_setence.
d2 =  # Compute nBOW representation of other_sentence (one by one).
distance_matrix = see the source code as its a bit too much to paste it here.

对于我的用例,这段代码在两方面效率低下。

1)对于参考句,对距离函数emd(d1, d2, distance_matrix)重复计算emd(d1, d2, distance_matrix) (1000次)。

2)该距离函数由来自不同点的多个用户调用,对同一model.wmdistance(doc1, doc2)重复整个other_sentences过程,计算量大。对于这1000次的比较,大约需要7-8秒。

因此,我想把这两项任务分开。距离的最终计算:emd(d1, d2, distance_matrix)和这些输入的准备: d1,d2和距离矩阵。由于距离矩阵依赖于两者,因此至少应该将其输入准备与最终的矩阵计算隔离开来。

我最初的计划是创建三个自定义函数:

代码语言:javascript
复制
d1 = prepared1(reference_sentence)
d2 = prepared2(other_sentence)
distance_matrix inputs = prepare inputs 

使用这个gensim函数可以做到这一点吗?还是应该使用我自己的自定义版本?有更好的方法来解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-30 22:56:35

您正确地注意到,可以对此代码进行重构和优化,以避免重复操作,特别是在对一个引用/查询文档根据更大的文档集进行评估的常见情况下。(任何这样的改进也将是对gensim的一个可喜的贡献。)

在计算之外简单地准备单个文档可能不会带来很大的节省;在每种情况下,都必须计算两个文档之间的所有字对字距离。预先计算一个更大的distance_matrix (在相关词汇表和系统内存允许的范围内)可能是有意义的,它包含了许多成对大规模毁灭性武器计算所需的所有单词。

(尽管预先计算出所有单词到单词的距离是很有诱惑力的,但词汇量只有300万单词,比如GoogleNews向量集,而只有4字节的浮点距离,存储它们至少需要18 to。因此,在可管理的文档批次上计算相关单词的距离可能更有意义。)

一种可能的方法是创建一个wmdistance()的变体,它可以显式地处理一个文档和一组文档,因此可以将创建直方图/距离矩阵结合起来,以便同时进行多个比较。

对于不需要所有大规模毁灭性武器值,但只需要最接近的结果的情况,在最初的大规模毁灭性武器文件中描述了一个优化,可以使用另一种更快的计算(称为“RWMD”)来推断文档不可能出现在顶层-N结果中,从而跳过对这些文档的完整大规模毁灭性武器计算。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45960671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档