admin 管理员组

文章数量: 1087747

句子相似度计算笔记

最近用到了句子相似度的计算,把学到的在这里总结一下。

句子相似度的计算常用的大概三种,一个TF-IDF,一个word2vector,还有在word2vector的基础上使用深度学习继续提取特征。

TF-IDF

TF-IDF感觉应该用在长文本或文章的相似度计算。

词频(TF) 指某个词在句子(文章)中出现的次数。

词频计算时一般会归一化,使用

TF = 某个词在句子中出现的次数 / 句子的总词数。

逆文档频率(IDF) 指某个词在所有句子(文章)中出现的频率。

某个词出现的文章数越少,说明这个词越不常见,越能反应出句子(文章)的特点。
计算时一般使用如下公式,分母加一是防止分母为零。

IDF = log(句子总数 / 该词出现的句子数+1)

TF-IDF就是TF与IDF的乘积,它与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。

更详细的可以看阮一峰老师的文章,感觉这个方法现在用的比较少了,毕竟word2vector效果更好,使用范围也更广。

word2vector

word2vector就是先对句子分词,获取每个词对应的词向量,然后将所有的词向量相加求平均,得到句子向量,最后计算两个句子向量的余弦值。

cosθ=a·b/|a|*|b|

word2vec一般使用其他人训练好的词向量,这个在github上一搜就可以搜到了,当然也可以自己训练,就是费时费力,效果还不一定会比别人训练的好。

深度学习

使用word2vec有一个问题,就是使用别人的词向量,并不能包含自己项目的全部词,句子中如果有词向量中没有的词就比较棘手,准确度也会降低。所以想在自己的项目中得到更好的结果,在别人训练好的词向量的基础上,使用深度学习继续训练是一个不错的办法。

Siamese Recurrent Architectures for Learning Sentence Similarity这篇论文使用的是lstm实现的,可以参考一下。

我正准备实现这一部分的代码,github仓库,实现后再来补充。

可以查看知乎:如何用 word2vec 计算两个句子之间的相似度?

本文标签: 句子相似度计算笔记