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

Posted

技术标签:

【中文标题】从单词列表中获取平方相似度矩阵【英文标题】:Obtain a square similarity matrix from a list of words 【发布时间】: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 之间的相似性将只计算一次,而不是两次。 【参考方案1】:

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]

【讨论】:

以上是关于从单词列表中获取平方相似度矩阵的主要内容,如果未能解决你的问题,请参考以下文章

给定单词相似度推断句子相似度

在给定稀疏矩阵数据的情况下,Python 中计算余弦相似度的最快方法是啥?

JQuery如何从相似的字符串中选出准确字符串,并获取其容器ID

余弦相似度计算

文本相似度算法

如何计算两个文档的相似度