一、 基本概念
1. SVD奇異值分解:SVD主要用來求低階近似問題。當給定一個MXN的矩陣C時(其秩爲r),我們希望找到一個近似矩陣C‘(其秩不大於k),當k遠小於r時,我們稱C’爲C的低階近似,設X = C - C'爲兩個矩陣的差,X的F-範數爲:
SVD計算步驟:
a、 給定一個矩陣C,對其奇異值進行分解:C = U ∑ V
b、 構造∑ ‘, 其秩爲k,選擇將∑ 中奇異值最小的r-k個值置爲0,即得到∑ ’
c、 計算C‘ = U ∑’ V
因爲特徵值大小對矩陣和向量乘法的影響大小成正比,而奇異值和特徵值也是成正比,因而選擇最小的r-k個奇異值置爲0 是合理的。
2. PCA主成分分析:PCA試圖在丟失數據信息最少的情況下,對多維的數據進行最優綜合簡化,對高維的變量空間進行降維處理。
PCA計算步驟:
a、 首先計算訓練樣本的均值和協方差矩陣:
b、 對協方差矩陣進行特徵值分解:
c、 選擇前k個最大的特徵值對應的特徵向量作爲主成分分量,這些分量構成特徵空間,我們就得到變換矩陣
對任何一條數據X,通過如下變化,將其轉化到新的特徵空間中的向量y:
3. TF-IDF:
首先介紹TF-term frequency,它用來度量 一個單詞在一個文檔中出現的頻率。由於不同的文檔長短不同,爲了防止TF偏向於長文件,通常對詞頻進行歸一化處理。
通常一個文檔中如果某個詞出現的頻率較高,可以認爲這個文檔和這個詞的相關性比較高,但是,如果所有的文檔都含有這個詞,這時候,這個詞的區分度反而就不是那麼高。因此,可以用IDF來度量一個詞的區分度:逆向文件頻率——將總文件數除以包含該詞語的文件數,將結果取對數,即得到逆向文件頻率。
最後,綜合TF和IDF,我們得到TF-IDF的計算方法:
某一個特定文件中的高頻詞,以及該詞在所有文件中的低文件頻率,可以產生出較高的TFIDF. TF-IDF傾向於過濾掉常見詞,保留區分度較高的詞。
4. BOW: bag of words
BOW將一篇文章看成是詞彙的集合,忽略單詞在文章中出現的位置、句法語法等信息。利用文章中出現過的詞構建一個詞表,基於詞表將每一篇文章轉化爲一個向量,向量的每一維對應一個單詞,每一維的值對應單詞出現的次數。
二、 LSI模型
LSA(LSI)使用SVD來對單詞-文檔矩陣進行分解。SVD可以看作是從單詞-文檔矩陣中發現不相關的索引變量(因子),將原來的數據映射到語義空間內。在單詞-文檔矩陣中不相似的兩個文檔,可能在語義空間內比較相似。
SVD,亦即奇異值分解,是對矩陣進行分解的一種方法,一個t*d維的矩陣(單詞-文檔矩陣)X,可以分解爲T*S*DT,其中T爲t*m維矩陣,T中的每一列稱爲左奇異向量(left singular bector),S爲m*m維對角矩陣,每個值稱爲奇異值(singular value),D爲d*m維矩陣,D中的每一列稱爲右奇異向量。在對單詞文檔矩陣X做SVD分解之後,我們只保存S中最大的K個奇異值,以及T和D中對應的K個奇異向量,K個奇異值構成新的對角矩陣S’,K個左奇異向量和右奇異向量構成新的矩陣T’和D’:X’=T’*S’*D’T形成了一個新的t*d矩陣。
假設索引的文檔的集合如下:
對應的單詞-文檔矩陣X如下:
[[ 1. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 1. 0. 1. 0. 0. 0. 0. 0. 0.]
[ 1. 1. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 1. 1. 0. 1. 0. 0. 0. 0.]
[ 0. 1. 1. 2. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 1. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 1. 0. 0. 0. 0.]
[ 0. 0. 1. 1. 0. 0. 0. 0. 0.]
[ 0. 1. 0. 0. 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0. 1. 1. 1. 0.]
[ 0. 0. 0. 0. 0. 0. 1. 1. 1.]
[ 0. 0. 0. 0. 0. 0. 0. 1. 1.]]
對其進行SVD分解得到X=T*S*DT:
其中T如下:
[-0.22 -0.11 0.29 -0.41 -0.11 -0.34 -0.52 0.06 0.41]
[-0.2 -0.07 0.14 -0.55 0.28 0.5 0.07 0.01 0.11]
[-0.24 0.04 -0.16 -0.59 -0.11 -0.25 0.3 -0.06 -0.49]
[-0.4 0.06 -0.34 0.1 0.33 0.38 -0. 0. -0.01]
[-0.64 -0.17 0.36 0.33 -0.16 -0.21 0.17 -0.03 -0.27]
[-0.27 0.11 -0.43 0.07 0.08 -0.17 -0.28 0.02 0.05]
[-0.27 0.11 -0.43 0.07 0.08 -0.17 -0.28 0.02 0.05]
[-0.3 -0.14 0.33 0.19 0.11 0.27 -0.03 0.02 0.17]
[-0.21 0.27 -0.18 -0.03 -0.54 0.08 0.47 0.04 0.58]
[-0.01 0.49 0.23 0.02 0.59 -0.39 0.29 -0.25 0.23]
[-0.04 0.62 0.22 0. -0.07 0.11 -0.16 0.68 -0.23]
[-0.03 0.45 0.14 -0.01 -0.3 0.28 -0.34 -0.68 -0.18]
DT如下:
[-0.2 -0.61 -0.46 -0.54 -0.28 -0. -0.01 -0.02 -0.08]
[-0.06 0.17 -0.13 -0.23 0.11 0.19 0.44 0.62 0.53]
[ 0.11 -0.5 0.21 0.57 -0.51 0.1 0.19 0.25 0.08]
[-0.95 -0.03 0.04 0.27 0.15 0.02 0.02 0.01 -0.02]
[ 0.05 -0.21 0.38 -0.21 0.33 0.39 0.35 0.15 -0.6 ]
[-0.08 -0.26 0.72 -0.37 0.03 -0.3 -0.21 0. 0.36]
[-0.18 0.43 0.24 -0.26 -0.67 0.34 0.15 -0.25 -0.04]
[ 0.01 -0.05 -0.01 0.02 0.06 -0.45 0.76 -0.45 0.07]
[ 0.06 -0.24 -0.02 0.08 0.26 0.62 -0.02 -0.52 0.45]
S如下:
[ 3.34
2.54
2.35
1.64
1.50
1.31
0.85
0.56
0.36]
如果我們只保留奇異值最大的兩個,則得到T’
[-0.22 -0.11]
[-0.2 -0.07]
[-0.24 0.04]
[-0.4 0.06]
[-0.64 -0.17]
[-0.27 0.11]
[-0.27 0.11]
[-0.3 -0.14]
[-0.21 0.27]
[-0.01 0.49]
[-0.04 0.62]
[-0.03 0.45]
得到的D‘T如下:
[-0.2 -0.61 -0.46 -0.54 -0.28 -0. -0.01 -0.02 -0.08]
[-0.06 0.17 -0.13 -0.23 0.11 0.19 0.44 0.62 0.53]
S’如下:
[[ 3.34 0. ]
[ 0. 2.54 ]]
最後還原得到X‘如下:
[ 0.16 0.4 0.38 0.47 0.18 -0.05 -0.12 -0.16 -0.09]
[ 0.14 0.37 0.33 0.4 0.16 -0.03 -0.07 -0.1 -0.04]
[ 0.15 0.51 0.36 0.41 0.24 0.02 0.06 0.09 0.12]
[ 0.26 0.84 0.61 0.7 0.39 0.03 0.08 0.12 0.19]
[ 0.45 1.23 1.05 1.27 0.56 -0.07 -0.15 -0.21 -0.05]
[ 0.16 0.58 0.38 0.42 0.28 0.06 0.13 0.19 0.22]
[ 0.16 0.58 0.38 0.42 0.28 0.06 0.13 0.19 0.22]
[ 0.22 0.55 0.51 0.63 0.24 -0.07 -0.14 -0.2 -0.11]
[ 0.1 0.53 0.23 0.21 0.27 0.14 0.31 0.44 0.42]
[-0.06 0.23 -0.14 -0.27 0.14 0.24 0.55 0.77 0.66]
[-0.06 0.34 -0.15 -0.3 0.2 0.31 0.69 0.98 0.85]
[-0.04 0.25 -0.1 -0.21 0.15 0.22 0.5 0.71 0.62]
還原後的X’與X差別很大,這是因爲我們認爲之前X存在很大的噪音,X’是對X處理過同義詞和多義詞後的結果。在查詢時,對與每個給定的查詢,我們根據這個查詢中包含的單詞(Xq)構造一個僞文檔:Dq=XqTS-1,然後該僞文檔和D’中的每一行計算相似度(餘弦相似度)來得到和給定查詢最相似的文檔。
(此處參考:http://www.cnblogs.com/kemaswill/)
三、 PLSI
1. Model引入:
PLSI是一個生成模型,它同時產生文檔d和文檔中包含的詞w,以及文檔的話題z(隱變量)。
下圖示意了PLSI的生成過程:
首先從語料庫中以P(d)的概率選擇一篇文檔d,然後從文檔d中以P(z|d)的概率選擇文檔所包含的話題z,對於話題z,以P(w|z)的概率從詞表中選擇話題z包含的詞w。在話題模型中,單詞-文檔矩陣被分解成爲兩個矩陣:一個話題矩陣Φ和一個文檔矩陣Θ。
2. PLSI的應用介紹
這樣的分解方式,可以有很多應用,中間的隱變量(話題)在不同的場景下可以有不同的理解:
以上這個例子中,將隱變量(話題)理解爲客戶的Latent Profile,根據用戶的Latent Profile可以知道什麼樣的客戶喜歡什麼樣的Product。這樣可以用來爲客戶推薦新的Product。
再比如,對於文檔而言,我們可以將文檔-單詞矩陣X表示成文檔-話題矩陣V(用話題來表示文檔),以及話題-單詞矩陣U(用單詞來表示話題)。
3. Maxium Likelihood
爲了理解PLSI模型,我們首先介紹一下Maxium Likelihood:
我們知道,很多的概率分佈函數都是由一些參數所控制着,例如,對於正態分佈(X~N(μ,σ^))有均值和方差兩個參數控制,當我們知道參數的時候,我們就知道了隨機變量X的分佈情況。假如我們有了一個從某分佈產生的數據集X={x1, x2, ..., xn},但是我們不知道分佈的參數,那麼我們可以假定,這個參數最有可能是使得產生數據集X的概率最大的參數。假定我們已經知道這個參數,那麼產生數據集X的概率可以用下面這個式子來表示:
注:a、此處假定數據集中的每個樣本都是獨立同分布的;b、實際上這個式子是概率的對數形式——log-likelihood。
有了關於數據集X的概率的表達式,我們尋求使這個概率最大的參數Θ*,在參數Θ取這個Θ*時,概率L最大。那我們有理由認爲,Θ很有可能就是我們求得的Θ*.
4. PLSI的推導
依據Maxium Likelihood的原理,我們按照PLSI的生成模型來計算已知文檔的log-likelihood.
以上的Θ即我們這個生成模型中控制所有概率分佈的位置參數,我們得到likelihood的表達式以後,通過最大化likelihood來求解Θ的值。
在求解使likelihood最大的Θ的值的過程中,我們用到了Jensen不等式。Jensen不等式的直觀理解如下圖所示:
設隨機變量X以及一個凸函數f,對於隨機變量f(X)的期望值E[f(x)]大於或者等於X的期望值EX對應的函數值f(EX).等號成立當且僅當X = EX,即X是一個常量
直接求解L是比較困難的,我們可以通過不斷迭代,每次尋求一個L的下界(lower-bound),然後不斷優化這個lower-bound的值,使其逼近最優值。
按照上面的思路,我們來推導PLSI:
我們首先定義
把之前求得的L應用Jensen不等式計算一個Lower-bound
得到lower-bound的表達式以後,我們用拉格朗日乘子法來求解未知參數。
E-Step:
a、 求解:P(w|z)
由於ΣP(w|z) = 1,所以採用拉格朗日乘子法以後,我們將得到的拉格朗日表達式對P(w|z)求導,得到下式
解得:
由於ΣP(w|z) = 1, 我們可以得到:
b、 求解P(d|z): 同a,我們求得表達式如下
c、 求解P(z)
由於條件ΣP(z) = 1,我們同樣採用拉格朗日乘子法,
求解得到:
由於條件ΣP(z) = 1,我們得到:
M-Step:
最終迭代更新的方程爲:
5. PLSI算法設計:
注:初始化的時候,幾個待求的未知參數可以設置爲隨機的值,只要滿足所有概率的總和爲1即可。