LSA的基本假设是,如果两个词多次出现在同一文档中则。这两个词在语义上具有相似性。LSA使用大量的文本构建一个矩阵,这个矩阵的一行代表一个词,一列代表一个文档,矩阵元素代表该词在该文档中出现的次数,然后在此矩阵上使用奇异值分解(SVD)来保留列信息的情况下减少矩阵行数,之后每两个词语的相似性则可以通过其行向量的cos值(或者归一化之后使用向量点乘)来进行标示,此值越接近于1则说明两个词语越相似,越接近于0则说明越不相似。
举例:
生成矩阵
通过matlab进行SVD计算
[W,S,P]=svd(X)
得到:
选取最大的两个2个奇异值,以及左右奇异向量进行重建。
w=W(:,1:2)
s=S(1:2,1:2)
p=P(:,1:2)
x=w*s*p'
cos(human.human):
cos=(hum*usr')/(norm(hum)*norm(usr))
重构前的cos值为:0
所以,LSA确实可以很好的评估出文章中词的相关性。
这是我在学习Introduction to Latent Semanctic Analysis时做的笔记,有什么理解不到位的地方还希望有大牛指正。另外,我在理解LSA时参考了以下几篇文章:
https://blog.youkuaiyun.com/qq_27009517/article/details/79361439
https://blog.youkuaiyun.com/data_scientist/article/details/51953680
https://www.aliyun.com/jiaocheng/478601.html
https://blog.youkuaiyun.com/qq_27009517/article/details/79361439
https://blog.youkuaiyun.com/zhzhji440/article/details/47193731
另外还有Thomas K Landauer等人的 An Introduction to Latent Semantic Analysis