从单词列表中获取方形相似度矩阵

Obtain a square similarity matrix from a list of words

我正在尝试从包含 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倍的时间。恐怕你只能这么做了。

wns_matrix = [[(wns.word_similarity(w1, w2, 'li') if w1 < w2 else np.nan)
               for w1 in words] for w2 in words]