俗話說「廟小妖風大,水淺王八多」,作為一名自然語言處理的水貨研究生,通常只是對**有著一知半解的了解,然而因為畢竟人老了年紀大容易忘事,有時候還是想把這一知半解的想法用文字寫出來,以便之後回顧,看官勿噴,水貨要開始動筆了。
文字建模是自然語言處理領域中很基礎的內容,而且也已經被研究了千萬遍,這個系列我主要的思路是從lsa->plsa->unigram model ->lda,其中plsa和lda都是主題模型。我研究主題模型的初衷是為了在文字分類中提取出文字特徵,而通過主題模型的建模過程,可以很好的了將文件的向量表示的維度壓縮到k維,然後這k維的向量就可以丟到svm、樸素貝葉斯、最大熵、神經網路、cnn等多個分類器中去了。文字表示的去稀疏和降維無疑對文字分類是個好事。
開始lsa,lsa**是deerwester等人在90年代早期發表的,其主要的方法是利用了奇異值分解(svd)方法,這個方法在後來的plsa**中被指出沒有真正的統計依據,也就是說缺乏合理的統計概率方法支撐,然而這個方法還是起到不錯的效果,這也是神奇的地方。我並不想去**svd的實際含義,只是把作者的做法表達出來一下
lsa(latent semantic analysis)或者lsi(latent semantic index),作者提出來主要是為了資訊檢索,也就是給定乙個字串,查詢語料庫中所有和這個字串有關係的文件。
首先,我們將語料庫的文件按照如下格式轉換成矩陣:
如上圖所示,橫向表示文件編號,縱向表示文件中的單詞,表中數字表示文件的詞頻統計。把這個矩陣計做是x
對於x我們可以分解成如下的形式:
其中t0和d0是正交矩陣,s0是對角矩陣,而且s0的對角是遞減的正數,分解過程如下:
這並不神奇,神奇的是後面過程,
為了降維,我們可以在s0中取前k個數產生乙個新的對角矩陣s,對應的在t0中取前兩列,在d0'中取前兩列,構成新的x^
其中:
示例如下:
那麼上面的初始矩陣可以按照下面的分解:
假設我們取k=2,那麼新產生的矩陣是:
然後就得到了新的矩陣x^:
到這裡,我們就可以進行下一,也就是比較文件和文件、文件和詞語、詞語和詞語、查詢語句與詞語之間的相似度了。具體的計算過程如下:
計算詞語與詞語之間的相關性,
上面的矩陣,x^和x^的轉置的點乘是所有的詞語之間的相似度關係,而根據右邊的式子,可以看出,其實是ts與ts的轉置,因此第i個詞語和第j個詞語之間的相似性就可以使用ts中第 i 行和第 j 列的相似性,當然這裡可以使用歐式距離或者余弦函式cos來計算。
和計算詞語與詞語之間的一樣,第 i 篇 文件 和第 j 篇文件之間的相似度就是 ds矩陣第 i 行 和 第 j 行的向量距離。
計算文件與單詞相似性的矩陣就是x^:
我們可以把第 i 個詞語 和第 j 個文件的相似性比較為: ts(1/2) 矩陣的第 i 行 和 ds(1/2)矩陣的第 j 行的向量距離
這個計算過程,稍顯麻煩,首先將查詢語句轉換成一維列向量,也就是和文最初的形式一樣。然後就算:
然後將dq和d的每一行計算向量距離即可
[1]scott deerwester. indexing by latent semantic analysis. journal of the american society for information science(1986-1998);sep 1990;41,6; abi?inform global
[2]edel garcia,l
atent semantic indexing (lsi) a fast track tutorial
文字建模系列之二 pLSA
廟小妖風大,水淺王八多 還是這句話,這是業餘研究生的文字建模系列之二 關於plsa。前述就到此。plsa probabilistic latent senmantic indexing.是hoffman在1999年提出的基於概率的隱語義分析。之所以說是probabilistic,是因為這個模型中還加...
文字建模系列之二 pLSA
廟小妖風大,水淺王八多 還是這句話,這是業餘研究生的文字建模系列之二 關於plsa。前述就到此。plsa probabilistic latent senmantic indexing.是hoffman在1999年提出的基於概率的隱語義分析。之所以說是probabilistic,是因為這個模型中還加...
SQL Server Index系列之一
agenda index structures primary key and clustered index constraints and indexes syntax for creating and managing indexes special indexes index access ...