这两者计算的都是文档和文本之间的相似度,如果是两个短文本貌似也可以。
1、TF-IDF = TF * IDF
假设文本是“我怎么这么帅气”,4个词,第一个词“我”, 文档1中一共有10个词,“我”有2次,这个词的词频都是2,这就是TF
第一个词“我”,在所有文档中,有“我”这个词的文档数是m,文档总数是n,则IDF = log(n/(m+1))
所有词叠加就是这个文本和这个文档的相似度
优点:从常理来判断,一个词在这个文档中出现的次数越多,对于这个文档这个词就越重要;一个词在很多文档中都出现过,就说明这个词不能区分这些文档,重要性越低;这就是为何要tf *idf。
TF-IDF还可以用来统计多个文档中每个文档中的重要词。
缺点:分词可能会导致语义的变化;TF的值并没有归一化在一个合理的区间。
2、针对上面的缺点,提出了BM25:实际就是TF-IDF的变形
所以BM25就优化了TF的计算过程,
fi词q在文档1中出现的频率。k1 = 2, b = 0.75,后面一项一般为1,dl是文档1的长度,avgdl是所以文档的平均长度,这样的话TF的值就归一化在一个区间了。
3、除了上面计算两个文本相似度的方法之外,还有DSSM、MatchPyramid、BiMPM、词向量
DSSM:把两个文本转换成低位向量,和词向量类似
MatchPyramid:这个比较巧妙了,假设两个文本句子长度分别是m和n。利用glove向量或者之前训练过的向量得到一个相似度矩阵m*n,然后多个卷积核得到多个featureMap,再池化,再卷积,再池化,再全连接得到向量,使用softmax得到概率。
BiMPM:两个文本长度是m和n,通过双向RNN分别计算两个文本的隐含层向量,再整合这些向量,文本1的还是m个,文本2的还是n,只不过现在都包含了彼此的信息,再分别放入RNN,然后去两个方向的最终结果,相当于4个向量拼接经过softmax。
来源:CSDN
作者:Jeu
链接:https://blog.csdn.net/cuipanguo/article/details/103702355