Topic Model之Probabilistic Latent Semantic Indexing(PLSI/PLSA)

Probabilistic Latent Semantic Indexing(PLSI/PLSA)是常用的話題模型之一,他通過生成模型來模擬文檔的產生過程,然後用Maximum likelihood的方法估計模型中未知參數的值,來獲取整個生成模型中的參數值,從而構建起整個生成模型。

一、 基本概念

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即可。


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