LSA案例
假設(shè)有10個詞、3個文本對應(yīng)的詞頻TF矩陣如下:

1、只需要numpy就可以完成LSA的操作
import numpy as np
2、錄入數(shù)據(jù)
a = np.array([
[1,1,1],
[0,1,1],
[1,0,0],
[0,1,0],
[1,0,0],
[1,0,1],
[1,1,1],
[1,1,1],
[1,0,1],
[0,2,0],
[0,1,1]
]
)
3、SVD分解
numpy中的linalg庫中,有專門的svd分解的函數(shù)。
能夠直接得到 U Σ V 矩陣的值。
注意:這里分解出來的不是近似值,而是完整的值。
u,sigma,v = np.linalg.svd(a)

Uil 對應(yīng)第i個文本和第l個主題的相關(guān)度。
Vjm 對應(yīng)第j個詞和第m個詞義的相關(guān)度。
Σlm 對應(yīng)第l個主題和第m個詞義的相關(guān)度
4、文檔和主題之間的關(guān)系
假定現(xiàn)在3篇文本對應(yīng)2個主題?,F(xiàn)在就該獲取前兩列。
u[:,:2]

文檔和主題之間的關(guān)系
5、詞語和詞義之間的關(guān)系
v[:,:2].T

詞語和詞義之間的關(guān)系
6、主題和詞義之間的關(guān)系
sigma

s = [[sigma[0],0],[0,sigma[1]]]
s

主題和詞義之間的關(guān)系
7、將我們上面得到的矩陣相乘,能夠近似回復(fù)最初文檔和詞語的矩陣

np.dot(np.dot(u[:,:2],s),v[:,:2].T)

對比輸出結(jié)果和原矩陣,雖然不是100%相等,但也能體現(xiàn)近似值
最后將結(jié)論描述成報告:
假定主題數(shù)為2,通過SVD降維后的三個矩陣分布為:

本例中計算的是V≈VK矩陣,但是也可以進(jìn)一步計算ΣV即主題-詞義關(guān)系矩陣
通過SVD矩陣分解我們可以得到文本、詞與主題、語義之間的相關(guān)性,但是這個時候計算出來的內(nèi)容存在負(fù)數(shù),我們比較難解釋,所以我們可以對LSI得到文本主題矩陣使用余弦相似度計算文本的相似度的計算。
最終我們得到第一個和第三個文檔比較相似,和第二個文檔不太相似。
備注:這個時候直接在文本主題矩陣的基礎(chǔ)上直接應(yīng)用聚類算法即可

本例中計算的是V≈VK矩陣,但是也可以進(jìn)一步計算ΣV即主題-詞義關(guān)系矩陣