LSA潜在语义分析

article/2025/8/26 20:57:42

【转自:https://blog.csdn.net/roger__wong/article/details/41175967

原文地址:http://en.wikipedia.org/wiki/Latent_semantic_analysis

前言

浅层语义分析(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将对该矩阵进行降维,来找到词-文档矩阵的一个低阶近似。降维的原因有以下几点:

  • 原始的词-文档矩阵太大导致计算机无法处理,从此角度来看,降维后的新矩阵式原有矩阵的一个近似。
  • 原始的词-文档矩阵中有噪音,从此角度来看,降维后的新矩阵式原矩阵的一个去噪矩阵。
  • 原始的词-文档矩阵过于稀疏。原始的词-文档矩阵精确的反映了每个词是否“出现”于某篇文档的情况,然而我们往往对某篇文档“相关”的所有词更感兴趣,因此我们需要发掘一个词的各种同义词的情况。

降维的结果是不同的词或因为其语义的相关性导致合并,如:

{(car), (truck), (flower)} --> {(1.3452 * car + 0.2828 * truck), (flower)}

将维可以解决一部分同义词的问题,也能解决一部分二义性问题。具体来说,原始词-文档矩阵经过降维处理后,原有词向量对应的二义部分会加到和其语义相似的词上,而剩余部分则减少对应的二义分量。

推导

假设X是词-文档矩阵,其元素(i,j)代表词语i在文档j中的出现次数,则X矩阵看上去是如下的样子:

\begin{matrix}  & \textbf{d}_j \\ & \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}\end{matrix}

可以看到,每一行代表一个词的向量,该向量描述了该词和所有文档的关系。

\textbf{t}_i^T = \begin{bmatrix} x_{i,1} & \dots & x_{i,n} \end{bmatrix}

相似的,一列代表一个文档向量,该向量描述了该文档与所有词的关系。

\textbf{d}_j = \begin{bmatrix} x_{1,j} \\ \vdots \\ x_{m,j} \end{bmatrix}

词向量\textbf{t}_i^T \textbf{t}_p的点乘可以表示这两个单词在文档集合中的相似性。矩阵X X^T 包含所有词向量点乘的结果,元素(i,p)和元素(p,i)具有相同的值,代表词p和词i的相似度。类似的,矩阵X^T X包含所有文档向量点乘的结果,也就包含了所有文档那个的相似度。

现在假设存在矩阵X的一个分解,即矩阵X可分解成正交矩阵U和V,和对角矩阵\Sigma的乘积。

这种分解叫做奇异值分解(SVD),即:

\begin{matrix}X = U \Sigma V^T\end{matrix}

因此,词与文本的相关性矩阵可以表示为:

\begin{matrix}X X^T &=& (U \Sigma V^T) (U \Sigma V^T)^T = (U \Sigma V^T) (V^{T^T} \Sigma^T U^T) = U \Sigma V^T V \Sigma^T U^T = U \Sigma \Sigma^T U^T \\X^T X &=& (U \Sigma V^T)^T (U \Sigma V^T) = (V^{T^T} \Sigma^T U^T) (U \Sigma V^T) = V \Sigma^T U^T U \Sigma V^T = V \Sigma^T \Sigma V^T\end{matrix}

 

因为\Sigma \Sigma^T\Sigma^T \Sigma是对角矩阵,因此U 肯定是由X X^T的特征向量组成的矩阵,同理VX^T X特征向量组成的矩阵。这些特征向量对应的特征值即为\Sigma \Sigma^T中的元素。综上所述,这个分解看起来是如下的样子:

\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}

\sigma_1, \dots, \sigma_l 被称作是奇异值,而 u_1, \dots, u_l 和v_1, \dots, v_l则叫做左奇异向量和右奇异向量。通过矩阵分解可以看出,原始矩阵中的\textbf{t}_i 只与U矩阵的第i行有关,我们则称第i行为 \hat{\textrm{t}}_i。同理,原始矩阵中的\hat{ \textrm{d}}_j只与V^T中的第j列有关,我们称这一列为\hat{ \textrm{d}}_j\textbf{t}_i\hat{ \textrm{d}}_j并非特征值,但是其由矩阵所有的特征值所决定。

当我们选择k个最大的奇异值,和它们对应的U与V中的向量相乘,则能得到一个X矩阵的k阶近似,此时该矩阵和X矩阵相比有着最小误差(即残差矩阵的Frobenius范数)。但更有意义的是这么做可以将词向量和文档向量映射到语义空间。向量\hat{\textbf{t}}_i与含有k个奇异值的矩阵相乘,实质是从高维空间到低维空间的一个变换,可以理解为是一个高维空间到低维空间的近似。同理,向量 \hat{\textbf{d}}_j也存在这样一个从高维空间到低维空间的变化。这种变换用公式总结出来就是这个样子:

X_k = U_k \Sigma_k V_k^T

有了这个变换,则可以做以下事情:

  • 判断文档 j 与 q 在低维空间的相似度。比较向量 \Sigma_k \hat{\textbf{d}}_j 与向量\Sigma_k \hat{\textbf{d}}_q (比如使用余弦夹角)即可得出。
  • 通过比较\Sigma_k \hat{\textbf{t}}_i^T 与 \Sigma_k \hat{\textbf{t}}_p^T可以判断词i和词p的相似度。 
  • 有了相似度则可以对文本和文档进行聚类。
  • 给定一个查询字符串,算其在语义空间内和已有文档的相似性。

要比较查询字符串与已有文档的相似性,需要把文档和查询字符串都映射到语义空间,对于原始文档,由以下公式可以进行映射:

\hat{\textbf{d}}_j = \Sigma_k^{-1} U_k^T \textbf{d}_j

其中对角矩阵\Sigma_k 的逆矩阵可以通过求其中非零元素的倒数来简单的得到。

同理,对于查询字符串,得到其对应词的向量后,根据公式 \hat{\textbf{q}} = \Sigma_k^{-1} U_k^T \textbf{q}将其映射到语义空间,再与文档进行比较。

应用

低维的语义空间可以用于以下几个方面:

  • 在低维语义空间可对文档进行比较,进而可用于文档聚类和文档分类。
  • 在翻译好的文档上进行训练,可以发现不同语言的相似文档,可用于跨语言检索。
  • 发现词与词之间的关系,可用于同义词、歧义词检测。.
  • 通过查询映射到语义空间,可进行信息检索。
  • 从语义的角度发现词语的相关性,可用于“选择题回答模型”(multi choice qustions answering model)。

(原文还说了一些其它方面,感觉不是很重要,不翻译了,放上原文)

 

Synonymy and polysemy are fundamental problems in natural language processing:

  • Synonymy is the phenomenon where different words describe the same idea. Thus, a query in a search engine may fail to retrieve a relevant document that does not contain the words which appeared in the query. For example, a search for "doctors" may not return a document containing the word "physicians", even though the words have the same meaning.
  • Polysemy is the phenomenon where the same word has multiple meanings. So a search may retrieve irrelevant documents containing the desired words in the wrong meaning. For example, a botanist and a computer scientist looking for the word "tree" probably desire different sets of documents.

Commercial applications[edit]

LSA has been used to assist in performing prior art searches for patents.[5]

Applications in human memory[edit]

The use of Latent Semantic Analysis has been prevalent in the study of human memory, especially in areas of free recall and memory search. There is a positive correlation between the semantic similarity of two words (as measured by LSA) and the probability that the words would be recalled one after another in free recall tasks using study lists of random common nouns. They also noted that in these situations, the inter-response time between the similar words was much quicker than between dissimilar words. These findings are referred to as the Semantic Proximity Effect.[6]

When participants made mistakes in recalling studied items, these mistakes tended to be items that were more semantically related to the desired item and found in a previously studied list. These prior-list intrusions, as they have come to be called, seem to compete with items on the current list for recall.[7]

Another model, termed Word Association Spaces (WAS) is also used in memory studies by collecting free association data from a series of experiments and which includes measures of word relatedness for over 72,000 distinct word pairs.[8]

算法局限性

LSA的一些缺点如下:

  • 新生成的矩阵的解释性比较差.比如

{(car), (truck), (flower)} ↦ {(1.3452 * car + 0.2828 * truck), (flower)}

 (1.3452 * car + 0.2828 * truck) 可以解释成 "vehicle"。同时,也有如下的变换

{(car), (bottle), (flower)} ↦ {(1.3452 * car + 0.2828 * bottle), (flower)}

造成这种难以解释的结果是因为SVD只是一种数学变换,并无法对应成现实中的概念。

  • LSA无法扑捉一词多以的现象。在原始词-向量矩阵中,每个文档的每个词只能有一个含义。比如同一篇文章中的“The Chair of Board"和"the chair maker"的chair会被认为一样。在语义空间中,含有一词多意现象的词其向量会呈现多个语义的平均。相应的,如果有其中一个含义出现的特别频繁,则语义向量会向其倾斜。
  • LSA具有词袋模型的缺点,即在一篇文章,或者一个句子中忽略词语的先后顺序。
  • LSA的概率模型假设文档和词的分布是服从联合正态分布的,但从观测数据来看是服从泊松分布的。因此LSA算法的一个改进PLSA使用了多项分布,其效果要好于LSA。

http://chatgpt.dhexx.cn/article/7nEUsVQ9.shtml

相关文章

OSPF的LSA

文章目录 ospf的lsaLSA的头部信息一类LSA:Router二类LSA:Network三类LSA:Sum-net五类LSA:External四类LSA:Sum-Asbr ospf的lsa ospf本质是通过lsa(链路状态通告)洪泛,将运行ospf域内的所有lsa存放到本地lsdb(链路状态数据库),然后…

LSA类型详解

在OSPF中有6种常用的LSA类型,分别为: Router-LSA(1类)、 Network- LSA(2类)、 Summary- LSA(3类)、 ASBR-Summary- LSA(4类)、 AS-External- LSA(…

OSPF 之 LSA限制

目录 特殊区域 1.stub 区域, 末节区域 2.完全的末节区域 3.NSSA区域:(not so stub area) 非完全末节区域 4.完全的非完全的末节区域 LSA汇总 1. 3类LSA汇总: 2. 5类LSA 汇总: 3. 7类LSA 汇总&…

LSA类型

类型 LSID 通告者AdvRouter 作用范围 携带信息 Type-1LSA Router 通告者RID 区域内所有运行ospf协议的路由器的RID 单区域内部 拓扑信息,本地接口直连拓扑 Type-2LSA network DR接口的ip地址 DR锁在的路由器的RID 单区域内部 单个MA网络拓扑信息的补充…

OSPF协议总结5(六种LSA)

LSA----链路状态通告--- OSPF协议在不同网络环境下产生的携带不同信息的载体。 LSDB --链路状态数据库 SPF ---最短路径优先算法 查看LSDB数据库: Type --- LSA的类型,在OSPFV2版本中,需要掌握的L SA类型一共有6种。LinkState ID ---链路状态…

LSA笔记

http://www.360doc.com/content/22/0220/08/476286_1018188488.shtml 笔记 clear ip ospf process //慎用 ,使用后会造成网络中断, 100,000,000bit //8次方比特,就是百兆速度, cost100M/接口带宽 hello&am…

LSA

Type-7 LSA : NSSA External LSA NSSA(非完全末梢区域Not-So-Stubby Area)我们可以理解为从Stub Area衍生而来,StubArea是不允许外部路由进入的,而NSSA可以。当NSSA的ASBR向该区域注入外部路由时,这些外部路由将使用Type-7 LSA来描…

LSA(Latent semantic analysis)

LSA最初是用在语义检索上,为了解决一词多义和一义多词的问题: 1.一词多义: 美女和PPMM表示相同的含义,但是单纯依靠检索词“美女”来检索文档,很可能丧失掉那些包含“PPMM”的文档。 2.一义多词:如果输入检…

LSA详解

OSPF---1、2、3、4、5类LSA 描述一条LSA三要素:LSA类型、link-id链路标识符、ADV-router 产生者路由器 1类LSA: 功能:本路由器针对某个路由区域产生的路由器信息和部分拓扑信息 传输范围:本区域内部传输 link id:产生者路由器…

路由 OSPF LSA介绍、1~7类LSA详细介绍

1.0.0 路由 OSPF LSA介绍、1~7类LSA详细介绍 OSPF LSA 链路状态通告( Link status announcement),作用于 向其它邻接OSPF路由器 传递拓扑信息与路由信息。 LSA如何去描述拓扑信息与路由信息的呢? 其实是基于不同类型LSA进行描述,而常见的LS…

LSA类型讲解——LSA-2(第二类LSA——Network LSA)、LSA-3(第三类LSA——Network Summary LSA)详解

目录 一、LSA-2 (1)——简介: (2)——头部信息: (3)——数据部分: (4)——作用: (5)如何查看: 二、LSA-3 (1&#x…

OSPF——LSA讲解

目录 LSA的作用 LSA的头部格式 LSA Type-----------------LSA类型 LS Age-------------------LSA产生所经过的时间 Link State ID------------唯一标识一个LSA Advertisting Router-----产生此LSA的路由器的Router-id LS Sequence number----序列号 LS checksum--------…

c++入门必学算法 并查集

一、什么是并查集 并查集其实就是实现一个类似朋友圈的功能,朋友的朋友是朋友,朋友的朋友的朋友也是朋友,即只要有关系一些人就合并成为一个朋友圈。 并查集可以实现查询两个人是否是朋友,查询朋友圈的个数 二、并查集的原理 …

并查集的查询与合并详解

文章目录 一、并查集的概念 二、并查集的实现 2、1 并查集不同集合(树)的形成 2、2 find()函数找一个元素集合的编号(元素所属于树的祖宗) 2、3 合并两个不同集合(合并两棵不同的树&#xff09…

并查集实现及其应用

先看看度娘给出的定义吧: 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类…

超级简单并查集详解

一、概述 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。 其实说白了大部分还是用于寻找两…

并查集(java)

介绍 : 并查集属于数据结构的一种 是高等数据结构最基础的一部分,主要分为普通并查集 种类并查集以及带权并查集。它是一种用于管理元素所属集合的数据结构,这里的集合我们可以理解为一颗数 每个元素都是树上的有一个分叉,顺着分叉…

C++并查集

文章目录 并查集的原理并查集的实现代码并查集的典型应用 并查集的原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用…

c++并查集(详细总结)

老话重谈,先看定义 并查集是一种树型的数据结构,用于处理一些不相交集合(disjoint sets)的合并及查询问题。常常在使用中以森林来表示。 首先得明白一些概念: 什么是树,什么是森林(由树组成的叫…

Java——并查集

概念 当我们将多个元素分配到不同的集合中,这些集合有的是相关的,有的是不相关的。并查集就是用来查找两个元素是否在同一个集合中的 其主要实现方式是:将所有的元素以下标的形式存储在数组中。例如一共有十个人,那么就将这些人…