2、TF-IDF和BM25计算文本相似度

这两者计算的都是文档和文本之间的相似度,如果是两个短文本貌似也可以。

1、TF-IDF = TF * IDF

      假设文本是“我怎么这么帅气”,4个词,第一个词“我”, 文档1中一共有10个词,“我”有2次,这个词的词频都是2,这就是TF

      第一个词“我”,在所有文档中,有“我”这个词的文档数是m,文档总数是n,则IDF = log(n/(m+1))

      则可以计算得到当前词“我”在当前文档的重要程度,当前文档所有词的重要程度就会组成一个向量,两个文档之间向量的相似度就是就是文档之间的相似度

     优点:从常理来判断,一个词在这个文档中出现的次数越多,对于这个文档这个词就越重要;一个词在很多文档中都出现过,就说明这个词不能区分这些文档,重要性越低;这就是为何要tf *idf。

    缺点:分词可能会导致语义的变化;TF的值并没有归一化在一个合理的区间。

2、针对上面的缺点,提出了BM25:实际就是TF-IDF的变形

    所以BM25就优化了TF的计算过程,    

fi词q在文档1中出现的频率。k1 = 2, b = 0.75,后面一项一般为1,dl是文档1的长度,avgdl是所以文档的平均长度,这样的话TF的值就归一化在一个区间了。BM25TF-IDF上增加了几个可调节的参数,使得它在应用上更加灵活和强大,具有较高的实用性。词频对得分的影响可以控制在一定范围内,而不是像TF-IDF那样持续增大

3、除了上面计算两个文本相似度的方法之外,还有DSSM、MatchPyramid、BiMPM、词向量

   DSSM:把两个文本转换成低位向量,和词向量类似。正负样本的构造很简单,一个样本=两个文本,相关就是正样本

   MatchPyramid:这个比较巧妙了,假设两个文本句子长度分别是m和n。利用glove向量或者之前训练过的向量得到一个相似度矩阵m*n,然后多个卷积核得到多个featureMap,再池化,再卷积,再池化,再全连接得到向量,使用softmax得到概率。

                                   

   BiMPM:两个文本长度是m和n,通过双向RNN分别计算两个文本的隐含层向量,再整合这些向量,文本1的还是m个,文本2的还是n,只不过现在都包含了彼此的信息,再分别放入RNN,然后去两个方向的最终结果,相当于4个向量拼接经过softmax。

                                            

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章