這兩者計算的都是文檔和文本之間的相似度,如果是兩個短文本貌似也可以。
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。