https://blog.csdn.net/roger__wong/article/details/41175967
浅层语义分析(LSA)是一种自然语言处理中用到的方法,其通过“矢量语义空间”来提取文档与词中的“概念”,进而分析文档与词之间的关系。LSA的基本假设是,如果两个词多次出现在同一文档中,则这两个词在语义上具有相似性。LSA使用大量的文本上构建一个矩阵,这个矩阵的一行代表一个词,一列代表一个文档,矩阵元素代表该词在该文档中出现的次数,然后再此矩阵上使用奇异值分解(SVD)来保留列信息的情况下减少矩阵行数,之后每两个词语的相似性则可以通过其行向量的cos值(或者归一化之后使用向量点乘)来进行标示,此值越接近于1则说明两个词语越相似,越接近于0则说明越不相似。
LSA最早在1988年由 Scott Deerwester, Susan Dumais, George Furnas, Richard Harshman, Thomas Landauer, Karen Lochbaum and Lynn Streeter提出,在某些情况下,LSA又被称作潜在语义索引(LSI)。
概述
词-文档矩阵(Occurences Matrix)
LSA 使用词-文档矩阵来描述一个词语是否在一篇文档中。词-文档矩阵式一个稀疏矩阵,其行代表词语,其列代表文档。一般情况下,词-文档矩阵的元素是该词在文档中的出现次数,也可以是是该词语的tf-idf(term frequency–inverse document frequency)。
词-文档矩阵和传统的语义模型相比并没有实质上的区别,只是因为传统的语义模型并不是使用“矩阵”这种数学语言来进行描述。
降维
在构建好词-文档矩阵之后,LSA将对该矩阵进行降维,来找到词-文档矩阵的一个低阶近似。降维的原因有以下几点:
- 原始的词-文档矩阵太大导致计算机无法处理,从此角度来看,降维后的新矩阵式原有矩阵的一个近似。
- 原始的词-文档矩阵中有噪音,从此角度来看,降维后的新矩阵式原矩阵的一个去噪矩阵。
- 原始的词-文档矩阵过于稀疏。原始的词-文档矩阵精确的反映了每个词是否“出现”于某篇文档的情况,然而我们往往对某篇文档“相关”的所有词更感兴趣,因此我们需要发掘一个词的各种同义词的情况。
降维是对原有矩阵的行数进行减少,后面采用SVD选取k阶最大的特征值,得到降维之后的Xk
可以看到,每一行代表一个词的向量,该向量描述了该词和所有文档的关系。
相似的,一列代表一个文档向量,该向量描述了该文档与所有词的关系。
词向量的点乘可以表示这两个单词在文档集合中的相似性。矩阵
包含所有词向量点乘的结果,元素(i,p)和元素(p,i)具有相同的值,代表词p和词i的相似度。类似的,矩阵
包含所有文档向量点乘的结果,也就包含了所有文档那个的相似度。
现在假设存在矩阵的一个分解,即矩阵
可分解成正交矩阵U和V,和对角矩阵
的乘积。
这种分解叫做奇异值分解(SVD),即:
因此,词与文本的相关性矩阵可以表示为:
![\Sigma \Sigma^T](http://upload.wikimedia.org/math/6/2/9/629410f09b8661b75adeb5b785816efb.png)
![\Sigma^T \Sigma](http://upload.wikimedia.org/math/a/4/0/a40e4fa95fe54c61164e5690b4b11d67.png)
![U](http://upload.wikimedia.org/math/4/c/6/4c614360da93c0a041b22e537de151eb.png)
![X X^T](http://upload.wikimedia.org/math/0/5/c/05c4e5a8766e5307c2b74c19ef087f73.png)
![V](http://upload.wikimedia.org/math/5/2/0/5206560a306a2e085a437fd258eb57ce.png)
![X^T X](http://upload.wikimedia.org/math/5/d/5/5d5eaf3c0a410adace4935eb816a70a3.png)
![\Sigma \Sigma^T](http://upload.wikimedia.org/math/6/2/9/629410f09b8661b75adeb5b785816efb.png)
![\begin{matrix} & X & & & U & & \Sigma & & V^T \\ & (\textbf{d}_j) & & & & & & & (\hat{\textbf{d}}_j) \\ & \downarrow & & & & & & & \downarrow \\(\textbf{t}_i^T) \rightarrow &\begin{bmatrix} x_{1,1} & \dots & x_{1,n} \\\\\vdots & \ddots & \vdots \\\\x_{m,1} & \dots & x_{m,n} \\\end{bmatrix}&=&(\hat{\textbf{t}}_i^T) \rightarrow&\begin{bmatrix} \begin{bmatrix} \, \\ \, \\ \textbf{u}_1 \\ \, \\ \,\end{bmatrix} \dots\begin{bmatrix} \, \\ \, \\ \textbf{u}_l \\ \, \\ \, \end{bmatrix}\end{bmatrix}&\cdot&\begin{bmatrix} \sigma_1 & \dots & 0 \\\vdots & \ddots & \vdots \\0 & \dots & \sigma_l \\\end{bmatrix}&\cdot&\begin{bmatrix} \begin{bmatrix} & & \textbf{v}_1 & & \end{bmatrix} \\\vdots \\\begin{bmatrix} & & \textbf{v}_l & & \end{bmatrix}\end{bmatrix}\end{matrix}](http://upload.wikimedia.org/math/b/d/7/bd7574db37d4bf6f425376958114c825.png)
![\sigma_1, \dots, \sigma_l](http://upload.wikimedia.org/math/5/d/d/5ddddd012aa2958cd6b3d740ded1f745.png)
![u_1, \dots, u_l](http://upload.wikimedia.org/math/4/9/4/494e1410634c33c9eca795ff81ecc5df.png)
![v_1, \dots, v_l](http://upload.wikimedia.org/math/7/b/2/7b2992af726baddf5d5b4a9ccbcb8e20.png)
![\textbf{t}_i](http://upload.wikimedia.org/math/9/8/9/9895dd1a4e2579bdad8a2c9006f9ee3e.png)
![\hat{\textrm{t}}_i](http://upload.wikimedia.org/math/7/b/e/7be67954a6dd2d6b0126461caaf83ca5.png)
![\hat{ \textrm{d}}_j](http://upload.wikimedia.org/math/7/a/0/7a003884741e7af8158dde3217f17b73.png)
![V^T](http://upload.wikimedia.org/math/e/8/f/e8fe68ae2f0dd94c80c1b1d736c4e2f0.png)
![\hat{ \textrm{d}}_j](http://upload.wikimedia.org/math/7/a/0/7a003884741e7af8158dde3217f17b73.png)
![\textbf{t}_i](http://upload.wikimedia.org/math/9/8/9/9895dd1a4e2579bdad8a2c9006f9ee3e.png)
![\hat{ \textrm{d}}_j](http://upload.wikimedia.org/math/7/a/0/7a003884741e7af8158dde3217f17b73.png)
![\hat{\textbf{t}}_i](http://upload.wikimedia.org/math/1/9/d/19d0de8ac4837841a49824ac5f3d299a.png)
![\hat{\textbf{d}}_j](http://upload.wikimedia.org/math/7/4/8/7485c38418b30007ed3eb73faf5191cf.png)
![X_k = U_k \Sigma_k V_k^T](http://upload.wikimedia.org/math/f/4/0/f40a9d1951a5b232095e07e720c40b60.png)
- 判断文档相似度:比较V的列,判断文档
与
在低维空间的相似度。比较向量
与向量
(比如使用余弦夹角)即可得出。
- 判断词的相似度:比较U的行,通过比较
与
可以判断词
和词
的相似度。
- 有了相似度则可以对文本和文档进行聚类。
- 给定一个查询字符串,算其在语义空间内和已有文档的相似性。
![\hat{\textbf{d}}_j = \Sigma_k^{-1} U_k^T \textbf{d}_j](http://upload.wikimedia.org/math/2/5/2/25286048b016e941392bbdcbb144fe93.png)
![\Sigma_k](http://upload.wikimedia.org/math/b/1/2/b12fd2a13b3027ab875052dbe2b407fd.png)
![\hat{\textbf{q}} = \Sigma_k^{-1} U_k^T \textbf{q}](http://upload.wikimedia.org/math/e/3/3/e3304db75a7de452d3752be515070f05.png)
低维的语义空间可以用于以下几个方面:
- 在低维语义空间可对文档进行比较,进而可用于文档聚类和文档分类。
- 在翻译好的文档上进行训练,可以发现不同语言的相似文档,可用于跨语言检索。
- 发现词与词之间的关系,可用于同义词、歧义词检测。.
- 通过查询映射到语义空间,可进行信息检索。
- 从语义的角度发现词语的相关性,可用于“选择题回答模型”(multi choice qustions answering model)。