潜在语义分析(Latent Semantic Analysis,LSA)

文章目录

    • 1. 单词向量空间、话题向量空间
      • 1.1 单词向量空间
      • 1.2 话题向量空间
    • 2. 潜在语义分析算法
      • 2.1 例子
    • 3. 非负矩阵分解算法
    • 4. TruncatedSVD 潜在语义分析实践

  • 一种无监督学习方法,主要用于文本的话题分析
  • 其特点是通过矩阵分解发现文本与单词之间的基于话题的语义关系
  • 最初应用于文本信息检索,也被称为潜在语义索引(latent semantic indexing,LSI),在推荐系统、图像处理、生物信息学等领域也有广泛应用

文本信息处理中:

  • 传统的方法以单词向量表示文本的语义内容,以单词向量空间的度量表示文本之间的语义相似度
  • 潜在语义分析 旨在 解决这种方法不能准确表示语义的问题,试图从大量的文本数据中发现潜在的话题
  • 话题向量表示文本的语义内容,以话题向量空间的度量更准确地表示文本之间的语义相似度

潜在语义分析使用的是非概率的话题分析模型

  • 将文本集合表示为单词-文本矩阵
  • 对单词-文本矩阵进行奇异值分解,从而得到话题向量空间,以及文本在话题向量空间的表示

非负矩阵分解(non-negative matrix factorization,NMF)是另一种矩阵的因子分解方法,其特点是分解的矩阵非负。非负矩阵分解也可以用于话题分析。

1. 单词向量空间、话题向量空间

1.1 单词向量空间

文本信息处理的一个核心问题是对文本的语义内容进行表示,并进行文本之间的语义相似度计算

  • 利用向量空间模型(vector space model,VSM),也就是单词向量空间模型(word vector space model)。
  • 基本想法:用一个向量表示文本的“语义”,向量的每一维对应一个单词,其数值为该单词在该文本中出现的频数或权值
  • 基本假设
    文本中所有单词的出现情况表示了文本的语义内容;
    文本集合中的每个文本都表示为一个向量,存在于一个向量空间;
    向量空间的度量,如内积或标准化内积表示文本之间的“语义相似度”。

在这里插入图片描述

  • 单词文本矩阵是稀疏矩阵,元素为频数或权值
  • 权值:常用单词频率-逆文本频率(term frequency-inverse document frequency,TF-IDF)表示,其定义是

在这里插入图片描述
单词向量空间模型的优点

  • 是模型简单,计算效率高。因为单词向量通常是稀疏的,两个向量的内积计算只需要在其同不为零的维度上进行即可,需要的计算很少,可以高效地完成

单词向量空间模型也有一定的局限性

  • 内积相似度未必能够准确表达两个文本的语义相似度上
  • 因为自然语言的单词具有一词多义性(polysemy)及多词一义性(synonymy),所以基于单词向量的相似度计算存在不精确的问题

1.2 话题向量空间

话题(topic),就是指文本所讨论的内容或主题。

  • 一个文本一般含有若干个话题
  • 如果两个文本的话题相似,那么两者的语义应该也相似
  • 话题由若干个语义相关的单词表示
  • 同义词(如“airplane”与“aircraft”)可以表示同一个话题
  • 而多义词(如“apple”)可以表示不同的话题

这样,基于话题的模型就可以解决上述基于单词的模型存在的问题。

定义一种话题向量空间模型(topic vector space model)

  • 给定一个文本,用话题空间的一个向量表示该文本,该向量的每一分量对应一个话题,其数值为该话题在该文本中出现的权值
  • 用两个向量的内积或标准化内积表示对应的两个文本的语义相似度
  • 注意话题的个数通常远远小于单词的个数,话题向量空间模型更加抽象
  • 潜在语义分析正是构建话题向量空间的方法(即话题分析的方法)
  • 单词向量空间模型与话题向量空间模型互为补充,两者可以同时使用

单词-文本矩阵XXX 近似为:单词-话题矩阵TTT & 话题-文本矩阵YYY 的乘积形式,X≈TYX \approx TYXTY

在这里插入图片描述
在这里插入图片描述

2. 潜在语义分析算法

潜在语义分析 利用 矩阵奇异值分解(SVD),对单词-文本矩阵进行奇异值分解

  • 左矩阵 作为话题向量空间
  • 对角矩阵右矩阵的乘积 作为 文本在话题向量空间的表示

潜在语义分析 根据 确定的话题个数k单词-文本矩阵XXX进行截断奇异值分解
在这里插入图片描述
在这里插入图片描述

2.1 例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 非负矩阵分解算法

非负矩阵分解 也可以用于 话题分析

  • 单词-文本矩阵进行非负矩阵分解
  • 左矩阵作为话题向量空间
  • 右矩阵作为文本在话题向量空间的表示。注意通常单词-文本矩阵是非负的(所有元素 >= 0)

定义:找到两个非负矩阵乘积近似表示一个非负矩阵
X≈WH,X≥0,W≥0,H≥0X \approx WH,X \ge 0, W\ge 0, H \ge 0XWHX0,W0,H0
WWW 为基矩阵,表示话题空间,HHH 为系数矩阵,是文本在话题空间的表示。
非负矩阵分解 旨在 用较少的基向量、系数向量 来 表示较大的数据矩阵

非负矩阵分解 可以表为以下的最优化问题:
min⁡∣∣X−WH∣∣2st.W,H≥0\min ||X-WH||^2\\ st. \quad W,H \ge 0minXWH2st.W,H0

非负矩阵分解的算法是迭代算法

  • 乘法更新规则的迭代算法,交替地对WWWHHH进行更新。
  • 本质是梯度下降法,通过定义特殊的步长和非负的初始值,保证迭代过程及结果的矩阵WWWHHH均为非负

4. TruncatedSVD 潜在语义分析实践

基于sklearn.decomposition.TruncatedSVD的潜在语义分析实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python分割提取字符串_Python 字符串操作(截取/替换/查找/分割)

python字符串连接先介绍下效率比较低的,有些新手朋友就会犯这个错误:a [a,b,c,d]content for i in a:content content iprint content说下为什么效率会低呢?原因:在循环连接字符串的时候,他每次连接一次&#xff0…

CURL详解[全]

PHP中的CURL函数库(Client URL Library Function)curl_close — 关闭一个curl会话curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数curl_errno — 返回一个包含当前会话错误信息的数字编号curl_error — 返回一个包含当前会话错误信息的字符串…

基于sklearn.decomposition.TruncatedSVD的潜在语义分析实践

文章目录1. sklearn.decomposition.TruncatedSVD2. sklearn.feature_extraction.text.TfidfVectorizer3. 代码实践4. 参考文献《统计学习方法》潜在语义分析(Latent Semantic Analysis,LSA) 笔记 1. sklearn.decomposition.TruncatedSVD sk…

一个简单又高效的日志系统

摘要:本文给出一个性能高,使用简单的日志解决方案。本模块实现日志信息的批量写入文件,定时自动flush到文件中,写入文件的日志级别可动态调整,单个日志文件大小可配置,循环对日志文件写入,这样不…

R语言chorolayer_R语言空间可视化:绘制英国脱欧投票地图

添加法国,它位于右下方,因此我们应该看到一点…plot(FR,addTRUE)然后,我们可以检索英国退欧公投数据referendumddply(referendum,.(Region,HASC_code),summarise,Remainsum(Remain),Leavesum(Leave))我们可以发现,脱欧赢得了51.89…

概率潜在语义分析(Probabilistic Latent Semantic Analysis,PLSA)

文章目录1. 概率潜在语义分析模型1.1 基本想法1.2 生成模型1.3 共现模型1.4 模型性质2. 概率潜在语义分析的算法概率潜在语义分析(probabilistic latent semantic analysis,PLSA),也称概率潜在语义索引(probabilistic …

网站变成灰色调

为方便站点哀悼,特提供css滤镜代码,以表哀悼。以下为全站CSS代码。html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale1); } 使用方法:这段代码可以变网页为黑白,将代码加到CSS最顶端就可以实现素装。建议全国…

马尔可夫链蒙特卡罗法(Markov Chain Monte Carlo,MCMC)

文章目录1. 蒙特卡罗法2. 马尔可夫链3. 马尔可夫链蒙特卡罗法4. Metropolis-Hastings 算法5. 吉布斯抽样蒙特卡罗法(Monte Carlo method),也称为统计模拟方法(statistical simulation method),是通过从概率…

NHibernate 异常及解决办法(长期添加中)

Mapping 错误&#xff1a; 1&#xff09; Could not determine type for:Namespance.Class,AssemblyName, for columns: NHibernate.Mapping.Column(ColumnName) 通常是Mapping中的 type attribute设定错误&#xff0c;在Assembly找不到。如 <property name"PropertyNa…

mysql scope runtime_maven scope provided和runtime的例子

maven常用的scope有compile,provided,runtime,test。complie是默认值&#xff0c;表示在build,test,runtime阶段的classpath下都有依赖关系。test表示只在test阶段有依赖关系&#xff0c;例如junitprovided表示在build,test阶段都有依赖&#xff0c;在runtime时并不输出依赖关系…

[网站seo优化] 史上最全增加外链的方法!

目前在国内网站在百度的权重尤为重要 百度的权重主要取决于 1&#xff0c;收录量2&#xff0c;外链数与质量3&#xff0c;建站时间 可见外链的重要性现在就分享一篇关于外链的文章&#xff0c;希望对大家有用。 一、网站内容1. 写一篇权威的文章(毫无疑问是获得链接的最好方法…

python自动化安装软件_python自动化安装源码软件包

#!/usr/bin/env python# -*- coding:utf:8 -*-#create by 、矿泉水 2015/7/30import sys,commandsif len(sys.argv) 2:SOFTWARE sys.argv[1]commands.getstatusoutput(‘tar zxvf %s &> install.log 2>&1‘%SOFTWARE)SOFTWARE SOFTWARE.split(‘.‘)SOFTWARE.…

蒙特卡罗法近似求解圆周率π

文章目录1. 原理2. 模拟代码1. 原理 给出 x∈[0,1),y∈[0,1)x \in [0,1),y\in[0,1)x∈[0,1),y∈[0,1) 的均匀分布随机点&#xff0c;模拟 ttt 次&#xff0c;落在以 (0,0)(0,0)(0,0) 为圆心&#xff0c;半径 r1r1r1 的圆以内的次数为 ccc当模拟次数足够大时&#xff0c;可以看成…

算法导论2.3-7

Q: 请给出一个运行时间为θ(nlgn)的算法&#xff0c;使之能在一个由n个整数构成的集合S和另一个整数X时&#xff0c;判断出S中是否存在有两个其和等于X的元素。A: 先对S[1 TO N]进行合并排序--------------------------------θ(nlgn) FOR a <- [1 TO N-1]-----------------…

LeetCode 1318. 或运算的最小翻转次数(位运算)

1. 题目 给你三个正整数 a、b 和 c。 你可以对 a 和 b 的二进制表示进行位翻转操作&#xff0c;返回能够使按位或运算 a OR b c 成立的最小翻转次数。 「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。 示例 1&#xff1a; 输入&#x…

redis和mysql数据不一致_高并发下为什么 redis 和数据库不一致?怎么解决?

现在的web架构一般都用redis作为缓存层来减轻数据库的压力&#xff0c;数据在此架构下的读取问题&#xff0c;一般都是先判断redis缓存是否有数据&#xff0c;如果有&#xff0c;直接返回&#xff0c;否则读取数据库的数据&#xff0c;写入redis&#xff0c;返回数据&#xff0…

LeetCode 91. 解码方法(动态规划)

1. 题目 一条包含字母 A-Z 的消息通过以下方式进行了编码&#xff1a; A -> 1 B -> 2 ... Z -> 26给定一个只包含数字的非空字符串&#xff0c;请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"&#xff08;1 2&am…

vim粘贴板和系统粘贴板的共享(linux)

不的不说,当你习惯了vim给你的编程带来乐趣后&#xff0c;你将会越来越喜欢它&#xff01; 在以前刚开始用vim的时候&#xff0c;总觉的在vim里面&#xff0c;鼠标没有起到像其他编辑器那样的功能&#xff0c;不能通过鼠标控制vim下光标移动&#xff0c;而当时又不熟悉vim的移动…

java的vector_java中的Vector类

public class VectorVector 类实现了可动态扩充的对象数组。类似数组&#xff0c;它包含的元素可通过数组下标来访问。但是&#xff0c;在 Vector 创建之后。Vector 可根据增加和删除元素的需要来扩大或缩小。每个向量可通过维护 capacity 和 capacityIncrement 来优化存储空间…

LeetCode 1238. 循环码排列(格雷编码+旋转数组)

1. 题目 给你两个整数 n 和 start。你的任务是返回任意 (0,1,2,,...,2^n-1) 的排列 p&#xff0c;并且满足&#xff1a; p[0] start p[i] 和 p[i1] 的二进制表示形式只有一位不同 p[0] 和 p[2^n -1] 的二进制表示形式也只有一位不同示例 1&#xff1a; 输入&#xff1a;n 2…