NLP系列學習:潛在語義牽引

關於主題模型這一塊是比較特殊的,這期間也給我帶來了一些困惑,由於其中的一些算法和咱們在機器學習中使用的算法仍是很不一樣的,在這篇文章裏,我想簡單介紹下LSI(潛在語義牽引)算法

這個模型的做用是經過海量的文獻找出詞彙的關係.就跟警察抓嫌疑人同樣,犯罪事件在這個區域裏出現的多了,這片區域越有可能成爲犯罪的重點轄區. 詞彙也是這樣,當一些詞彙大量出如今一篇文章裏時,咱們能夠認爲這篇文章會傾向去成爲某一種類型,而這些詞之間也存在着語義相關性.機器學習

一:主題模型算法學習

咱們使用的主題模型算法跟聚類差很少,可是細究起來仍是有一些差距:設計

1:聚類模型計算的是數據樣本之間的歐拉距離等.cdn

2:主題模型是經過對文本隱含主題的建模,詞特性聚類很難找出主題相關度.blog

找出主題的方法有一些是基於統計的方法,還有一些不是基於統計的方法,好比LSI索引


二:潛在語義索引概述事件

LSI是基於奇異值分解(SVD)的方法來獲得文本的主題的。關於其中的數學知識,我就再也不贅述了,這裏說一說她的降維過程:文檔

1:把文檔庫表示爲數學


的詞-文檔矩陣,詞做爲行,文檔做爲列.(m表示詞向量在不一樣文檔中出現的次數,n表示不一樣文檔的個數),A表示爲A = [α ij ],在此矩陣中,α ij爲非負值 , 表示第 i 個詞在第j 個文檔中出現的頻度。顯然,A是稀疏矩陣.

2:利用SVD求A的正交因子的降秩矩陣,這其實就是關鍵所在,降維,SVD在我看來,最主要的做用在這裏是將詞和文檔映射到一個語義空間,而後把文檔和詞表示爲因子形式,這樣既能夠保留主要信息,又能夠減小運算複雜度.



這當中K的取值挺關鍵,我看前人給出的經驗是,K太小,則丟失信息就越多;K過大,信息雖然多,但可能有冗餘且計算消耗大。K的選擇也是值得研究的,不過通常取值爲100-300,不絕對。


三:LSI的應用性

LSI在我看來最關鍵的仍是設計K的取值,若是K取的很合適,能夠把聯繫較爲緊密的詞語提出來,其實就是用降維作相關性計算.可是LSI如今並非那麼流行,也是有一些緣由:

1:太慢

SVD計算太費勁了,特別是咱們幾十萬的文本數據一塊來,這樣高維矩陣SVD分解基本是機器吃不消,而後如今用的TF-IDF只須要經過兩個整數相乘就能計算出不一樣單詞的重要性,豈不是更有效?儘管在某些程度上LSI有一些優點,可是在工業界彷佛沒多少人用.

2:K值選取

K值的選取太過於影響計算結果,直接使用LSI作單詞相關度計算的並很少,一方面在於如今有一些灰常好用的同義詞詞典,另外相對無監督的學習你們仍是更信任有監督的學習(分類)獲得的結果。

3:LSI不能聚類

由於LSI 獲得的不是一個機率模型,缺少統計基礎,結果難以直觀的解釋。因此聚類不行,可是該算法後續額變種包括LDA聚類是頗有效的,由於LSI找的是特徵子空間,聚類找的則是實例分組,

LSI 雖然能獲得看起來貌似是聚類的結果,但其意義不見得是聚類所想獲得的。


四:實驗

代碼整理ing~

後續附加



五:總結

對於LSI,咱們在一些規模較小的問題上,使用LSI是很划算的,可是你想實打實的作主題模型,由於數據量太多了,仍是老老實實用LDA這樣的模型吧.

相關文章
相關標籤/搜索