潜语义分析(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 ...
随机推荐
- 【BZOJ】1051: [HAOI2006]受欢迎的牛
[HAOI2006]受欢迎的牛 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢 ...
- Hadoop学习—最大的敌人是自己
(大讲台:国内首个it在线教育混合式自适应学习) 如果没有那次学习机会,我依然深陷在封闭的泥塘里. 我是今年刚毕业的大学生,我学习成绩不错,所学也是国内很厉害的专业,全国范围内只有6所院校拥有学位授予 ...
- MaskedTextBox控件实现输入验证
Mask属性可以验证用户在文本中输入数据的格式 this.maskedTextBox1.Mask = "000000-00000000-000A";//身份证号码18位 this. ...
- C#常用正则过滤
//string regexstr = @"<[^>]*>"; //去除所有的标签 //@"<script[^>]*?>.*?< ...
- 重置mysql密码
如何修改mysql root密码 忘记MySQL ROOT密码是在MySQ使用中很常见的问题,可是有很多朋友并不会重置ROOT密码,那叫苦啊,特写此文章与大家交流: 1.编辑MySQL的配置文件:my ...
- selenium各种场景下的启动Firefox
开始学习selenium时为了启动Firefox可谓费尽周折,在大神的帮助下才堪堪搞定,走出了selenium的第一步:jdk1.8 + selenium_2.46 + Firefox国际版40.0. ...
- java多线程下载和断点续传
java多线程下载和断点续传,示例代码只实现了多线程,断点只做了介绍.但是实际测试结果不是很理想,不知道是哪里出了问题.所以贴上来请高手修正. [Java]代码 import java.io.File ...
- MAC下《暗黑世界》客户端版本编译说明!!
原地址:http://blog.csdn.net/uxqclm/article/details/11970659 2013-09-24 12:02 161人阅读 评论(0) 收藏 举报 目录(?) ...
- Firefly 性能测试 报告
原地址:http://bbs.gameres.com/thread_223724.html Firefly 性能测试 主要考虑点 网络IO的并发 进程间通信压力 数据读写压力 测试机配置: 操作系统 ...
- ThinkPHP中视图模型详解.
很多TP的新手对于模型中的视图模型不甚了解,官方虽然有详细手册,但是对于初学者来说还是比较难以理解! 先简单说一下视图模型所能实现的功能,基本就是主表与副表之间各个字段的关联问题,实现多表关联查询,相 ...