潜语义分析(Latent Semantic Analysis)
LSI(Latent semantic indexing, 潜语义索引)和LSA(Latent semantic analysis,潜语义分析)这两个名字其实是一回事。我们这里称为LSA。
LSA源自问题:如何从搜索query中找到相关的文档?当我们试图通过比较词来找到相关的文本时,就很机械、存在一定的局限性。在搜索中,文档的相似性并不应该由两个文本包含的词直接决定,而是应该去比较隐藏在词之后的意义和概念。但传统向量空间模型使用精确的词匹配,即精确匹配用户输入的词与向量空间中存在的词。比如用户搜索“automobile”,即汽车,传统向量空间模型仅仅会返回包含“automobile”单词的页面,而实际上包含”car”单词的页面也可能是用户所需要的。潜语义分析试图去解决这个问题,它把词和文档都映射到一个潜在语义空间,文档的相似性在这个空间内进行比较。潜语义空间的维度个数可以自己指定,往往比传统向量空间维度更少,所以LSA也是一种降维技术。
LSA的整个过程如下:
1. 将文档集构造成Term-Document矩阵M,矩阵中的每个位置的值可以是该行代表个词在该列代表的文档中的词频、TFIDF值或其他。
2. 对Term-Document矩阵进行SVD奇异值分解,此时M = U * S * VT。SVD奇异值分解的详细过程可以查看此文。
3. 对SVD分解后的矩阵进行降维,只保留矩阵S前K个最大的奇异值得到S’。相应的U、V分别为U’、V’。 V’中的每行即为每个文档在潜在语义空间上的K维表示。
4. 使用降维后的矩阵重建Term-Document矩阵M’ = U’ * S’ * V’T。
5. 对于一个列向量表示的新文档Q,其在潜在语义空间上的K维表示为Q’ = QT*U’*S’-1。
6. 将新文档Q于文档集中的每个文档在潜在语义空间进行相似度计算,得到与Q最相似的文档。

下面是一个具体的例子,例子中能展现LSA的效果:M中human-C2值为0,因为文档C2中并不包含词human,但是重建后的M’中human-C2为0.40,表明human和C2有一定的关系,为什么呢?因为C2中包含user单词,和human是近似词,因此human-C2的值被提高了。(U、S、V中阴影部分别降维后的U’、S’、V’)。

LSA在复旦大学文本分类语料库上的验证:
(1)从分类语料中选取了Computer、Agriculture、Sports三个类别的文章,每个类别各取50篇左右。对每篇文章进行切词,停用词过滤后得到这里需要的的实验文档集。
(2) 使用Gensim对实验文档集进行LSA
1: from gensim import corpora, models, similarities
2:
3: textset = 'C:\\Users\\Administrator\\Desktop\\LSA\\textset.txt'
4: texts = [line.lower().split() for line in open(textset)]
5:
6: # Map word to wordid, delete word occur only once
7: dictionary = corpora.Dictionary(texts)
8: once_ids = [tokenid for tokenid, docfreq in dictionary.dfs.iteritems() if docfreq == 1]
9: dictionary.filter_tokens(once_ids)
10: dictionary.compactify()
11:
12: corpus = [dictionary.doc2bow(text) for text in texts]
13:
14: # Use TF-IDF
15: tfidf = models.TfidfModel(corpus)
16: corpus_tfidf = tfidf[corpus]
17:
18: # Use LSI
19: lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=3)
20: corpus_lsi = lsi[corpus_tfidf]
21:
22: for doc in corpus_lsi:
23: print doc
(3) 画出每个文档在3维的潜语义空间上的对应坐标点,得到下图。可以看到整个文档集内的文档,朝3个方向分布,分别对应Computer、Agriculture、Sports三个类别。

转自本人博客:http://www.datalab.sinaapp.com/
潜语义分析(Latent Semantic Analysis)的更多相关文章
- 潜在语义分析Latent semantic analysis note(LSA)原理及代码
文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...
- Latent Semantic Analysis (LSA) Tutorial 潜语义分析LSA介绍 一
Latent Semantic Analysis (LSA) Tutorial 译:http://www.puffinwarellc.com/index.php/news-and-articles/a ...
- 主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)
上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类 ...
- 主题模型之潜在语义分析(Latent Semantic Analysis)
主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...
- NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型
LSA(Latent semantic analysis,隐性语义分析).pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Late ...
- Latent semantic analysis note(LSA)
1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...
- Latent Semantic Analysis(LSA/ LSI)原理简介
LSA的工作原理: How Latent Semantic Analysis Works LSA被广泛用于文献检索,文本分类,垃圾邮件过滤,语言识别,模式检索以及文章评估自动化等场景. LSA其中一个 ...
- 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- Notes on Probabilistic Latent Semantic Analysis (PLSA)
转自:http://www.hongliangjie.com/2010/01/04/notes-on-probabilistic-latent-semantic-analysis-plsa/ I hi ...
随机推荐
- SQL常用命令浅析
表操作备注:操作之前使用“use <数据库名>”应连接某个数据库.建表命令:create table <表名> (<字段名 1> <类型 1> [,.. ...
- 微信开发之开发环境搭建( visual studio 2015we + IIS express + ngrok)
1. 申请个人测试使用的微信订阅号 https://mp.weixin.qq.com 可注册微信订阅号. 不会?请自行百度. 2. 安装 ngrok 微信开发首先要解决如何让微信链接到本地开发环境.有 ...
- 一步步学习ASP.NET MVC3 (11)——@Ajax,JavaScriptResult(2)
请注明转载地址:http://www.cnblogs.com/arhat 今天在补一章吧,由于明天的事可能比较多,老魏可能顾不上了,所以今天就再加把劲在写一章吧.否则对不起大家了,大家看的比较快,可是 ...
- JVM里面hashtable和hashmap实现原理
JVM里面hashtable和hashmap实现原理 文章分类:Java编程 转载 在hashtable和hashmap是java里面常见的容器类, 是Java.uitl包下面的类, 那么Hash ...
- The partner transaction manager has disabled its support for remote/network transactions.
http://technet.microsoft.com/en-us/library/cc753510(WS.10).aspx
- IIS Handler and Module探索
Create Handler & Module Run the Visual Studio Create a Class Library “HMHandler” --> Change t ...
- PHP漏洞全解(一)-PHP网站的安全性问题
本文主要介绍针对PHP网站常见的攻击方式,包括常见的sql注入,跨站等攻击类型.同时介绍了PHP的几个重要参数设置.后面的系列文章将站在攻击者的角度,为你揭开PHP安全问题,同时提供相应应对方案. 针 ...
- UVA 11736 Debugging RAM
模拟题: 比赛的时候忘记把1变成64位的1了,跪了好久: #include<cstdio> #include<cstring> #include<map> #inc ...
- Spring mvc 学习笔记
记录下学习spring-mvc的技术要点,项目结构路径如下: 1. 首先要在web.xml中添加Servlet和filter的配置: <!-- 转码,防止乱码--> <filter& ...
- platform_driver与file_operations两种方法开发led驱动
下面是两个LED灯的驱动程序 一个用platform_driver 另一个用file_operations #include <linux/kernel.h> #include <l ...