【发布时间】:2017-08-30 12:38:55
【问题描述】:
我正在使用 gensim wmdistance 来计算参考句子和 1000 个其他句子之间的相似度。
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
根据gensimsource code,model.wmdistance返回如下:
emd(d1, d2, distance_matrix)
在哪里
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)的d1(1000次)。
2) 这个距离函数被多个用户从不同的点调用,它们对相同的 other_sentences 重复model.wmdistance(doc1, doc2) 的整个过程,并且计算量很大。对于这 1000 次比较,大约需要 7-8 秒。
因此,我想隔离这两个任务。距离的最终计算:emd(d1, d2, distance_matrix) 并准备这些输入:d1、d2 和距离矩阵。由于距离矩阵取决于两者,因此至少其输入准备应与最终矩阵计算隔离。
我最初的计划是创建三个自定义函数:
d1 = prepared1(reference_sentence)
d2 = prepared2(other_sentence)
distance_matrix inputs = prepare inputs
是否可以使用 gensim 函数来执行此操作,或者我应该使用自己的自定义版本?有什么想法和解决方案可以更好地解决这个问题吗?
【问题讨论】:
-
您是否编写了自定义解决方案?
标签: python nlp nltk gensim word2vec