1. 程式人生 > >NLP --- 文字分類(基於SVD的隱語意分析(LSA))

NLP --- 文字分類(基於SVD的隱語意分析(LSA))

上一節我們詳細的講解了基於SVM的文字分類,這種分類在很早就出現了,雖然是文字分類中有效的分類手段,但是因為建立的向量是很多維的,因此容造成維度災難,同時SVM的沒有能力處理一詞多義和一義多詞問題,例如同義詞也分別被表示成獨立的一維,計算向量的餘弦相似度時會低估使用者期望的相似度;而某個詞項有多個詞義時,始終對應同一維度,因此計算的結果會高估使用者期望的相似度。漢語使用者傾向於頻繁使用近義詞顯示“辭藻豐富”“有文化”,不喜重複使用相同詞彙。也喜歡使用相關語顯示“幽默感”,這是常見語言現象。而SVM無法解決這個樣的問題,因此需要提出新的解決方案去解決兩個問題:1.維度災難問題。2.近義詞的處理問題。這裡解決該問題的思想是來源於矩陣的奇異值分解即SVD演算法,通過這個思想提出了LSA演算法,因此這裡先詳細的講解一下什麼是SVD。

SVD演算法(Singular Value Decomposition)

這裡我是這樣安排的,先使用語言進行簡單的介紹一下LSA(隱語意模型),因為該模型的思想是基於矩陣的奇異值的分解進行設計的,因此會詳細的講解SVD演算法,這裡大家需要好好理解SVD這個思想,因為他不僅僅在這裡使用,更多的是在推薦系統中使用,因此會從推薦系統的一個例子中引入SVD,好,下面開始:

LSA(latent semantic analysis)潛在語義分析,也被稱為LSI(latent semantic index),是Scott Deerwester, Susan T. Dumais等人在1990年提出來的一種新的索引和檢索演算法。該演算法和傳統向量空間模型(vector space model)一樣使用向量來表示詞(terms)和文件(documents),並通過向量間的關係(如夾角)來判斷詞及文件間的關係;而不同的 是,LSA將詞和文件對映到潛在語義空間,從而去除了原始向量空間中的一些“噪音”,提高了資訊檢索的精確度。我們下面就先從推薦系統的角度簡單的解釋一下,什麼是淺語意空間。

這裡簡單的根據推薦系統來說,這裡使用給使用者推薦商品來解釋,首先我們會得到一個評分矩陣,這個矩陣呢它的行是item(主題),如果推薦的是電影的話,那麼item就是電影名了,而列就是使用者了即user,我們從不同的推薦中就可以得到這樣的評分矩陣,如下所示:

現在的問題是,1、這個評分矩陣很大。2、這個矩陣是稀疏,什麼意思呢?假如這個矩陣是給電影評分的,那麼我們不能得到所有使用者給所有的電影評分,因此這個矩陣中會有很多的空缺值。因此推薦系統中會有這兩個問題的存在,如何解決呢?這裡使用的是SVD 進行解決,我們看看他是如何解決推薦系統的兩個問題的,其實很簡單,如下圖所示:

假如我們的評分矩陣是nxm的矩陣,其中m代表user,n代表item,我們可以通過兩個矩陣的相乘的形式得到評分矩陣,寫成上圖等號右邊的形式,上圖我們可看到評分矩陣可以通過nxk的矩陣和kxm的矩陣相乘得到,這裡的k是隱分類的意思,這裡的隱分類不是我們人為劃分的,一般都是我們通過矩陣分解以後得到這個k,然後通過兩個矩陣的內容進行判斷,隱分類的含義,這裡以電影評分矩陣進行比喻,一旦通過矩陣分解成上面的形式,我就可以得到電影評分的矩陣分解了,就會得到隱分類了,此時我們觀察分解後的矩陣就會發現,隱分類代表的是某一型別電影,如上圖等號右邊的第一個矩陣即nxk矩陣,就是說對這n個電影給出概率或者打分來說明他是屬於電影的哪一類如科幻、愛情、恐怖等等,此時的k就是代表電影的型別了也就是隱分類了,根據每部電影的行中不同的值來判斷它屬於那個電影型別的概率,這就是上圖等號右邊第一個矩陣的含義,那麼等號右邊的後面的那個矩陣代表什麼呢?其實很類似的分析,每個使用者代表著一列,那麼每行代表在不同型別的電影,我們通過分析使用者觀看哪種型別的電影概率或者評分最高,以此來給使用者推薦他喜歡的型別電影,由此我們可以發現在電影的評分中隱分類就代表著電影的型別,而分解後的兩個矩陣對我們都很有用,這就是我們k的物理意義和分解後矩陣代表的含義,但是我們還沒解釋他是如何解決推薦系統的兩個問題的,下面我們就來解釋一下:假如我們分解後的矩陣的k值通常要比n和m小的多數值,如n=100萬部電影,k=100種類型,m=100萬人,我們來計算一下分解後的資料有多少個:nxk+kxm = 100萬x100 + 100x100萬 = 2億的個數據,需要2億個儲存單元,我們看看原始評分矩陣的大小:nxm= 100萬x100萬=1000億,可想而知,儲存量很大,因此矩陣分解可以起到降維、壓縮資料的作用。因為資料壓縮了其實就解決了稀疏性的問題,稍後大家會看到如何解決的,上面就是推薦系統的應用,那麼在文字分類是如何使用的呢?

LSA(latent semantic analysis)潛在語義分析

在文字的分類中和在推薦系統中的應用很類似,這裡簡單的講解一下:

在VSM中我們知道,每篇文章我們都可以構造一個詞向量,這樣由多篇文章就可以構成一個矩陣,如上圖的等會左邊的圖,這裡的m就是文章數了,n就是每個詞向量的元素數了,通過矩陣矩陣分解後就會得到像上圖等號右邊的第一個矩陣形式,和推薦系統類似,這裡的k代表的就是隱分類,他的物理意義就是說在每個詞向量的元素中概率或者評分相近的就是同義詞和近義詞了,那麼第二個矩陣就相當於降維了,即我們關鍵的資訊留下來,如我們討論兩個文字是否相似時,我們知道評分矩陣的維度是很大,而且還是係數的,但是我們通過矩陣分解以後就會得到隱特徵,即主要的資訊都儲存下來了,此時我們的矩陣就不在是稀缺了,這也就解釋了為什麼起到降維和解決稀疏矩陣的原理了,這裡大家不應太糾結隱分類到底代表什麼,我們不需要知道,只需要判斷即可,這就是SVD用在文字分類中的原理,因為文字分類是最早使用SVD的,因此,推薦系統是借鑑了文字分類的應用才研究出推薦系統的,這裡就不在過多討論了,大家肯定想知道,這個矩陣分解到底是如何做呢?怎麼得到這個k的值呢?如何確定呢?是人為確定還是自動生成呢?我們我們的主要精力就來看看SVD到底是如何分解的。下面的內容需要大家有一定的矩陣方面的知識,如果有看不懂的建議看看矩陣論相關的書籍進行補充一下基礎知識,建議看張賢達的《矩陣分析與應用》第六章365頁的內容,那裡有詳細的定義,這裡我會很直觀的進行講解,數學方面的推倒大家可以參考這本書。

SVD分解過程推倒

在矩陣裡有這樣一個定理或者性質即:

定理:令\large A \in R^{mxn},則存在正交矩陣\large U\in R^{mxm}\large V\in R^{nxn}使的:

   式子中:                              

  且:         

其中\large \sigma是A的特徵值 ,按照對角線從大到小的順序排列:

上面就是奇異值分解的定義了,下面就給大家形式的講解一下是怎麼推倒的,大家看完以後最好看看張賢達書中的數學推倒,這樣更好 。下面我們開始:

                                                      \large A = U\sum V

其中\large A是mxn的矩陣,\large U是mxm的正交矩陣,\large \sum是mxn的矩陣,\large V是nxn的正交矩陣,那麼這裡的\large \sum矩陣是什麼樣的呢?其實這下面這樣的,如下:

 如上圖\large \sum原本是mxn的,該矩陣的值為前n行n列的只有對角線有值,其他地方的值都為0,其實就是\large A^TA的特徵值的開方,對角線的值按照從大到小的順序排列,下面我們看看為什麼\large \sum矩陣是這個形式:

我們知道方陣一定是半正定的,即一定存在逆矩陣的,一定存在特徵值和特徵向量的。我們的\large A^TA就是nxn的矩陣,因此一定存在特徵值和特徵向量:

                                           \large A^TA=V^T\sum {{}}^TU^TU\sum V = V^T\sum {{}}^T\sum V        

如果有矩陣知識的同學應該能看到其實 \large V就是\large A^TA最近對應的特徵向量組成的特徵矩陣,而\large \sum {{}}^T\sum就是對角矩陣了,因此\large \sum就是上面的形式了,同時對角線對應的就是\large A^TA特徵值的開方值了。

上面我們就是SVD的分解了,但是我們需要的形式應該是下面的樣式呀:

我們就根據上面的式子繼續推倒,慢慢到我們上面的形式,下面繼續:

這裡我們按照SVD的形式把mxn的矩陣給分解了,如上圖形式,其中 \large \sum的對角線是特徵值按照從小到大排列好了,同時我們只取前k個特徵值,其他的特徵值都接近0,所以可以忽略不計了,因此上面的形式我們可以進一步劃分,如下:此時的應該是約等於了,因為已經捨去一部分特徵值了:

 如上圖我們只取前k個特徵值,同時把\large \sum矩陣劃分為四部分,即kxk、(m-k)xk等等,同理我們把U和V也化成類似的,此時我們關注全域性來看即我們只看塊,U、∑、V的維度,此時我們會發現U是1x2的,∑是2x2的,V是2x1的,為了方便,下面我分別對其編號:

 此時我們按照塊進行矩陣運算得到下面的式子:

從上圖的計算可知,最後的矩陣可以寫成①x③x⑦的形式,我們在再分別看看這三個矩陣的形式:

①矩陣的維度是mxk的

③矩陣的維度是kxk的

⑦矩陣的維度是kxn的

此時我們把③的矩陣寫兩個矩陣相乘的形式如下:

所以最終A的矩陣可以寫成如下形式:

這樣我們等號右邊的第一個矩陣和第二個矩陣分別把兩個kxk矩陣吸收了,最後就形成了我們剛開始要求的矩陣了即:

 這既是推倒,具體的數學推倒建議看看張賢達的書,那裡有更詳細的推倒和更全面的講解,這裡只是讓大家更容易理解而已,

好了,本節到此結束下一節我們看看改進的LSA(latent semantic analysis)潛在語義分析的演算法即PLSA演算法。