Machine learning 哪些算法可以用来匹配句子?

Machine learning 哪些算法可以用来匹配句子?,machine-learning,nlp,semantics,Machine Learning,Nlp,Semantics,假设我们有一个50个句子的列表,我们有一个输入句子。如何从列表中选择与输入句子最接近的句子 我尝试过许多方法/算法,比如平均句子每个标记的word2vec向量表示,然后计算结果向量的余弦相似度 例如,我希望算法在“书籍的定义是什么?”和“请定义书籍”之间给出较高的相似性分数 我正在寻找一种方法(可能是多种方法的组合) 1.寻找语义 2.查找语法 3.为具有不同角色的不同令牌提供不同的权重(例如,在第一个示例中,“what”和“is”应获得较低的权重) 我知道这可能有点笼统,但任何建议都很感激 谢

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

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

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

我正在寻找一种方法(可能是多种方法的组合) 1.寻找语义 2.查找语法 3.为具有不同角色的不同令牌提供不同的权重(例如,在第一个示例中,“what”和“is”应获得较低的权重)

我知道这可能有点笼统,但任何建议都很感激

谢谢


阿米尔

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

为此:

  • 需要对你的单词进行引理化才能找到每个单词的词根,因此你的句子“书的定义是什么”将是“书的定义是什么”

  • 你需要删除所有的介词、动词be和所有没有意义的单词,比如:“whatbebood的定义”就是“defininitionbook”

  • 然后你用tf-idf方法或wordToVec将你的句子转换成数字向量

  • 最后,你可以用向量之间的余弦来计算句子之间的距离,所以如果余弦很小,那么你的两个句子是相似的


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

    为此:

  • 需要对你的单词进行引理化才能找到每个单词的词根,因此你的句子“书的定义是什么”将是“书的定义是什么”

  • 你需要删除所有的介词、动词be和所有没有意义的单词,比如:“whatbebood的定义”就是“defininitionbook”

  • 然后你用tf-idf方法或wordToVec将你的句子转换成数字向量

  • 最后,你可以用向量之间的余弦来计算句子之间的距离,所以如果余弦很小,那么你的两个句子是相似的


  • 你的句子太少,无法直接比较这两个文档。积极的形态变换(如词干、柠檬化等)可能会有所帮助,但鉴于您的示例,可能会有不足之处


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

    你的句子太少,无法直接比较这两个文档。积极的形态变换(如词干、柠檬化等)可能会有所帮助,但鉴于您的示例,可能会有不足之处


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

    这对于堆栈溢出来说太宽了。这是一个难题。我建议解析这50个句子并保留它们的解析树。然后分析输入的句子。对于50个解析树中的每一个,尽可能多地比较两个解析树中具有相同“词性”的单词。为单词词根的匹配程度打分。但这个问题确实是一个大问题,我们应该做大量的实验以获得最佳结果。这对于堆栈溢出来说太广泛了。这是一个困难的问题。我建议解析这50个句子并保留它们的解析树。然后分析输入的句子。对于50个解析树中的每一个,尽可能多地比较两个解析树中具有相同“词性”的单词。为单词词根的匹配程度打分。但这个问题确实是一个大问题,我们应该做大量的实验以获得最佳结果。