【问题标题】: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 之间的相似性将只计算一次,而不是两次。

标签: python-3.x list nlp word


【解决方案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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2014-02-08
    • 2021-01-11
    • 2021-01-09
    • 2021-10-28
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多