上一篇總結了潛在語義分析(Latent Semantic Analysis, LSA),LSA主要使用了線性代數中奇異值分解的方法,但是並沒有嚴格的概率推導,由於文本文檔的維度往往很高,如果在主題聚類中單純的使用奇異值分解計算復雜度會很高,使用概率推導可以使用一些優化迭代算法來求解。
Thomas Hofmann 於1998年根據似然原理定義了生成模型並由此提出了概率潛在語義分析模型(Probabilistic Latent Semantic Analysis),簡稱PLSA。
PLSA屬於概率圖模型中的生成模型,相關的模型還有語言模型中的一元模型(Unigram Model)、混合一元模型(Mixture of Unigrams Model)等。
首先對文集進行設定。假設文集的詞典中共有V個詞,詞典向量為
,假設詞是獨立同分布的(一袋子詞),即
,一篇文章可以表示為
,其中
表示第i個詞在當前文檔中出現的次數。
一元模型中假設每篇文檔的詞都獨立遵從於多項式分布,即假設詞典中第i個詞
在文檔中出現的次數遵從多項式分布,即
。打個比方來說假設我們有一個V面的骰子,骰子第i面向上的概率為
,每擲一次骰子得到一個詞,擲M次后便得到一篇由M個詞組成的文檔
(文檔的詞之間是獨立同分布的)。根據多項式分布可以知道文檔
的概率為

下圖中圖(a)便是一元語言模型的概率圖模型,而圖(b)中是PLSA的概率圖模型。
PLSA模型中與一元模型中假設詞遵從多項式分布不同,PLSA模型中引入了潛層變量
作為主題變量,即假設當前文集由K個主題構成。設
為文集中的第m篇文檔,
表示第t個主題,
為第i個詞。
為所有文檔的概率分布,
是文檔
的概率,
為文檔
對應的主題的分布,
為主題
對應的詞的分布。
PLSA模型的生成過程如下:
- 根據概率
選擇一篇文檔
- 根據概率
選擇一個潛性主題
,並且
- 根據概率
生成一個詞
,並且
當然每個模型都對文集有一定的假設,PLSA做了如下的假設:
- 並元
的每一對共現是獨立的 - 當已知潛性變量
的時候,變量
和變量
是條件獨立的。
PLSA最初是根據視面模型(Aspect Model)提出的,假設1與一元模型中的“一袋子詞”的假設相似,假設2與PLSA定義的圖模型的生成關系有關,PLSA的圖模型類似於X->Z->Y這種模式,在貝葉斯網絡中被稱為間接因果影響(“Indirect Causal Effect”)。舉個例子來說,X表示你口袋里有沒有2塊錢,Z表示你能不能買一只筆,Y表示你能不能參加考試。假如不知道你能不能買一支筆(Z),那么你口袋里有沒有2塊錢(X)將影響到你能不能參加考試(Y)。但是假如你已經知道你是否可以買一只筆(Z),則你口袋里有沒有2塊錢(X)就影響不到你能不能參加考試了(Y)。即已知變量Z,變量X和Y是獨立的。
PLSA最終是要求得每個並元
對應主題的概率,即
。下面我們來推導公式。PLSA使用極大似然估計(MLE)。
首先求解隱變量z的對數似然函數
:

由於PLSA模型的假設1,所以有:

其中
表示第n篇文檔中的第m個詞出現的次數。
又由於在已知變量z的情況下d和w是獨立的,可得:

PLSA使用EM算法求解極大似然,EM算法是一種機器學習中非常常用的迭代近似算法。一般用來求解得到極大似然或極大后驗的參數值。E步指的是在當前參數的情況下隱變量的后驗概率(Expectation),M步指的是求解得到極大似然或極大后驗的參數值(Maximization)。
首先計算上面似然函數的期望值:
![\mathbb{E}[\mathcal{L}]=\Sigma_{k=1}^{K}(p(z_k|w,d)\mathcal{L})=\Sigma_{m=1}^{M}\Sigma_{n=1}^{N}n(m,n)\Sigma_{k=1}^{K}p(z_k|w_{m,n},d_{m})\log(p(w_{m,n}|z_{k})p(d_{m}|z_{k}))](/image/aHR0cHM6Ly9ibG9nLXBvdGF0b2xpZmUucmhjbG91ZC5jb20vd3AtY29udGVudC9wbHVnaW5zL2xhdGV4L2NhY2hlL3RleF9lN2I3MmMzM2Y1MjljOTZhYmVhMDgyMzEzNjhiZWVhMS5naWY=.png)
上式有兩個限制條件:


根據拉格朗日乘數法進行極值推導,分別對兩個約束設定兩個參數
,
:
![\bigwedge = \mathbb{E}[\mathcal{L}]+\Sigma_{m=1}^{M}\Sigma_{k=1}^{K}(\lambda_{m,k} (1-\Sigma_{n=1}^{N}p(w_{m,n}|z_{k}) ))+ \Sigma_{m = 1}^{M}\tau_{m} (1-\Sigma_{k=1}^{K}p(d_{m}|z_{k}))](/image/aHR0cHM6Ly9ibG9nLXBvdGF0b2xpZmUucmhjbG91ZC5jb20vd3AtY29udGVudC9wbHVnaW5zL2xhdGV4L2NhY2hlL3RleF83NzYxNjEyN2VlNDY3NzExZmU0OWFjMTVlNzg5NzIzNy5naWY=.png)
在上式中分別對變量
和
求偏導得到:


與之前的限制條件聯立得到:


於是便得到了M步求最大化的等式。
PLSA的EM步驟便可以化簡如下:
E步:計算變量z的后驗概率
M步:計算
,
PLSA的問題便是在變量中含有文檔d這個變量,在模型上受限使其很難應用到其他文檔上去。之后David Blei提出的LDA(Latent Dirichlet Allocation)便是給文集設定了兩個超參來省略掉文檔這個固定變量。
PLSA的實現C++代碼:【還未上傳】
https://blog-potatolife.rhcloud.com/?p=147
