【機器學習】潛在語義分析LSA和PLSA

1.詞袋模型(BOW)

  在自然語言處理NLP領域中,詞袋模型(bag of words,BOW)是經典的模型之一。它考慮所有的詞彙都裝在一個袋子中,任何一篇文檔中的單詞都可以用袋子中的詞彙來描述。如果有10萬個詞彙,那麼每篇文檔都可以表示爲一個10萬維的向量。得到文檔向量之後,我們通過可以通過描述向量之間的差異來尋找文檔之間的關聯。
  但是詞袋模型有幾個明顯的缺點:

  1. 稀疏性(Sparseness):對於大詞袋,尤其是包含了生僻字的詞袋,文檔稀疏性不可避免。
  2. 一詞多義:一詞多義是一種常見的現象,但是BOW模型只統計單詞出現的次數,而忽略了他們之間的區別;
  3. 多詞一義:在不同或相同文檔中,可能存在多種單詞存在同一個意思。
      爲了解決同義詞以及文檔稀疏性的問題,在BOW模型中引入“主題”的概念,提出了Latent Semantic Analysis (LSA)模型。我們在寫文章時,首先想到的是文章的主題,然後才根據主題選擇合適的單詞來表達自己的觀點。

2.潛在語義分析 (LSA)

  LSA也稱爲LSI(latent semantic index)。在PCA降維中,我們利用SVD做矩陣分解,將樣本降到低緯度的空間。在LSA中,我們同樣也應用SVD來解決相似的問題,將文檔從稀疏的n維空間映射到一個低維(k維)的向量空間,我們稱之爲隱含語義空間(Latent Semantic Space).
  ps:如對SVD算法有不理解的地方,可以參考【機器學習算法推導】奇異值分解SVD與主成分分析PCA
LSA的算法流程如下:

  • (1)分析文檔集合,建立詞彙-文本矩陣A。
  • (2)對詞彙-文本矩陣進行奇異值分解。
  • (3)使用降維後的矩陣構建潛在語義空間,將原始文本映射到k維空間。

2.1 LSA的優點

  • 將一篇文檔映射到低維空間,意味着有一些詞彙在降維後在同一個點上,也就是說,這些點刻畫着同義詞。
  • 降維可去除部分噪聲,使特徵更魯棒;
  • 充分利用冗餘數據;
  • 無監督/完全自動化;
  • 與語言無關;

2.2 LSA的不足

  • 沒有刻畫詞彙出現次數的概率模型;
  • 無法解決多義詞的問題;
  • SVD的優化目標基於L-2 norm 或者是 Frobenius Norm的,這相當於隱含了對數據的高斯噪聲假設。而term出現的次數是非負的,這明顯不符合Gaussian假設;
  • 對於count vectors 而言,歐式距離表達是不合適的(重建時會產生負數);
  • 特徵向量的方向沒有對應的物理解釋;
  • SVD的計算複雜度很高,而且當有新的文檔來到時,若要更新模型需重新訓練;

3. PLSA(基於概率的LSA)

  對於一個正常人來說,我們是如何構思一篇文章的呢?一般來說我們會先確定我們要寫的主題,比如說我正在寫的這篇文章是機器學習相關的,可能會涉及到計算機,概率論,機器學習方面的術語,假設線性代數佔20%,概率論主題佔30%,機器學習主題佔50%。而在概率論中,可能會聯想到期望,方差,概率等詞彙,線性代數可能會聯想到矩陣,特徵值等詞彙,機器學習方面可能會出現模型,權重,空間等詞彙。
  我們可以很自然地認爲,一篇文章(doc)是由幾個主題(topic)組成的,並且不同的主題由該主題下頻率較高的一些詞彙(word)進行描述。
  我們定義:

  • p(dm)p(d_m)表示從文檔集合D中選擇一個文檔dmd_m的概率
  • p(zkdm)p(z_k|d_m)表示從topic set中選擇一個主題zkz_k的概率,即給定文檔在各個主題的概率分佈,服從多項式分佈。
  • p(wnzk)p(w_n|z_k)表示從word set中選擇一個詞彙wnw_n的概率,即給定主題在各個詞彙上的概率分佈,服從多項式分佈。
      可知聯合概率分佈p(dm,zk,wn)=P(dm)P(zkdm)P(wnzk)p(d_m,z_k,w_n)=P(d_m)P(z_k|d_m)P(w_n|z_k)
      對於一篇文檔,由多個詞彙組成,令其爲w=(w1,w2,..,wN)\vec w=(w_1,w_2,..,w_N),生成這篇文檔的概率爲P(wdm)=n=1NP(wndm)P(\vec w|d_m)=\prod\limits_{n=1}^NP(w_n|d_m)
      dmd_mwnw_n的聯合概率爲
    P(dm,wn)=P(dm)P(wndm)=P(dm)kP(zkdm)P(wnzk,dm)=P(dm)kP(zkdm)P(wnzk) \begin{aligned} P(d_m,w_n) &=P(d_m)P(w_n|d_m) \\ &=P(d_m)\sum_kP(z_k|d_m)P(w_n|z_k,d_m) \\ &=P(d_m)\sum_kP(z_k|d_m)P(w_n|z_k) \end{aligned}
      我們想要從我們已有的樣本,也就是一堆文檔和相關詞彙中,估計出上面的參數P(wnzk)P(w_n|z_k)P(zkdm)P(z_k|d_m),於是定義似然函數
    L(θ)=lnm=1Mn=1NP(dm,wn)n(dm,wn)=m=1Mn=1Nn(dm,wn)lnP(dm,wn)=m=1Mn=1Nn(dm,wn)ln(P(dm)kP(zkdm)P(wnzk))=m=1Mn=1Nn(dm,wn)lnkP(zkdm)P(wnzk)+m=1Mn=1Nn(dm,wn)lnP(dm) \begin{aligned} L(\theta) &=\ln\prod_{m=1}^M\prod_{n=1}^NP(d_m,w_n)^{n(d_m,w_n)} \\ &=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\ln P(d_m,w_n) \\ &=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\ln (P(d_m)\sum_kP(z_k|d_m)P(w_n|z_k)) \\ &=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\ln \sum_kP(z_k|d_m)P(w_n|z_k)+ \sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\ln P(d_m) \end{aligned}
      由於m=1Mn=1Nn(dm,wn)lnP(dm)\sum\limits_{m=1}^M\sum\limits_{n=1}^Nn(d_m,w_n)\ln P(d_m)不包含我們要求解的參數,我們不妨將其省略,要求解的式子變爲
    L(θ)=m=1Mn=1Nn(dm,wn)lnkP(zkdm)P(wnzk)=m=1Mn=1Nn(dm,wn)lnkP(wn,zkdm) \begin{aligned} L(\theta)&=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\ln \sum_kP(z_k|d_m)P(w_n|z_k)\\ &=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\ln \sum_kP(w_n,z_k|d_m) \end{aligned}
      由於參數都在ln裏面,並且計算量較大,所以我們可以利用EM算法將其“解放”出來。對於PLSA模型來說,有
    L(θ,θi)=m=1Mn=1Nn(dm,wn)kP(zkwn,dm;θi)lnP(wm,zkdm) L(\theta,\theta_i)=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\sum_kP(z_k|w_n,d_m;\theta_i)\ln P(w_m,z_k|d_m)
      其中
    P(zkwn,dm;θi)=P(zk,wn,dm;θi)P(wn,dm;θi)=P(dm;θi)P(zkdm;θi)P(wnzk;θi)P(dm;θi)P(wndm;θi)=P(zkdm;θi)P(wnzk;θi)P(wndm;θi)=P(zkdm;θi)P(wnzk;θi)jP(zjdm;θi)P(wnzj;θi) \begin{aligned} P(z_k|w_n,d_m;\theta_i) &=\frac{P(z_k,w_n,d_m;\theta_i)}{P(w_n,d_m;\theta_i)} \\ &=\frac{P(d_m;\theta_i)P(z_k|d_m;\theta_i)P(w_n|z_k;\theta_i)}{P(d_m;\theta_i)P(w_n|d_m;\theta_i)} \\ &=\frac{P(z_k|d_m;\theta_i)P(w_n|z_k;\theta_i)}{P(w_n|d_m;\theta_i)} \\ &=\frac{P(z_k|d_m;\theta_i)P(w_n|z_k;\theta_i)}{\sum_jP(z_j|d_m;\theta_i)P(w_n|z_j;\theta_i)} \\ \end{aligned}
    P(wm,zkdm)=P(zkdm)P(wnzk)P(w_m,z_k|d_m)=P(z_k|d_m)P(w_n|z_k)
      E-Step中的式子L(θ,θi)L(\theta,\theta_i)變爲
    L(θ,θi)=m=1Mn=1Nn(dm,wn)kP(zkdm;θi)P(wnzk;θi)jP(zjdm;θi)P(wnzj;θi)lnP(zkdm)P(wnzk)=m=1Mn=1Nn(dm,wn)kP(zkdm;θi)P(wnzk;θi)jP(zjdm;θi)P(wnzj;θi)(lnP(zkdm)+lnP(wnzk)) \begin{aligned} L(\theta,\theta_i) &=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\sum_k\frac{P(z_k|d_m;\theta_i)P(w_n|z_k;\theta_i)}{\sum_jP(z_j|d_m;\theta_i)P(w_n|z_j;\theta_i)}\ln P(z_k|d_m)P(w_n|z_k) \\ &=\sum_{m=1}^M\sum_{n=1}^Nn(d_m,w_n)\sum_k\frac{P(z_k|d_m;\theta_i)P(w_n|z_k;\theta_i)}{\sum_jP(z_j|d_m;\theta_i)P(w_n|z_j;\theta_i)}(\ln P(z_k|d_m)+\ln P(w_n|z_k)) \end{aligned}
      得到式子後,我們將在M-Step中對其進行優化。優化目標爲
    θi+1=argmaxθL(θ,θi)withnP(wnzk)=1,kP(zkdm)=1 \theta_{i+1}=\arg \max_\theta L(\theta,\theta_i) \\ with \quad \sum_nP(w_n|z_k)=1,\sum_kP(z_k|d_m)=1
      使用拉格朗日乘子法處理,得到拉格朗日函數爲
    L(θ)=L(θ,θi)+kαk(1nP(wnzk))+mβm(1kP(zkdm)) \mathcal{L}(\theta)=L(\theta,\theta_i)+\sum_k\alpha_k(1-\sum_nP(w_n|z_k))+\sum_m\beta_m(1-\sum_kP(z_k|d_m))
      上式分別對P(wnzk)P(w_n|z_k),P(zkdm)P(z_k|d_m)求導,得到
    LP(wnzk)=mn(dm,wn)P(zkwn,dm;θi)P(wnzk)αk=0,1nN,1kK \frac{\partial \mathcal{L}}{\partial P(w_n|z_k)}=\frac{\sum_mn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}{P(w_n|z_k)} -\alpha_k=0,1 \le n \le N,1 \le k \le K
    LP(zkdm)=nn(dm,wn)P(zkwn,dm;θi)P(zkdm)βm=0,1mM,1kK \frac{\partial \mathcal{L}}{\partial P(z_k|d_m)}=\frac{\sum_nn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}{P(z_k|d_m)} -\beta_m=0,1 \le m \le M,1 \le k \le K
      解得
    P(wnzk)=mn(dm,wn)P(zkwn,dm;θi)αk P(w_n|z_k)=\frac{\sum_mn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}{\alpha_k}
    P(zkdm)=nn(dm,wn)P(zkwn,dm;θi)βm P(z_k|d_m)=\frac{\sum_nn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}{\beta_m}
      結合nP(wnzk)=1,kP(zkdm)=1\sum_nP(w_n|z_k)=1,\sum_kP(z_k|d_m)=1得到迭代式:
    P(wnzk;θi+1)=mn(dm,wn)P(zkwn,dm;θi)nmn(dm,wn)P(zkwn,dm;θi) P(w_n|z_k;\theta_{i+1})=\frac{\sum_mn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}{\sum_n\sum_mn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}
    P(zkdm;θi+1)=nn(dm,wn)P(zkwn,dm;θi)knn(dm,wn)P(zkwn,dm;θi) P(z_k|d_m;\theta_{i+1})=\frac{\sum_nn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}{\sum_k\sum_nn(d_m,w_n)P(z_k|w_n,d_m;\theta_i)}
      得到迭代式後,就可以通過EM算法來迭代得到P(wnzk)P(w_n|z_k)P(zkdm)P(z_k|d_m),得到我們的模型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章