機器學習筆記-相似度

傑卡德係數

首先是最簡單最粗暴的算法。爲了對比兩個東西的相似度,我們很容易就想到可以看他們有多少相似的內容,又有多少不同的內容,再進一步可以想到集合的交併集概年,因此引入了傑卡德係數這一概念。假設有兩個集合A,B,如果我們想要知道這兩個集合的相似度有多少,我們可以進行如下的計算:
\(J(A,B)=\frac{|A ∩ B|}{|A ∪ B|}\)
這個結果成爲傑卡德距離,越大標明兩個集合的相似度越小。

TF-IDF+餘弦相似性

詞頻(TF):每個詞在文本中出現的次數,出現的越頻繁,那麼就有可能是這個文章的關鍵詞,但是實際上有一些無用的詞如“是”、“的”、“在”這樣的單詞出現的頻率也很高,我們需要過濾掉,這些詞,我們稱之爲“停用詞”;
逆文檔頻率(IDF):IDF是每一個詞重要性的權重,一個詞越少見,它的權重就越大(因爲更有可能符合主題),反之,一個詞越常見,它的IDF就越小。
於是,我們可以使用TF*IDF這個乘積來描述某個詞對文章的“重要性”。
計算TF:
詞頻TF=某個詞在文章中出現的次數/文章的總詞數
詞頻TF=某個詞在文章中出現的次數/文章中最多的詞出現的次數
計算IDF:
首選需要有一個語料庫,來模擬語言的使用環境
IDF=log(語料庫的文檔總數/包含該詞的文檔數+1)

餘弦相似度

現在我們有了兩個文本,也分別使用IF-IDF提取出了他們的關鍵詞,那麼如何判定他們是否相似呢?
首先,第一步是將關鍵詞抽成向量,舉個例子:
句子1:
我/喜歡/看/電視,不/喜歡/看/電影
句子2:
我/不/喜歡/看/電視,也/不/喜歡/看/電影
提取關鍵詞後,我們可以計算每個句子中,每個詞的詞頻:
句子1:
我 1,喜歡 2,看 2,電視 1,電影 1,不 1,也 0
對應的向量就是[1,2,2,1,1,1,0]
句子2:
我 1,喜歡 2,看 2,電視 1,電影 1,不 2,也 1
對應的向量就是[1,2,2,1,1,2,1]
有了向量,就可以使用數學知識來解決問題,我們可以把向量想象成多維空間裏的兩條直線,那麼兩個向量的相似度可以量化成爲這兩條直線的“夾角”,夾角越小,說明它們越接近,也就是越相似。
多維空間向量的餘弦公式如下:
\(cos\theta=\frac{(x_1\times x_2+y_1\times y_2)}{\sqrt{x_1^2+y_1^2}\times\sqrt{x_2^2+y_2^2}}\)
用圖來直觀的理解就是:

因此,我們根據餘弦公式算出角度大小,就能近似的判斷兩個文本的相似程度。基於相似度的算法,其實就是根據已有的用戶行爲去推斷一個一個新的用戶可能做出的下一個行爲,比如網易雲的電臺推薦。

詞袋模型和LSI模型

當然,將一個文本向量化的方式有很多,TF-IDF只是其中的一種。
下面再給出兩種比較常見的向量化手段:
1.詞袋模型
在NLP中比較常用的手段(如word2vc)。核心想法是把一篇文章想象成詞組合,沒有順序和語義之分,文章就是一個裝滿了詞的袋子。
根據語料集,把所有的詞都提取出來,邊上序號,假設我們的語料集裏有100個詞,那麼每個文章就是一個100緯的向量,每個位置上的數字表示對應編號的詞在該文章中出現的次數。
2.LSI模型
TF-IDF模型基本已經能夠勝任絕大多數的文本分析任務了,但是存在一個問題:實際的文本,用TF-IDF的緯度太高,不易於計算,因此引入了LSI的概念,從語義和文本的潛在主題來分析。LSI是概率主題模型中的一種,基於統計學和概率論方法實現,類似的模型有LDA等,具體的理論學術性太強,需要專門的數學證明來說明,這裏只展開一下核心思想:
每篇文本中有多個概率分佈不同的主題,每個主題中都包含所有已知詞,但是這些詞在不同主題中的概率分佈不同,LSI通過奇異值分解的方法,計算文本中的各個主題的概率分佈,這樣做的好處是我們的向量從詞的緯度下降到文本主題的緯度,緯度更少,計算更快。

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