潛在語義索引(lsi),又稱為潛在語義分析(lsa),是在資訊檢索領域提出來的乙個概念。主要是在解決兩類問題,一類是一詞多義,如「bank」一詞,可以指銀行,也可以指河岸;另一類是一義多詞,即同義詞問題,如「car」和「automobile」具有相同的含義,如果在檢索的過程中,在計算這兩類問題的相似性時,依靠余弦相似性的方法將不能很好的處理這樣的問題。所以提出了潛在語義索引的方法,利用svd降維的方法將詞項和文字對映到乙個新的空間。(
推導及用途:
優缺點:
發表於
lsi(latent semantic indexing, 潛語義索引)和lsa(latent semantic analysis,潛語義分析)。」lsi refers to using this technique for indexing, or information retrieval.lsa refers to using it for everything else.」所以他們指的是同一種技術,只是應用場景不同。我們這裡籠統稱為lsa。
lsa源自問題:如何從搜尋query中找到相關的文件?當我們試圖通過比較詞來找到相關的文字時,就很機械、存在一定的侷限性。在搜尋中,文件的相似性並不應該由兩個文字包含的詞直接決定,而是應該去比較隱藏在詞之後的意義和概念。但傳統向量空間模型使用精確的詞匹配,即精確匹配使用者輸入的詞與向量空間中存在的詞。比如使用者搜尋「automobile」,即汽車,傳統向量空間模型僅僅會返回包含「automobile」單詞的頁面,而實際上包含」car」單詞的頁面也可能是使用者所需要的。
潛語義分析試圖去解決這個問題,它把文字從稀疏的高維詞彙空間對映到乙個低維的向量空間,我們稱之為潛語義空間,文件的相似性在這個空間內進行比較。潛語義空間的維度個數可以自己指定,往往比傳統向量空間維度更少,所以lsa也是一種降維技術。lsa的不足則在於缺少統計基礎。
lsa的整個過程如下:
將文件集構造成term-document矩陣m,矩陣中的每個位置的值可以是該行代表個詞在該列代表的文件中的詞頻、tfidf值或其他。
對term-document矩陣進行svd奇異值分解,此時m = u * s * v的轉置。svd奇異值分解的詳細過程可以檢視此文。
對svd分解後的矩陣進行降維,只保留矩陣s前k個最大的奇異值得到s』。相應的u、v分別為u』、v』。 v』中的每行即為每個文件在潛在語義空間上的k維表示。
使用降維後的矩陣重建term-document矩陣m』 = u』 * s』 * v』的轉置。
對於乙個列向量表示的新文件q,其在潛在語義空間上的k維表示為q』 = q的轉置*u』*s』的逆。
將新文件q於文件集中的每個文件在潛在語義空間進行相似度計算,得到與q最相似的文件。
下面是乙個在乙個具體的文件集上的例子,例子中能展現lsa的效果:
m中human-c2值為0,因為文件c2中並不包含詞human,但是重建後的m』中human-c2為0.40,表明human和c2有一定的關係,為什麼呢?因為c2中包含user單詞,和human是近似詞,因此human-c2的值被提高了。(u、s、v中陰影部分別降維後的u』、s』、v』)。
lsa在復旦大學文字分類語料庫上的驗證:
(2) 使用gensim對實驗文件集進行lsa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from
gensim
import
corpora, models
textset
=
'c:\\users\\administrator\\desktop\\lsa\\textset.txt'
texts
=
[line.lower().split()
for
line
in
open
(textset)]
# map word to wordid, delete word occur only once
dictionary
=
corpora.dictionary(texts)
once_ids
=
[tokenid
for
tokenid, docfreq
in
dictionary.dfs.iteritems()
if
docfreq
=
=
1
]
dictionary.filter_tokens(once_ids)
dictionary.compactify()
corpus
=
[dictionary.doc2bow(text)
for
text
in
texts]
# use tf-idf
tfidf
=
models.tfidfmodel(corpus)
corpus_tfidf
=
tfidf[corpus]
# use lsi
lsi
=
models.lsimodel(corpus_tfidf, id2word
=
dictionary, num_topics
=
3
)
corpus_lsi
=
lsi[corpus_tfidf]
for
doc
in
corpus_lsi:
print
doc
(3) 畫出每個文件在3維的潛語義空間上的對應座標點,得到下圖。可以看到整個文件集內的文件,朝3個方向分布,分別對應computer、agriculture、sports三個類別。
奇異值與潛在語義索引LSI
潛在語義索引 latent semantic indexing 與pca不太一樣,至少不是實現了svd就可以直接用的,不過lsi也是乙個嚴重依賴於svd的演算法,之前吳軍老師在矩陣計算與文字處理中的分類問題中談到 三個矩陣有非常清楚的物理含義。第乙個矩陣x中的每一行表示意思相關的一類詞,其中的每個非...
文字主題模型之潛在語義索引 LSI
在文字挖掘中,主題模型是比較特殊的一塊,它的思想不同於我們常用的機器學習演算法,因此這裡我們需要專門來總結文字主題模型的演算法。本文關注於潛在語義索引演算法 lsi 的原理。在資料分析中,我們經常會進行非監督學習的聚類演算法,它可以對我們的特徵資料進行非監督的聚類。而主題模型也是非監督的演算法,目的...
對抗亞馬遜 沃爾瑪推出語義購物搜尋引擎
為電子商務 提供更好的服務,到底需要乙個多大差異的搜尋工具?沃爾瑪將賭注押在了由其walmartlabs部分開發的新型語義購物搜尋引擎polaris上,希望通過該搜尋引擎,提高公司10 到15 的銷售額。位置,位置,還是位置 對於零售業來說,最重要的莫過於位置。雜貨店在其過道上擺放牛奶,是合乎其標準...