語義分析是非常常見的機器學習的應用,比如文本分類、推薦系統、圖像處理。潛在語義分析(LSA)是一種語義分析的進化版本,是一種無監督的方法。它問題建模為一個特徵向量,語義分析問題就變成了向量空間中衡量向量之間的相似度,尋找最接近的問題,而向量空間一般用矩陣來表達。
以文本分析為例子,構建文本-單詞向量空間,文本為一維,單詞為一維,矩陣的元素為某單詞在文本中出現的次數,這樣問題就被形式化方便進一步用數學公式進行計算,文本之間相似度就可以看成文本向量之間距離度量(通常用夾角),這就是普通的語義分析模型。
但這個模型有個問題就是單詞具有多義性,某兩個不同的單詞可能具有相同的意思,這樣就會導致語義分析的時候出現不同的向量代表相同意思的情況,而潛在語義分析就解決了這個問題。它引入了一箇中間變量來消除單詞的多義性,這個中間變量就是話題。通過構建單詞-話題-文本這樣一個結構,來消除單詞-文本之間的多義性問題。是不是很像數據庫理論中的某一個項如果可以再分解,則應將該表項單獨設計成一張表通過ID連接來消除組合項。
所以,潛在語義分解通過話題解決了這個問題,某一個話題包括了多個表達同樣意思的單詞,但是話題之間不存在多義性可以與文本建立良好的映射關係。而單詞和話題之間也可以用一個矩陣來表達,所以單詞-話題-文本可以看成是一個變換的關係,由原來單詞*文本矩陣,變成了單詞*話題,話題*文本矩陣相當於將原來一個矩陣分解為了2個矩陣。看到分解,我們就想到了之前介紹的矩陣的奇異值分解,完美的對應上了。通過分解,我們可以找到話題*文本矩陣,並在這個矩陣裡求解。
當然矩陣的分解有很多種方法,比如奇異值分解、非負分解,理解了原理方法就直接用就行了。除了將問題表達為矩陣的方式,還可以表達為概率模型。這就是概率潛在語義分析模型,套路是一樣的,只是將分析模型建立為概率模型,其中話題表達為隱變量,原理實際上是大同小異。
閱讀更多 老郭講算法 的文章