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

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

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

    非負矩陣分解(non-negative matrix factorization,如下簡稱NMF)是一種很是經常使用的矩陣分解方法,它能夠適用於不少領域,好比圖像特徵識別,語音識別等,這裏咱們會主要關注於它在文本主題模型裏的運用。git

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

    若是降維到$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}$$app

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

    那麼如何能夠找到這樣的矩陣呢?這就涉及到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$$spa

    若是徹底用矩陣表示,則爲:$$\underbrace{arg\;min}_{W,H}\frac{1}{2}||A-WH||_{Fro}^2$$code

    其中,$ ||*||_{Fro}$爲Frobenius範數。component

    固然對於這個式子,咱們也能夠加上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) 

相關文章
相關標籤/搜索