潜语义分析(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 ...
随机推荐
- 使用代理下载Android SDK
hx.gy:1080是红杏公益服务器,方便科学工作者访问一些常用的科学网站. 在Android SDK Manager中选择[Tools]->[Options],如下设置: HTTP Proxy ...
- php数组遍历 使用while循环
while() 通常和 list(),each()配合使用. $colors= array('red','blue','green','yellow'); while(list($key,$val)= ...
- MongoDB实战指南(七):MongoDB复制集之复制集工作机制
http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据 ...
- *[codility]StoneWall
https://codility.com/demo/take-sample-test/stone_wall 拼石块.用最少的方块.一开始想了想用贪心,是可行的,就是尽量每次把当前的高度往右延伸到最多, ...
- 图片url中包含中文导致网络请求404
需要对其中的中文使用转换格式,注意不是整个url,如果是整个,"/"这个网络分隔符`也会被转换的 URLEncoder.encode("福利", "u ...
- tbody添加垂直滚动条
法一: 用2个table: <table width="300" border="0" cellpadding="0" cellspa ...
- 【HDOJ】1009 FatMouse' Trade
这道题目是一道非常简单的贪心,但是我却修改了1h+.原因就是qsort的comp有bug.其实还是题目中的数据可以为0.除数为0真的要慎重啊.后来改为结构体,加一层循环选取最大值,果然ac啊.wa了几 ...
- Visual Studio中一个解决方案设置多个启动项目
在解决方案上右键,选择属性. 这样设置之后,点击开始运行之后,会同时启动2个项目. 适合一个项目既包含客户端也包含服务端,方便调试
- Android开发之bindService()侦听service内部状态
在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 p ...
- Heartbeat+DRBD+NFS 构建高可用的文件系统
1.实验拓扑图 2.修改主机名 1 2 3 vim /etc/sysconfig/network vim /etc/hosts drbd1.free.com drbd2.free.com 3. ...