文本主題模型之非負矩陣分解(NMF)


    在文本主題模型之潛在語義索引(LSI)中,我們講到LSI主題模型使用了奇異值分解,面臨着高維度計算量太大的問題。這里我們就介紹另一種基於矩陣分解的主題模型:非負矩陣分解(NMF),它同樣使用了矩陣分解,但是計算量和處理速度則比LSI快,它是怎么做到的呢?

1. 非負矩陣分解(NMF)概述

    非負矩陣分解(non-negative matrix factorization,以下簡稱NMF)是一種非常常用的矩陣分解方法,它可以適用於很多領域,比如圖像特征識別,語音識別等,這里我們會主要關注於它在文本主題模型里的運用。

    回顧奇異值分解,它會將一個矩陣分解為三個矩陣:$$A = U\Sigma V^T$$

    如果降維到$k$維,則表達式為:$$A_{m \times n} \approx U_{m \times k}\Sigma_{k \times k} V^T_{k \times n}$$

    但是NMF雖然也是矩陣分解,它卻使用了不同的思路,它的目標是期望將矩陣分解為兩個矩陣:$$A_{m \times n} \approx  W_{m \times k}H_{k \times n}$$

    分解成兩個矩陣是不是一定就比SVD省時呢?這里的理論不深究,但是NMF的確比SVD快。不過如果大家讀過我寫的矩陣分解在協同過濾推薦算法中的應用,就會發現里面的FunkSVD所用的算法思路和NMF基本是一致的,只不過FunkSVD聚焦於推薦算法而已。

    那么如何可以找到這樣的矩陣呢?這就涉及到NMF的優化思路了。

2. NMF的優化思路

     NMF期望找到這樣的兩個矩陣$W,H$,使$WH$的矩陣乘積得到的矩陣對應的每個位置的值和原矩陣$A$對應位置的值相比誤差盡可能的小。用數學的語言表示就是:$$\underbrace{arg\;min}_{W,H}\frac{1}{2}\sum\limits_{i,j}(A_{ij}-(WH)_{ij})^2$$

    如果完全用矩陣表示,則為:$$\underbrace{arg\;min}_{W,H}\frac{1}{2}||A-WH||_{Fro}^2$$

    其中,$ ||*||_{Fro}$為Frobenius范數。

    當然對於這個式子,我們也可以加上L1和L2的正則化項如下:

    $$\underbrace{arg\;min}_{W,H}\frac{1}{2}||A-WH||_{Fro}^2 +\alpha\rho|| W||_1+\alpha\rho|| H||_1+\frac{\alpha(1-\rho)}{2}|| W||_{Fro}^2 + \frac{\alpha(1-\rho)}{2}|| H||_{Fro}^2$$

    其中,$\alpha$為L1&L2正則化參數,而$\rho$為L1正則化占總正則化項的比例。$||*||_1$為L1范數。

    我們要求解的有$m*k + k*n$個參數。參數不少,常用的迭代方法有梯度下降法和擬牛頓法。不過如果我們決定加上了L1正則化的話就不能用梯度下降和擬牛頓法了。此時可以用坐標軸下降法或者最小角回歸法來求解。scikit-learn中NMF的庫目前是使用坐標軸下降法來求解的,,即在迭代時,一次固定$m*k + k*n-1$個參數,僅僅最優化一個參數。這里對優化求$W,H$的過程就不再寫了,如果大家對坐標軸下降法不熟悉,參看之前寫的這一篇Lasso回歸算法: 坐標軸下降法與最小角回歸法小結

3. NMF 用於文本主題模型

    回到我們本文的主題,NMF矩陣分解如何運用到我們的主題模型呢?

    此時NMF可以這樣解釋:我們輸入的有m個文本,n個詞,而$A_{ij}$對應第i個文本的第j個詞的特征值,這里最常用的是基於預處理后的標准化TF-IDF值。k是我們假設的主題數,一般要比文本數少。NMF分解后,$W_{ik}$對應第i個文本的和第k個主題的概率相關度,而$H_{kj}$對應第j個詞和第k個主題的概率相關度。  

    當然也可以反過來去解釋:我們輸入的有m個詞,n個文本,而$A_{ij}$對應第i個詞的第j個文本的特征值,這里最常用的是基於預處理后的標准化TF-IDF值。k是我們假設的主題數,一般要比文本數少。NMF分解后,$W_{ik}$對應第i個詞的和第k個主題的概率相關度,而$H_{kj}$對應第j個文本和第k個主題的概率相關度。

    注意到這里我們使用的是"概率相關度",這是因為我們使用的是"非負"的矩陣分解,這樣我們的$W,H$矩陣值的大小可以用概率值的角度去看。從而可以得到文本和主題的概率分布關系。第二種解釋用一個圖來表示如下:

     和LSI相比,我們不光得到了文本和主題的關系,還得到了直觀的概率解釋,同時分解速度也不錯。當然NMF由於是兩個矩陣,相比LSI的三矩陣,NMF不能解決詞和詞義的相關度問題。這是一個小小的代價。

4. scikit-learn NMF的使用

    在 scikit-learn中,NMF在sklearn.decomposition.NMF包中,它支持L1和L2的正則化,而$W,H$的求解使用坐標軸下降法來實現。

    NMF需要注意的參數有:

    1) n_components:即我們的主題數k, 選擇k值需要一些對於要分析文本主題大概的先驗知識。可以多選擇幾組k的值進行NMF,然后對結果人為的進行一些驗證。

    2) init : 用於幫我們選擇$W,H$迭代初值的算法, 默認是None,即自動選擇值,不使用選擇初值的算法。如果我們對收斂速度不滿意,才需要關注這個值,從scikit-learn提供的算法中選擇一個合適的初值選取算法。

    3)alpha: 即我們第三節中的正則化參數$\alpha$,需要調參。開始建議選擇一個比較小的值,如果發現效果不好在調參增大。

    4) l1_ratio: 即我們第三節中的正則化參數$\rho$,L1正則化的比例,僅在$\alpha>0$時有效,需要調參。開始建議不使用,即用默認值0, 如果對L2的正則化不滿意再加上L1正則化。

    從上面可見,使用NMF的關鍵參數在於主題數的選擇n_components和正則化的兩個超參數$\alpha,\rho$。

    此外,$W$矩陣一般在調用fit_transform方法的返回值里獲得,而$H$矩陣則保存在NMF類的components_成員中。

    下面我們給一個例子,我們有4個詞,5個文本組成的矩陣,需要找出這些文本和隱含的兩個主題之間的關系。代碼如下:

    完整代碼參見我的github:https://github.com/ljpzzz/machinelearning/blob/master/natural-language-processing/nmf.ipynb

import numpy as np
X = np.array([[1,1,5,2,3], [0,6,2,1,1], [3, 4,0,3,1], [4, 1,5,6,3]])
from sklearn.decomposition import NMF
model = NMF(n_components=2, alpha=0.01)

    現在我們看看分解得到的$W,H$:

W = model.fit_transform(X)
H = model.components_
print W
print H

    結果如下:

[[ 1.67371185  0.02013017]
 [ 0.40564826  2.17004352]
 [ 0.77627836  1.5179425 ]
 [ 2.66991709  0.00940262]]
[[ 1.32014421  0.40901559  2.10322743  1.99087019  1.29852389]
 [ 0.25859086  2.59911791  0.00488947  0.37089193  0.14622829]]

    從結果可以看出, 第1,3,4,5個文本和第一個隱含主題更相關,而第二個文本與第二個隱含主題更加相關。如果需要下一個結論,我們可以說,第1,3,4,5個文本屬於第一個隱含主題,而第二個問題屬於第2個隱含主題。

5. NMF的其他應用

    雖然我們是在主題模型里介紹的NMF,但實際上NMF的適用領域很廣,除了我們上面說的圖像處理,語音處理,還包括信號處理與醫葯工程等,是一個普適的方法。在這些領域使用NMF的關鍵在於將NMF套入一個合適的模型,使得$W,H$矩陣都可以有明確的意義。這里給一個圖展示NMF在做語音處理時的情形:

 

6. NMF主題模型小結

    NMF作為一個漂亮的矩陣分解方法,它可以很好的用於主題模型,並且使主題的結果有基於概率分布的解釋性。但是NMF以及它的變種pLSA雖然可以從概率的角度解釋了主題模型,卻都只能對訓練樣本中的文本進行主題識別,而對不在樣本中的文本是無法識別其主題的。根本原因在於NMF與pLSA這類主題模型方法沒有考慮主題概率分布的先驗知識,比如文本中出現體育主題的概率肯定比哲學主題的概率要高,這點來源於我們的先驗知識,但是無法告訴NMF主題模型。而LDA主題模型則考慮到了這一問題,目前來說,絕大多數的文本主題模型都是使用LDA以及其變體。下一篇我們就來討論LDA主題模型。

 

(歡迎轉載,轉載請注明出處。歡迎溝通交流: liujianping-ok@163.com) 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM