潜语义分析(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 ...
随机推荐
- 关于 hashCode() 你需要了解的 3 件事
(点击上方公众号,可快速关注) 原文:eclipsesource 译文:ImportNew - 南半球 链接:http://www.importnew.com/16517.html 在 Java 中, ...
- 排队(BZOJ1731:[Usaco2005 dec]Layout 排队布局)
[问题描述] Czy喜欢将他的妹子们排成一队.假设他拥有N只妹纸,编号为1至N.Czy让他们站成一行,等待自己来派送营养餐.这些妹纸按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多只妹 ...
- classes system in sencha touch
//http://www.sencha.com/learn/sencha-class-system var Person = new Ext.Class({ name: 'Mr. Unknown', ...
- hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memo ...
- Viz World and Viz Curious Maps 教程 -- 基础篇
0. 开篇之前的一些废话 本文的内容是之前因为一些原因而写的,现在打算分享出来,内容就不做更改纯迁移了…毕竟我也太久没摸过加密狗了( ╯□╰ ).内容定位是教程,对应的 Curious World M ...
- Java集合框架的知识总结(1)
说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析. 1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象 ...
- unity 引用 移动mm 支付sdk
原地址:http://blog.csdn.net/u012085988/article/details/17531005 资源下载:http://download.csdn.net/detail/u0 ...
- 使用正则表达式匹配HTML 下各种<title>标签
http://www.oschina.net/question/195686_46313 <title>标题</title> <title>标题</title ...
- RxJava开发精要5 – Observables变换
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
- php 模拟斗地主发牌简单易懂
闲来无聊,就写了这个方法,也算是熟悉下php的数组操作,还请各位大神多指教.$arr 数组,好像有点问题,应该 2=>'方片2',3=>'梅花2',4=>'红心2',5=>'黑 ...