奇異值分解SVD應用——LSI

潛在語義索引(Latent Semantic Indexing)是一個嚴重依賴於SVD的算法,本文轉載自之前吳軍老師《數學之美》和參考文獻《機器學習中的數學》彙總。

————————————

在自然語言處理中,最常見的兩類的分類問題分別是,將文本按主題歸類(比如將所有介紹亞運會的新聞歸到體育類)和將詞彙表中的字詞按意思歸類(比如將各種體育運動的名稱個歸成一類)。這兩種分類問題都可用通過矩陣運算來圓滿地、同時解決。爲了說明如何用矩陣這個工具類解決這兩個問題的,讓我們先來來回顧一下我們在餘弦定理和新聞分類中介紹的方法。


分類的關鍵是計算相關性。我們首先對兩個文本計算出它們的內容詞,或者說實詞的向量,然後求這兩個向量的夾角。當這兩個向量夾角爲零時,新聞就相關;當它們垂直或者說正交時,新聞則無關。當然,夾角的餘弦等同於向量的內積。從理論上講,這種算法非常好。但是計算時間特別長。通常,我們要處理的文章的數量都很大,至少在百萬篇以上,二次回標有非常長,比如說有五十萬個詞(包括人名地名產品名稱等等)。如果想通過對一百萬篇文章兩篇兩篇地成對比較,來找出所有共同主題的文章,就要比較五千億對文章。現在的計算機一秒鐘最多可以比較一千對文章,完成這一百萬篇文章相關性比較就需要十五年時間。注意,要真正完成文章的分類還要反覆重複上述計算。


在文本分類中,另一種辦法是利用
矩陣運算中的奇異值分解(Singular Value Decomposition,簡稱 SVD)。現在讓我們來看看奇異值分解是怎麼回事。首先,我們可以用一個大矩陣A來描述這一百萬篇文章和五十萬詞的關聯性。這個矩陣中,每一行對應一篇文章,每一列對應一個詞。


在上面的圖中,M=1,000,000,N=500,000。第 i 行,第 j 列的元素,是字典中第 j 個詞在第 i 篇文章中出現的加權詞頻(比如,TF/IDF)。讀者可能已經注意到了,這個矩陣非常大,有一百萬乘以五十萬,即五千億個元素。


奇異值分解就是把上面這樣一個大矩陣,分解成三個小矩陣相乘,如下圖所示。比如把上面的例子中的矩陣分解成一個一百萬乘以一百的矩陣X,一個一百乘以一百的矩陣B,和一個一百乘以五十萬的矩陣Y。這三個矩陣的元素總數加起來也不過1.5億,僅僅是原來的三千分之一。相應的存儲量和計算量都會小三個數量級以上。


三個矩陣有非常清楚的物理含義第一個矩陣X中的每一列表示一類主題,其中的每個非零元素表示一個主題與一篇文章的相關性,數值越大越相關。最後一個矩陣Y中的每一列表示100個關鍵詞,每個key word與500,000個詞的相關性。中間的矩陣則表示文章主題keyword之間的相關性。因此,我們只要對關聯矩陣A進行一次奇異值分解,w 我們就可以同時完成了近義詞分類和文章的分類。(同時得到每類文章和每類詞的相關性)。

比如降至2維(rank=2),則document-term的關係可以在下面二維圖中展現:


 

在圖上,每一個紅色的點,都表示一個詞,每一個藍色的點,都表示一篇文檔,這樣我們可以對這些詞和文檔進行聚類,比如說stock 和 market可以放在一類,因爲他們老是出現在一起,real和estate可以放在一類,dads,guide這種詞就看起來有點孤立了,我們就不對他們進行合併了。按這樣聚類出現的效果,可以提取文檔集合中的近義詞,這樣當用戶檢索文檔的時候,是用語義級別(近義詞集合)去檢索了,而不是之前的詞的級別。這樣一減少我們的檢索、存儲量,因爲這樣壓縮的文檔集合和PCA是異曲同工的,二可以提高我們的用戶體驗,用戶輸入一個詞,我們可以在這個詞的近義詞的集合中去找,這是傳統的索引無法做到的。


現在剩下的唯一問題,就是如何用計算機進行奇異值分解。這時,線性代數中的許多概念,比如矩陣的特徵值等等,以及數值分析的各種算法就統統用上了。在很長時間內,奇異值分解都無法並行處理。(雖然 Google 早就有了MapReduce 等並行計算的工具,但是由於奇異值分解很難拆成不相關子運算,即使在 Google 內部以前也無法利用並行計算的優勢來分解矩陣。)最近,Google 中國的張智威博士和幾個中國的工程師及實習生已經實現了奇異值分解的並行算法,我認爲這是 Google 中國對世界的一個貢獻。


最後說說個人拙見,這裏我們可以把document和term(word)中間加上一層latent semantics項,那麼上圖中的X和Y矩陣就可以分別表示同一個latent semantics對不同document之間的相關性和同一latent semantics在不同terms之間的相關性聯繫。X和Y的大小分別是m*r與r*n,r爲A矩陣的rank(秩),最後,B是A的r個奇異值組成的對角方陣(r*r),在譜分解中也就是A的r個特徵值。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章