我们说我们有50个句子的列表,我们有一个输入句子。如何从列表中选择最接近输入句子的句子?
我尝试了很多方法/算法,例如对句子的每个标记的word2vec向量表示进行平均,然后对结果向量的余弦相似性进行平均。
例如,我希望算法在"书的定义是什么之间给出高相似性得分?"和"请定义书"。
我正在寻找一种方法(可能是方法的组合) 1.寻找语义 2.寻找语法 3.为具有不同角色的不同令牌赋予不同的权重(例如,在第一个示例中'什么''应该得到更低的权重)
我知道这可能有点笼统,但任何建议都值得赞赏。
谢谢,
阿米尔
答案 0 :(得分:2)
在计算句子之间的距离之前,你需要清理它们,
为此:
为了获得每个单词的根,需要对你的单词进行简化,所以你的句子"书的定义是什么" wood"什么 bood的定义"
你需要删除所有介词,动词和所有Word没有意义,例如:" bood的定义"将是"定义书"
然后使用tf-idf方法或wordToVec将句子转换为数字向量。
Finnaly你可以通过在向量之间使用余弦来计算句子之间的距离,所以如果余弦很小,那么你的两个句子是相似的。
跳跃将有助于
答案 1 :(得分:1)
你的句子太稀疏,无法直接比较这两个文件。积极的形态转换(如词干,词形还原等)可能对某些人有所帮助,但鉴于你的例子,可能会有所不足。
您可以做的是比较搜索结果'大文档集合中的2个句子中有多个方法。根据分布假设,类似的句子应该出现在类似的语境中(参见分布式假设,还有Rocchio算法,共现和word2vec)。这些背景(当以聪明的方式收集时)可能足够大以进行一些比较(例如余弦相似性)。