要計算文本的相似度,要解決兩個問題:首先,需要選擇一個文本的表示方式。其次,需要選擇一個衡量文本的相似度的距離度量。
文本的表示
自然語言理解的問題要轉化為機器學習的問題,第一步肯定是要找一種方法把這些文本符號數學化。詞向量是用一個向量來表示某個詞的方法。下面介紹幾種常見的詞向量。
-
SOW 詞集模型
忽略文本詞序、語法和句法,僅僅記錄某個詞是否在文本中出現。具體地,根據語料庫獲得一個單詞集合,集合中保存着語料庫中出現過的所有單詞,集合的長度為 \(|V|\),作為詞向量的長度。對於每一個詞,將該詞在字典中對應的序號所在的位置上的值置為1,其他位置上的值置為0。例如,字典集合為("a", "am", "beautiful", "i", "is", "not", "she"),那么is對應的詞向量為[0, 0, 0, 0, 1, 0, 0],文本"she is beautiful"對應的向量為[0, 0, 1, 0, 1, 0, 1]。
-
BOW 詞袋模型
與SOW相比,BOW將文本中某個單詞出現的次數也考慮到詞向量中。例如,"she is not beautiful, is she?"對應的向量為[0, 0, 1, 0, 2, 1, 2]。
-
nBOW 標准化的詞袋模型
與BOW相比,nBOW多了標准化的步驟。若 \(c_i\) 代表向量在第 i 個位置上對應的單詞在文本中出現的次數,\(d_i\) 為向量在第 i 個位置上的值,則 \(d_i = \frac{c_i}{\sum_{j=1}^{|V|} c_j}\)。"she is not beautiful, is she?"對應的向量為[0, 0, 0.17, 0, 0.33, 0.17, 0.33]。
-
TF-IDF 詞頻-逆文檔頻率
TF-IDF中,每一單詞對應的值是詞頻和逆文本頻率的乘積。TF基於單個文本計算,IDF則是基於整個語料庫計算。
詞頻:是指某個詞在文本中出現的次數 \(c_i\)。由於不同的文本有不同的長度,為了方便文本之間的比較,可以將詞頻標准化。方法一,\(TF = \frac{某個詞在文本中出現的次數}{文本的總詞數}\);方法二,\(TF = \frac{某個詞在文本中出現的次}{該文本中出現次數最多的單詞的出現次數}\)。
逆文檔頻率:如果一個單詞在整個語料庫中的很多文本里都出現,那么該單詞的逆文本頻率就越小。一種常見的計算方法是 \(IDF = \log \frac{語料庫中的總的文本數量}{包含該詞的文本數量 + 1}\)。分母之所以要加1,是為了避免分母為0(即所有文檔都不包含該詞)。
TF-IDF與文本中的某個詞的出現次數成正比,與整個語料庫中存在該詞的文本的總數量成反比。TF-IDF傾向於過濾掉常見的詞語,保留重要的詞語。一個文本中的某個單詞的TF-IDF值越大,說明在給定語料庫的前提下該單詞在這個文本中越重要。
最后,它的缺點:一方面,單純以“詞頻”衡量一個詞的重要性不夠全面,有時重要的單詞可能出現次數並不多;另一方面,TF-IDF也忽略文本詞序、語法和句法。 -
N-Gram 多元語言模型
常見的N-Gram模型包括unigram一元語言模型、bigram二元語言模型和trigram三元語言模型。實踐表明,四元及四元以上的語言模型對自然語言處理任務的幫助不大。前面所介紹的SOW、BOW、nBOW、TF-IDF都是基於unigram模型介紹的,它們假設文本中的單詞都是相互獨立的,忽略了單詞出現順序和文本結構的影響。對於bigram和trigram模型,同樣可以轉換成以上的詞向量表示方法。對於bigram模型,"she is not beautiful, is she?"中包括["she_is", "is_not", "not_beautiful", "beautiful_is", "is_she"];對於trigram模型,"she is not beautiful, is she?"中包括["she_is_not", "is_not_beautiful", "not_beautiful_is", "beautiful_is_she"]。
-
LSI/LDA
向量空間模型VSM中詞向量的長度都為 \(|V|\),通常 \(|V|\) 是一個很大的數,我們可以對其進行降維處理。經典的向量空間模型往往基於一個基本假設:文檔之間重復的詞語越多越可能相似。這一點在實際中並不盡然。VSM沒有能力處理一詞多義和一義多詞問題,例如同義詞也分別被表示成獨立的一維,計算向量的余弦相似度時會低估用戶期望的相似度;而某個詞項有多個詞義時,始終對應同一維度,因此計算的結果會高估用戶期望的相似度。很多時候相關程度取決於背后的語義聯系,而非表面的詞語重復。主題模型是特征提取的一種方法,它是對文字隱含主題進行建模的方法,可以用來進行語義挖掘。
初始的詞向量可以是SOW、BOW、nBOW、TF-IDF等,通常使用TF-IDF,得到隱含的低維語義空間,達到降維的目的。
-
潛在語義分析(LSA或LSI):一種基於奇異值分解(SVD)的方法來得到文本的主題的簡單實用的主題模型。LSA經過一次奇異值分解就可以得到主題模型,同時解決詞義的問題。但其有很多不足,導致它在當前實際的主題模型中已基本不再使用。
首先,SVD的時間復雜度高,計算耗時【可以選擇非負矩陣分解NMF方法來加快處理速度】。其次,模型中的主題數目一般是憑經驗選擇的,這個問題存在於大部分的主題模型【可以使用交叉驗證的方法尋找適合的主題數】。還有就是,LSA得到的不是一個概率模型,缺乏統計基礎,結果難以直觀的解釋【可以用pLSA或LDA這類基於概率統計的主題模型來替代基於矩陣分解的主題模型】。 -
概率潛在語義分析(pLSA或pLSI):pLSA是一個兩層概率模型。在pLSA中,D代表文檔,Z代表隱含類別或者主題,W為觀察到的單詞,則 \(P(d_i)\) 表示文檔 \(d_i\) 出現的概率(順從多項式分布),\(P(z_k|d_i)\) 表示文檔 \(d_i\) 中出現主題 \(z_k\) 下的單詞的概率(順從多項式分布),\(P(w_j|z_k)\) 表示主題 \(z_k\) 下出現單詞 \(w_j\) 的概率,因此我們的訓練目標是最大化 $$P(D,W) = \sum_{i=1}^{M} P(d_i) \sum_{j=1}^{N_{d_i}} \sum_{k=1}^{K} P(w_j|z_k) P(z_k|d_i)$$pLSA的參數個數是 \(M \times K + K \times |V|\),所以參數個數隨着文檔數量的增加而增加,通過EM算法求解。同時,文檔之間相互獨立,文檔內的單詞之間也相互獨立。但是很重要的是,pLSA只是對已有文檔的建模,也就是說模型不適合於新文檔,因此pLSA存在容易過擬合的缺點。【困難在於 \(P(z_k|d_i)\) 的構造】
-
隱含狄利克雷分布(LDA):LDA引入了Dirichlet先驗概率,pLSA是LDA的一種特殊情況,因此LDA是一個三層概率模型,相比pLSA更加復雜。【當訓練樣本量足夠大,pLSA的效果等同於LDA】LDA 生成模型中, M 篇文檔會對應於 M 個獨立的 Dirichlet-Multinomial 共軛結構;K 個主題會對應於 K 個獨立的 Dirichlet-Multinomial 共軛結構。
-
-
Word2vec模型
對於BOW、TF-IDF等基於詞袋模型來說,不同文本得到的詞向量都近乎正交,而且無法計算獨立單詞組成的文本的距離。
word2vec只能得到詞向量,比較詞之間的相似度,通過簡單的加權、tag加權、tf-idf加權等方式得到文檔向量。 -
GloVe模型
-
Doc2vec模型
加權的方式丟失了最重要的句子結構信息(也可以說是詞序信息),而doc2vec的方法則保存了這種信息。
距離度量
-
歐氏距離
\[dist(\mathbf{a}, \mathbf{b}) = ||\mathbf{a}-\mathbf{b}||$$衡量的是空間各點的絕對距離,跟各個點所在的位置坐標直接相關。歐氏距離屬於幾何距離,幾何距離還包括曼哈頓距離、切比雪夫距離。 \]\[Cosine(\mathbf{a}, \mathbf{b}) = \frac{<\mathbf{a}, \mathbf{b}>}{|\mathbf{a}| \times |\mathbf{b}|}$$衡量的是空間向量的夾角,更體現方向上的差距,對絕對數值不敏感,修正了度量標准不統一的問題。由於余弦距離對絕對數值不敏感,所以可以通過所有的樣本在維度上減去一個均值(即令特征的均值為0)來修正這種不合理。 \]\[Jaccard(\mathbf{a}, \mathbf{b}) = \frac{|\mathbf{a} \bigcap \mathbf{b}|}{|\mathbf{a} \bigcup \mathbf{b}|}$$衡量的是兩個集合中不同元素占所有元素的比例,不關注具體的值,而關注某個值是否存在。與其類似的還有Dice系數:$2 \times |\mathbf{a} \bigcap \mathbf{b}| $ 除以 $|\mathbf{a}| + |\mathbf{b}|$。 \]漢明距離的前提是待比較的兩個序列是等長的,它表示兩個序列對應位置的值不同的數量,相當於進行異或運算。
-
編輯距離
編輯距離是指兩個文本之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符/單詞替換成另一個字符/單詞,插入一個字符/單詞,刪除一個字符/單詞【動態規划問題】。
-
相對熵(KL散度)
\[D(p||q) = \sum_{i=1}^{|V|}{p(\mathbf{x}_i) log{\frac{p(\mathbf{x}_i)}{q(\mathbf{x}_i)}}}$$相對熵可以度量兩個隨機變量的距離。KL散度是兩個概率分布P和Q差別的非對稱性的度量。由於相對熵是非對稱的,因此可以分別計算 $D(p||q)$ 和 $D(q||p)$ 然后取平均 \]簡單來說,對於一個文本中的所有詞的詞向量,分別找出另一個文本中距離和該詞向量距離最近的詞向量(即最小距離),最后將這些最小距離求和。不過實際中,在詞移距離中的詞向量與詞向量之間並不是一對一的關系。一個文本中詞向量可能對應着另一個文本中的多個詞向量,只是權重不同。$$\min_{T \geqslant 0} \sum_{i,j=1}^{n} T_{ij} ||\mathbf{x_i}-\mathbf{x}j||$$$$s.t. \sum{j=1}^{n} T_{ij} = d_i,,, \sum_{i=1}^{n} T_{ij} = d_j$$算法改進:WCD、RWMD
其他
參考
http://blog.csdn.net/xiaomuworld/article/details/52372331
http://www.flickering.cn/數學之美/2014/06/lda數學八卦lda-文本建模/