文本相似度计算与检索

前言:

文本的检索和相似度计算在nlp的应用中有很重要的作用,本文介绍了一种简单方法对问答匹配进行一种实现,即在所有的query中找到和用户输入query罪匹配的一项。本方法比较适合细粒度的匹配。

主要技术:

(1)关键词分析:提取出Query中主要的关键词,作为检索源。
(2)全文检索:如mysql、ELsearch等均可。 作为召回。
(3)在召回数据中进行相似度计算找到最高匹配项。完成匹配。

关键词分析将在另一篇文章中进行记录,这里只是介绍匹配方法。
该批配方法按照移动距离最低的方式进行计算:
(1)首先需要训练词向量。
(2)将短句字pad到长句子的长度。
(3)随机调整词序列使得两个句子最相似(注意否定词的罚分),也可以进行贪心匹配,这样效率更高。
效果如下:

wd.sentence_distance(u"雪人 怎么 制作 呀".split(), u"怎么 堆 雪人 啊".split())

雪人 怎么 制作 呀
雪人 怎么 堆 啊
0.3479853431949209

wd.sentence_distance(u"中国 哪 座 山 最高".split(), u"中国 最高 的 山 是 哪里".split())
中国 最高 的 山 是 哪里
中国 最高 * 山 座 哪
0.17140382731208006

后记:
该方法对句法结构不敏感。
需要种子库中每种语义尽量全,适合语义明确度较高的检索。
检索时不能进行词的相似。

注:之前工作整理。

猜你喜欢

转载自blog.csdn.net/cyinfi/article/details/88070288