什么算法可以起诉匹配句子?

时间:2016-12-21 23:50:38

标签: machine-learning nlp semantics

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

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

例如,我希望算法在"书的定义是什么之间给出高相似性得分?"和"请定义书"。

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

我知道这可能有点笼统,但任何建议都值得赞赏。

谢谢,

阿米尔

2 个答案:

答案 0 :(得分:2)

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

为此:

  1. 为了获得每个单词的根,需要对你的单词进行简化,所以你的句子"书的定义是什么" wood"什么 bood的定义"

  2. 你需要删除所有介词,动词和所有Word没有意义,例如:" bood的定义"将是"定义书"

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

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

  5. 跳跃将有助于

答案 1 :(得分:1)

你的句子太稀疏,无法直接比较这两个文件。积极的形态转换(如词干,词形还原等)可能对某些人有所帮助,但鉴于你的例子,可能会有所不足。

您可以做的是比较搜索结果'大文档集合中的2个句子中有多个方法。根据分布假设,类似的句子应该出现在类似的语境中(参见分布式假设,还有Rocchio算法,共现和word2vec)。这些背景(当以聪明的方式收集时)可能足够大以进行一些比较(例如余弦相似性)。