【问题标题】:What are the algorithms which could be sued to match sentences? [closed]有哪些算法可以用来匹配句子? [关闭]
【发布时间】:2017-05-07 12:38:01
【问题描述】:

假设我们有一个包含 50 个句子的列表,并且我们有一个输入句子。如何从列表中选择最接近输入句子的句子?

我尝试了许多方法/算法,例如平均句子每个标记的 word2vec 向量表示,然后计算结果向量的余弦相似度。

例如,我希望算法在“书的定义是什么?”之间给出较高的相似度分数。和“请定义书”。

我正在寻找一种方法(可能是方法的组合) 1.寻找语义 2.寻找语法 3. 为具有不同角色的不同标记赋予不同的权重(例如,在第一个示例中,'what' 和 'is' 应该得到较低的权重)

我知道这可能有点笼统,但欢迎提出任何建议。

谢谢,

阿米尔

【问题讨论】:

  • 这对于 Stack Overflow 来说太宽泛了。
  • 一个难题。我建议解析 50 个句子并保留它们的解析树。然后解析传入的句子。对于这 50 个中的每一个,尽可能地比较两个解析树中具有相同“词性”的单词。给词根的匹配程度打分。但这个问题确实很开放,人们应该期望做很多实验才能获得最好的结果。

标签: machine-learning nlp semantics


【解决方案1】:

您的句子太稀疏,无法直接比较两个文档。积极的形态学转换(如词干、词形还原等)可能会有所帮助,但考虑到您的示例,可能会达不到要求。

您可以做的是将大型文档集合中的 2 个句子的“搜索结果”与多种方法进行比较。根据分布假设,相似的句子应该出现在相似的上下文中(参见分布假设,还有 Rocchio 的算法、共现和 word2vec)。这些上下文(以智能方式收集时)可能足够大,可以进行一些比较(例如余弦相似度)。

【讨论】:

    【解决方案2】:

    在计算句子之间的距离之前,你需要清理它们,

    为此:

    1. 需要对您的单词进行词形还原以获得每个单词的词根,因此您的句子“书的定义是什么”将是“书的定义是什么

    2. 您需要删除所有介词、动词 to be 和所有没有意义的单词,例如:“what be the definition of bood”将是“definintion book”

    3. 然后你使用 tf-idf 方法或 wordToVec 将句子转换为数字向量。

    4. 最后,您可以通过使用向量之间的余弦来计算句子之间的距离,所以如果余弦很小,那么您的两个句子相似。

    这会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2014-10-19
      • 2012-10-18
      • 1970-01-01
      • 2023-01-27
      • 2016-01-20
      • 1970-01-01
      相关资源
      最近更新 更多