最基本的文字相似度計算是在向量空間模型(vsm)下,以文件中的詞作為特徵進行計算:
先來說一下vsm
思想很簡單:
d1: w1 w2 w5
d2: w2 w2 w3 w4
d3: w3 w3 w1 w2
那我現在整個文件集中就有5個詞,由於每篇文件的詞數不同,為了計算他們之間的相似度,我們首先要把他們轉換為同一維度下的向量表示,直接用文件的詞是顯然不可能得,所以,我們的前人想到了用單詞表的詞數作為特徵向量維度的方法
具體分為2種:
d1: [1 1 0 0 1]
d2: [0 1 1 1 0]
d3: [1 1 1 0 0]
d1: [1 1 0 0 1]
d2: [0 2 1 1 0]
d3: [1 1 2 0 0]
一般來說,就是先掃瞄一遍整個文件集,然後整理出文件集的詞彙表,如果詞數為n,那麼就將整個文件對映為乙個n維向量,很顯然,詞跟詞頻就作為向量的特徵
要注意的一點就是,vsm還用到了bag-of-words的思想,也就是不考慮詞出現的順序(我們上面用的w1, w2實際上是詞的id,並不是詞出現的先後),只考慮它是否出現以及出現的次數
好了,現在開始說主題
為什麼要引入tf-idf這樣的文件表示方式了,肯定是因為上面的方法有一定的不可理性:
tf-idf(term-frequency, inverse document frequency)是乙個用來表示文件中詞的重要性的權值
這裡的重要性就是我們剛才所說的特徵貢獻度
tf-idf(d, t) = tf(d, t) * idf(d, t)
其中,tf(d, t)表示文件d中包含的詞t的個數,也就是詞項t的頻率計數
idf(d, t)表示詞項t的逆文件頻率,什麼是逆文件頻率呢?我們剛剛說到了乙個例子,如果文件集中的文章都在討論汽車,那auto這個詞就會出現得很頻繁;換句話說,在進行文字分類時,auto這個詞就不是很重要,但是因為是討論汽車的文章,所以auto的term frequency往往很高,所以需要有乙個變數來均衡一下term-frequency
idf(d, t) = log(n / df(t)) , df(t)表示詞項的文件頻率,也就是出現詞項t的所有文件數目
詞項t出現的文件數目越多,表示對於當前文件的特徵貢獻度就越低,因此也就越不重要;當詞在文件中出現很少時,如果在文件集的其他文件中出現次數較少,仍然有可能取得很高的tf-idf權值,因為這個詞很有可能更能夠突出文件的特徵(例如剛才的那個ferrari)
一句話總結就是:
tf-idf綜合考慮了詞項頻率和詞的文件頻率,在文件相似度計算時,讓文件頻率高的詞的權重不會過大,同時也適當提高低頻詞的權重,思想上有點類似於訊號處理中的限幅,實際上是讓結果趨於更合理的方向
實際上tf-idf還有很多變種,不過都是大同小異,這裡就不多說了;tf-idf是一種實用的方法,好好掌握還是很有必要的呢!!
利用tf idf計算文字相似度
關於使用tf idf進行文字相似度的計算,個人覺得這兩篇文章講解的很好 大家可以去看一看。我在這裡說一些自己在學習文字相似度的計算的過程中的一些感悟,以及一些自己的理解。如有不當之處,請予指正。首先應該明確,文字相似度計算就是將兩個個體的特徵向量化,然後通過余弦公式計算兩者之間的相似性即可。當然除了...
計算文字相似度 文字相似度演算法之 simhash
文字相似度演算法種類繁多,今天先介紹一種常見的網頁去重演算法simhash。1 什麼是simhash 2 simhash步驟 人工智慧,1 大資料,2 科技,3 網際網路,4 機器學習,5 人工智慧 00101 大資料 11001 科技 00110 網際網路 10101 機器學習 01011 has...
TF IDF模型和文字相似度的計算
tf idf term frequency inverse document frequency 是一種用於資訊檢索與文字挖掘的常用加權技術。tf idf是一種統計方法,用以評估一字詞對於乙個檔案集或乙個語料庫中的其中乙份檔案的重要程度。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它...