Abstract
LSA,Latent Semantic Analysis通过对词-文档共现矩阵(term-document co-occurrence matrix)进行SVD分解,把单词和文档映射到一个latent semantic space,通过clustering可以得到term-term, document-document, document-term之间的相似关系。对于新来的查询,把查询映射到同一个latent semantic space空间后,就可以通过聚类或计算余弦相似度等方式检索语义上相关的文档。
构造词-文档共现矩阵
这一步比较简单,先构造索引词(也就是词典vocabulary),然后统计每一个单词w在各个文档d中的出现次数,这样就得到了term-document co-occurrence matrix。有时候还需要计算TFIDF值。对于大规模语料可以使用Hadoop进行计算。
SVD分解
对词-文档共现矩阵进行SVD分解可以得到term,document在潜在语义空间中的向量表示,latent semantic space的维度选择很重要,可以在singular values的基础上,根据经验选择,也就是求共现矩阵的一个Rank k approximation。
聚类
在把term和document映射到同一个潜在语义空间后,就可以通过聚类来分析term-term, document-document, document-term之间的相似关系。
查询
对于查询q={k1,k2,...,kn},可以取这n个查询关键字的潜在语义向量表示的平均值,把q映射到同一个潜在语义空间,然后检索相似的文档。
简单例子
[2]中给出了一个完整的实例,对九篇文档应用LSA,最后得到的效果图如下
[3]中给出了一个很简单的查询例子
LSA的细节请看[1][2][3][4],讲得非常清楚,欲了解SVD请看[5][6]。
Reference:
- Indexing by Latent Semantic Analysis. paper by Scott Deerwester etc.
- Latent Semantic Analysis (LSA) Tutorial 一篇非常不错的tutorial,有Python code
- Latent Semantic Analysis (Tutorial) 也是一篇比较简短的介绍LSA的tutorial,开头对SVD做了简单介绍
- Introduction to Information Retrieval 关于IR的书,chapter18是关于LSI的,有ppt,其他内容也可以看看
- Introduction to the Singular Value Decomposition Todd WIll 写的关于SVD的tutorial,各种详细的图解,看完后对SVD的理解更深
- A Singularly Valuable Decomposition: The SVD of a Matrix 另一篇关于SVD的tutorial,结合[3]足够深刻理解SVD了