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. 1: from gensim import corpora, models, similarities
  1. 2:
  1. 3: textset = 'C:\\Users\\Administrator\\Desktop\\LSA\\textset.txt'
  1. 4: texts = [line.lower().split() for line in open(textset)]
  1. 5:
  1. 6: # Map word to wordid, delete word occur only once
  1. 7: dictionary = corpora.Dictionary(texts)
  1. 8: once_ids = [tokenid for tokenid, docfreq in dictionary.dfs.iteritems() if docfreq == 1]
  1. 9: dictionary.filter_tokens(once_ids)
  1. 10: dictionary.compactify()
  1. 11:
  1. 12: corpus = [dictionary.doc2bow(text) for text in texts]
  1. 13:
  1. 14: # Use TF-IDF
  1. 15: tfidf = models.TfidfModel(corpus)
  1. 16: corpus_tfidf = tfidf[corpus]
  1. 17:
  1. 18: # Use LSI
  1. 19: lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=3)
  1. 20: corpus_lsi = lsi[corpus_tfidf]
  1. 21:
  1. 22: for doc in corpus_lsi:
  1. 23: print doc

(3) 画出每个文档在3维的潜语义空间上的对应坐标点,得到下图。可以看到整个文档集内的文档,朝3个方向分布,分别对应Computer、Agriculture、Sports三个类别。

转自本人博客:http://www.datalab.sinaapp.com/

潜语义分析(Latent Semantic Analysis)的更多相关文章

  1. 潜在语义分析Latent semantic analysis note(LSA)原理及代码

    文章引用:http://blog.sina.com.cn/s/blog_62a9902f0101cjl3.html Latent Semantic Analysis (LSA)也被称为Latent S ...

  2. Latent Semantic Analysis (LSA) Tutorial 潜语义分析LSA介绍 一

    Latent Semantic Analysis (LSA) Tutorial 译:http://www.puffinwarellc.com/index.php/news-and-articles/a ...

  3. 主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)

    上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类 ...

  4. 主题模型之潜在语义分析(Latent Semantic Analysis)

    主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...

  5. NLP —— 图模型(三)pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)模型

    LSA(Latent semantic analysis,隐性语义分析).pLSA(Probabilistic latent semantic analysis,概率隐性语义分析)和 LDA(Late ...

  6. Latent semantic analysis note(LSA)

    1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...

  7. Latent Semantic Analysis(LSA/ LSI)原理简介

    LSA的工作原理: How Latent Semantic Analysis Works LSA被广泛用于文献检索,文本分类,垃圾邮件过滤,语言识别,模式检索以及文章评估自动化等场景. LSA其中一个 ...

  8. 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis

    http://blog.csdn.net/pipisorry/article/details/49256457 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  9. Notes on Probabilistic Latent Semantic Analysis (PLSA)

    转自:http://www.hongliangjie.com/2010/01/04/notes-on-probabilistic-latent-semantic-analysis-plsa/ I hi ...

随机推荐

  1. 基于BOOST 实现并发服务器框架

    一:设计思路 本服务器框架使用 UDP 传输协议,程序柱线程等待客户端数据,并将数组存取队列缓冲区.另外可开启多个工作线程,工作线程可以依据具体项目实现不同的功能 ,例如可以将队列缓冲区中的数据逐个取 ...

  2. 与wait for a undo record相关的系统卡死

    今天下班之前同事过来找我寻求帮助,说是某客户的ORACEL数据库服务器从昨天起就开始很奇怪,一个语句执行很慢很慢,好像整个系统都卡住了.      问题1:请问最近应用系统有更新过程序吗?答:没有更新 ...

  3. 74HC595

    74HC595 输入:串行输入 输出:并行/串行输出 用74HC595做一个流水灯 电路图 程序 /*====================== 测试74HC595 ================ ...

  4. Java练习题

    1.实现一个类似于ConcurrentHashMap的分段加锁 import java.util.HashMap; import java.util.Map; import java.util.con ...

  5. Codeforces Round #361 div2

    ProblemA(Codeforces Round 689A): 题意: 给一个手势, 问这个手势是否是唯一. 思路: 暴力, 模拟将这个手势上下左右移动一次看是否还在键盘上即可. 代码: #incl ...

  6. css中table-layout:fixed 属性的用法

    table-layout:fixed 属性的用法:如果想要一个table固定大小,里面的文字强制换行(尤其是在一长串英文文本,并且中间无空格分隔的情况下),以达到使过长的文字 不撑破表格的目的,一般是 ...

  7. Jquer学习

    1:什么是Jquery 2:jquery的例子 3:后记

  8. JavaScript闭包底层解析

    1. 闭包是一个函数,这个函数有权访问另一个函数作用域中的变量,创建闭包最常见的方式,就是在函数内部创建函数.要想彻底搞清其中细节,必须从函数从创建到调用的时候都发生了什么入手 2. 函数第一次被调用 ...

  9. JAVA客户端API调用memcached两种方式

    1. memcached client for java客户端API:memcached client for java 引入jar包:java-memcached-2.6.2.jar package ...

  10. SPRING IN ACTION 第4版笔记-第六章Rendering web views-001- Spring支持的View Resolver、InternalResourceViewResolver、JstlView

    一.Spring支持的View Resolver 二.InternalResourceViewResolver Spring supports JSP views in two ways: Inte ...