从单词列表中获取平方相似度矩阵
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 倍。恐怕就是这样。
谢谢,但为什么 w1wns.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 中计算余弦相似度的最快方法是啥?