【发布时间】:2022-01-23 05:40:56
【问题描述】:
我正在尝试从包含 12k 个元素的单词列表中计算相似度矩阵。 我正在使用 Sematch 工具使用 wordnet 相似性。用几句话我正在使用这行代码:
wns_matrix = [[wns.word_similarity(w1, w2, 'li') for w1 in words] for w2 in words]
问题是,这段代码只需几个单词就可以了,但 12k 单词将是一个非常漫长的过程,比如一天以上。
是否有一种更精简、更快速的方法来计算这种相似度分数的方阵 (12k x 12k),而无需像我一样创建列表列表?
我试过这个解决方案:
wns_matrix = [wns.word_similarity(w1, w2, 'li') for (w1, w2) in itertools.combinations(words,2)]
但还是很慢! 我希望你能帮助我
【问题讨论】:
-
wns.word_similarity是一个非常慢的函数。无论您如何安排循环,它们的性能都会受到函数调用的限制。假设相似度是对称的,您可以通过添加条件if w1<w2将时间减少 2 倍。恐怕就是这样。 -
谢谢,但为什么 w1
-
把它放在列表理解中。它将减少时间,因为 w1 和 w2 之间的相似性将只计算一次,而不是两次。
标签: python-3.x list nlp word