LSA潜在语义分析与信息检索

2024-06-20 18:08

本文主要是介绍LSA潜在语义分析与信息检索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 LSA Introduction

LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwester, Susan T. Dumais等人在1990年提出来的一种新的索引和检索方法。该方法和传统向量空间模型(vector space model)一样使用向量来表示词(terms)和文档(documents),并通过向量间的关系(如夹角)来判断词及文档间的关系;而不同的是,LSA将词和文档映射到潜在语义空间,从而去除了原始向量空间中的一些“噪音”,提高了信息检索的精确度。

2 传统方法的缺点

传统向量空间模型使用精确的词匹配,即精确匹配用户输入的词与向量空间中存在的词。由于一词多义(polysemy)和一义多词(synonymy)的存在,使得该模型无法提供给用户语义层面的检索。比如用户搜索”automobile”,即汽车,传统向量空间模型仅仅会返回包含”automobile”单词的页面,而实际上包含”car”单词的页面也可能是用户所需要的。

下面是LDA原始Paper[1]里举的一个例子:

clip_image002

上图是一个Term-Document矩阵,X代表该单词出现在对应的文件里,星号表示该词出现在查询(Query)中,当用户输入查询”IDF in computer-based information look up” 时,用户是希望查找与信息检索中IDF(文档频率)相关的网页,按照精确词匹配的话,文档2和3分别包含查询中的两个词,因此应该被返回,而文档1不包含任何查询中的词,因此不会被返回。但我们仔细看看会发现,文档1中的access, retrieval, indexing, database这些词都是和查询相似度十分高的,其中retrieval和look up是同义词。显然,从用户的角度看,文档1应该是相关文档,应该被返回。再来看文档2:computer information theory,虽然包含查询中的一次词information,但文档2和IDF或信息检索无关,不是用户需要的文档,不应该被返回。从以上分析可以看出,在本次检索中,和查询相关的文档1并未返回给用户,而无查询无关的文档2却返回给了用户。这就是同义词和多义词如何导致传统向量空间模型检索精确度的下降。

3 LSA如何解决这些问题

LSA潜在语义分析的目的,就是要找出词(terms)在文档和查询中真正的含义,也就是潜在语义,从而解决上节所描述的问题。具体说来就是对一个大型的文档集合使用一个合理的维度建模,并将词和文档都表示到该空间,比如有2000个文档,包含7000个索引词,LSA使用一个维度为100的向量空间将文档和词表示到该空间,进而在该空间进行信息检索。而将文档表示到此空间的过程就是SVD奇异值分解和降维的过程。降维是LSA分析中最重要的一步,通过降维,去除了文档中的“噪音”,也就是无关信息(比如词的误用或不相关的词偶尔出现在一起),语义结构逐渐呈现。相比传统向量空间,潜在语义空间的维度更小,语义关系更明确。

4 SVD分解[2]

SVD分解作为掌握LSA的基础知识,我单独把它作为一篇文章,可以在这里找到。

5 LSA技术细节[1][3]

本节主要讨论LSA技术细节的理论部分,具体代码层面分析和实践在第7节讨论。

LSA的步骤如下:

1. 分析文档集合,建立Term-Document矩阵。

2. 对Term-Document矩阵进行奇异值分解。

3. 对SVD分解后的矩阵进行降维,也就是奇异值分解一节所提到的低阶近似。

4. 使用降维后的矩阵构建潜在语义空间,或重建Term-Document矩阵。

下面是Introduction to Latent Semantic Analysis里面的一个例子,描述了完整的LSA步骤,例子后面有我的补充:

假设文档集合如下:

clip_image048

原始的Term-Document矩阵如下:

clip_image050

对其进行奇异值分解:

clip_image052

然后对分解后的矩阵降维,这里保留{S}的最大两个奇异值,相应的{W}{P}矩阵如图,注意{P}在公式中需要转置。

到了这一步后,我们有两种处理方法,论文Introduction to Latent Semantic Analysis是将降维后的三个矩阵再乘起来,重新构建了{X}矩阵如下:

clip_image054

观察{X}矩阵和{X^}矩阵可以发现:

{X}中human-C2值为0,因为C2中并不包含human单词,但是{X^}中human-C2为0.40,表明human和C2有一定的关系,为什么呢?因为C2:”A survey of user opinion of computer system response time”中包含user单词,和human是近似词,因此human-C2的值被提高了。同理还可以分析其他在{X^}中数值改变了的词。

以上分析方法清晰的把LSA的效果显示出来了,也就是在{X^}中呈现出了潜在语义,然后希望能创建潜在语义空间,并在该空间中检索信息。这里以比较两个单词为例:

设奇异值分解形式为:X = T S DT,T代表term,s代表single value矩阵,D代表Document,DT表示D的转置。X的两个行向量点乘的值代表了两个词在文档中共同出现的程度。比如T1在D1中出现10词,T2在D1中出现5次,T3在D1中出现0词,那么只考虑在D1维度上的值,T1(dot)T2=50,T1(dot)T2=0,显然T1与T2更相似,T1与T3就不那么相似。那么用矩阵X(dot)XT就可以求出所有词与词的相似程度。而由奇异值分解的公式的:

X(dot)XT = T(dot)S2(dot)TT = TS(dot)(TS)T

上面公式表明了,我们想求X(dot)XT的(i,j)个元素时,可以点乘TS矩阵的第i和j列来表示。因此我们可以把TS矩阵的行看作是term的坐标,这个坐标就是潜在语义空间的坐标。同理我们还可以推出XT(dot)X = D(dot)S2(dot)DT,从而DS的行表示了文档的坐标。

这样,我们就获得了所有文档和单词在潜在语义空间的坐标,这时我们就可以通过向量间的夹角来判断两个对象的相似程度,方法和传统向量空间模型相同。接下来主要讨论下检索文本的步骤。

用户输入的检索语句被称为伪文本,因为它也是有多个词汇构成,和文本相似。所以很自然的想法就是将该伪文本转换为文档坐标,然后通过比较该伪文档与每个文档的空间夹角,检索出该伪文本的相关文档。设Xq表示伪文本的列向量,其中该列代表文档集合的索引词,该列的值代表伪文本中该索引词出现的次数。比如一个文档集合有索引词{T1,T2,T3},伪文本为t1,t3,t2,t1,则Xq={2,1,1}。获得Xq后,通过公式

Dq = XqT T S-1

计算伪文档的文档坐标。其中T和S分别代表奇异分解中得到的矩阵(S = T S DT).注意上面的公式中S-1代表S的逆矩阵。

Dq计算出来后,就可以迭代比较Dq和文档集合中所有所有文档,计算两者个cosine夹角

clip_image055

7 总结

LSA通过对潜在语义空间的建模,提高的信息检索的精确度。而后又有人提出了PLSA(Probabilistic latent semantic analysis)和LDA(Latent Dirichlet allocation),将LSA的思想带入到概率统计模型中。

LSA利用潜在的语义结构来表示词条和文本,将词条和文本投影到同一个K维的语义空间中去,词条和文本表示的向量中的元素不再是反映词条出现的频率和分布关系,而是
反映语义关系它在保持原始的大部分信息的同时,克服了向量空间模型表示方法中存在
的同义词、多义词等现象。但是,潜在语义也存在一些缺点所生成的新的文本特征没
有明确的具体的含义,因此对于文本挖掘的结果很难解释其意义。这样导致了在每一个文档进行分类时都要进行相应的特征空间变换,过程比较繁琐。(这种方法仅仅关注原始数据在低维空间的最佳描述,而不关注类的标识,因此无法提高文本分类性能。


由于潜在语义索引中的奇异值分解方法存在以下缺点:对数据变化敏感、运算速度慢以及左右奇异矩阵的存储要求高的确定,限制了潜在语义索引在大规模文本分类特征抽取的应用。

LSA对一词多义问题依然没有解决,仅仅解决了一义多词。因为LSA将每一个词表示为潜在语义空间中的一个点,因此一个词的多个意义在空间中对于的是一个点,没有被区分。

8 References

[1] Deerwester, S., Dumais, S. T., Furnas, G. W., Landauer, T. K., & Harshman, R.(1990). Indexing By Latent Semantic Analysis. Journal of the American Society For Information Science, 41, 391-407. 10

[2] Christopher D. Manning, Prabhakar Raghavan and Hinrich Schütze, Introduction to Information Retrieval, Cambridge University Press. 2008.

[3] Thomas Landauer, P. W. Foltz, & D. Laham (199 8) . "Introduction to Latent Semantic Analysis". Discourse Processes 25: 259–284.

[4] Michael Berry, S.T. Dumais, G.W. O'Brien (1995). Using Linear Algebra for Intelligent Information Retrieval. Illustration of the application of LSA to document retrieval.

[5] http://www.gnu.org/software/gsl/manual/html_node/

[6] http://tartarus.org/~martin/PorterStemmer/

[7] http://en.wikipedia.org/wiki/TF_IDF

9 External Link

[1] http://code.google.com/p/lsa-lda/

本文中程序的代码实现和LSA相关资料

[2] http://en.wikipedia.org/wiki/Latent_semantic_analysis

LSA的WIKI条目,有LSA的大致介绍

[3] http://lsa.colorado.edu/

Colorado大学的一个LSA项目,提供了基于LSA的terms比较,文本比较等

[4] http://www.bluebit.gr/matrix-calculator/

在线矩阵计算工具,可计算SVD

10 Further Reading

[1] Thomas Hofmann, Probabilistic Latent Semantic Indexing, Proceedings of the Twenty-Second Annual International SIGIR Conference on Research and Development in Information Retrieval (SIGIR-99), 1999

[2] Blei, David M.; Ng, Andrew Y.; Jordan, Michael I (January 2003). "Latent Dirichlet allocation". Journal of Machine Learning Research 3: pp. 993–1022. doi:10.1162/jmlr.2003.3.4-5.993 (inactive 2009-03-30).


这篇关于LSA潜在语义分析与信息检索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078869

相关文章

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

Spring中Bean有关NullPointerException异常的原因分析

《Spring中Bean有关NullPointerException异常的原因分析》在Spring中使用@Autowired注解注入的bean不能在静态上下文中访问,否则会导致NullPointerE... 目录Spring中Bean有关NullPointerException异常的原因问题描述解决方案总结

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

Oracle数据库执行计划的查看与分析技巧

《Oracle数据库执行计划的查看与分析技巧》在Oracle数据库中,执行计划能够帮助我们深入了解SQL语句在数据库内部的执行细节,进而优化查询性能、提升系统效率,执行计划是Oracle数据库优化器为... 目录一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 S

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置