【问题标题】:Find similarity between a sentence to a list of sentences查找句子与句子列表之间的相似性
【发布时间】:2016-08-14 07:11:16
【问题描述】:

我正在寻找一种针对句子列表创建单个句子的相似性向量的有效方法。

执行此操作的简单方法是遍历句子列表并检测单个句子与列表中每个句子之间的相似性。这个解决方案太慢了,我正在寻找一种更快的方法。

我的最终目标是检测句子列表中是否有与我正在检查的句子非常相似的句子,如果是,我将转到下一个句子。

我现在的解决办法是:

for single_sentence in list_of_sentences:
    similarity_score = word2vec.sentences_similarity(sentence2test, single_sentence)
    if similarity_score >= similarity_th:
       ignore_sent_flag = True
       break 
list_of_sentences.append(sentence2test)

我尝试将“list_of_sentences”放入字典/集合中,但时间方面的改进很小。

我遇到了this 解决方案,但它仅基于 Linux 软件包,因此与我无关。

【问题讨论】:

  • 您对一对多或所有对所有相似性检查感兴趣吗?解决方案还需要基于 gensim 吗?
  • @GökhanSever 我对“所有”列表正在增长时的一对多感兴趣
  • 如果您的解决方案不需要 gensim,您可以简单地根据 n-character-gram 或 word-gram 计算 Jaccard 相似度。
  • 解决方案实际上需要Gensim。
  • @LiorMagen 关于你如何解决这个问题的任何更新?

标签: python nlp deep-learning gensim word2vec


【解决方案1】:

我想建议两件事: 1. 尝试将“list_of_sentences”放入文件中 2. 用正则表达式循环文件更快。

【讨论】:

  • 'list_of_sentences 的大小是动态的,如果相似度低于给定阈值,我会将 'sentence2test' 添加到 'list_of_sentences' 中,因此保存文件并加载这么多文件听起来像是浪费时间次。我正在寻找一种方法来使用它是 Numpy 对象这一事实。
【解决方案2】:

使用 LSH (1) 对您的句子进行哈希处理,并仅测试您的候选人匹配的哈希存储桶中的句子。您只需测试一个小得多的子集,而不是比较所有句子。

(1)How to understand Locality Sensitive Hashing?

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 2021-03-29
    • 1970-01-01
    • 2020-06-12
    • 2019-02-06
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多