NLP中隐性语义分析及奇异值分解(SVD)-学习笔记

2023-05-16

目录

1、隐性语义分析

2、奇异值分解

2.1 左奇异向量U

2.2 奇异值向量S

2.3 右奇异值向量V^T

2.4 SVD矩阵的方向

2.5 主题约简


1、隐性语义分析

        隐形语义分析基于最古老和最常用的降维技术–奇异值分解(SVD)。SVD将一个矩阵分解成3个方阵其中一个是对角矩阵。SVD的一个应用是求逆矩阵。一个矩阵可以分解成3个更简单的方阵,然后对这些方阵求转置后再把它们相乘,就得到了原始矩阵的逆矩阵

        利用SVD,LSA(Latent Semantic Analysis)可以将TF-IDF词频-文档矩阵分解成3个更简单的矩阵,揭示了原始TF-IDF矩阵的一些性质,可以利用这些性质来简化原始矩阵。可以在将这些矩阵相乘之前对它们进行截断处理(忽略一些行和列),这将减少在向量空间模型中需要处理的维数。这些截断的矩阵相乘并不能得到和原始TF-IDF矩阵完全一样的矩阵,然而它们却给出了一个更好的矩阵。文档的新表示方式包含了这些文档的本质,即隐性语义

        隐性语义是一种数学上的技术,用于寻找对任意一组NLP向量进行最佳线性变换(旋转和拉伸)的方法,这些NLP向量包括TF-IDF向量和词袋向量。对许多应用来说,最好的变换方法是将坐标轴(维度)对齐到新向量中,使其在词频上具有最大的散度(spread)或方差(variance)。然后,我们可以在新的向量空间中去掉那些对不同文档的方差贡献不大的维度。

        LSA使用SVD查找导致数据中最大方差的词的组合。我们可以旋转TF-IDF向量,使旋转后的向量的新维度(基向量)与这些最大方差方向保持一致。“基向量”是新向量空间的坐标轴。每个维度(轴)都变成了词频的组合,而不是单个的词频,因此,可以把这些维度看作是构成语料库中各种“主题”词的加权组合。

        机器不能理解词的组合所表达的意义,只能理解这些词是在一起。当它看到像“dog”,“cat”,"love"这样的词总是出现在一起时,就会把它们放到一个主题中。机器并不知道这样的主题可能是关于“pets”的。这个主题可能包含很多词,包括“domesticated”和“feral”这种意义完全相反的词,如果它们经常一起出现在同一篇文档中,那么LSA会给它们赋予相同主题下的高分。

        LSA提供了另外一条有用的信息。类似于TF-IDF的IDF部分,LSA告诉我们向量中更多哪些维度对文档的语义(含义)很重要。于是,可以丢弃文档之间方差最小的维度(主题)。对于任何机器学习算法来说,这些小方差的主题通常是干扰因素和噪声。如果每篇文档都有大致相同含量的某个主题,而该主题却不能帮助我们区分这些文档,那么就可以删除这个主题。这将有助于泛化向量表示,因此当将LSA用于流水线上从没见过的新文档时,即使这篇文档来自完全不同的上下文,它也会工作得很好。

        LSA将更多的意义压缩到更少的维度中。我们只需要保留高方差维度,即语料库以各种方式(高方差)讨论的主要主题。留下来的每个维度都成为“主题”,包含所有捕捉到的词的某种加权组合。

2、奇异值分解

from nlpia.book.examples.ch04_catdog_lsa_sorted import lsa_models, prettify_tdm
bow_svd, tfidf_svd = lsa_models()
print(prettify_tdm(**bow_svd))

在这里插入图片描述

        上面是一个文档-词频矩阵,其中每一行都是文档对应的词袋向量。上述包含11(0~10)篇使用了词汇表中的6个词(cat, dog, apple, lion, nyc, love)的文档。遗憾的是,排序算法和大小有限的词汇表创建了几个完全相同的词袋向量(NYC,apple)。但是,SVD应该能够“看到”这一点,并将主题分配给这对词。

        下面将首先在词频-文档矩阵上使用SVD,代码为:

tdm = bow_svd['tdm']
print(tdm)

在这里插入图片描述

        无论是基于词袋的词项频-文档矩阵还是基于TF-IDF的词频-文档矩阵上运行SVD,SVD都会找到属于同类词的组合。SVD通过计算词频-文档矩阵的列(词项)之间的相关度来寻找那些同时出现的词。SVD能同时发现文档间词项使用的相关性和文档之间的相关性。利用这两条信息,SVD还可以计算出语料库中方差最大的词项的线性组合。这些词项频率的线性组合将成为主题。只保留那些在语料库中包含信息最多、方差最大的主题。SVD同时也提供了词频-文档向量的一个线性变换(旋转),它可以将每篇文档的向量转换为更短的主题向量。

        SVD将相关度高(因为它们经常一起出现在相同的文档中)的词项组合在一起,同时这一组合在一组文档中出现的差异很大。认为这些词的线性组合就是主题。这些主题会将词袋向量(或TF-IDF向量)转换为主题向量,这些主题向量会给出文档的主题。SVD(LSA的核心)用数学符号表示如下:

W_{m*n} =>U_{m*p}S_{p*p}V_{p*n}^T

        m为词汇表中的词项数量,n为语料库中的文档数量,p为语料库中的主题数量。

2.1 左奇异向量U

        U矩阵包含词频-主题矩阵,它给出了词所具有的上下文信息。这是NLP中最重要的用于语义分析的矩阵。基于词在统一文档中的共现关系,U给出了词与主题之间的相互关联。在截断(删除列)之前,它是一个方阵,其行数和列数与词汇表中的词数(m)相同。

import numpy as np
import pandas as pd
U, s, Vt = np.linalg.svd(tdm)
print(pd.DataFrame(U, index=tdm.index).round(2))

        U矩阵包含所有的主题向量,其中每一列主题向量对应语料库中的每一个词。它可以用作一个转换因子,将词-文档向量(TF-IDF向量或词袋向量)转换为主题-文档向量。只需将U矩阵转置(主题-词项矩阵)乘以任何词项-文档列向量,就可以得到一个新的主题-文档向量,这是因为U矩阵中每个元素位置上的权重或得分,分别代表每个词对每个主题的重要程度。

2.2 奇异值向量S

        S矩阵是一个对角方阵,其对角线上的元素即为“奇异值”。奇异值给出了在新的语义(主题)向量空间中每个维度所代表的信息量。

print(s.round(1))
S = np.zeros((len(U), len(Vt)))
np.fill_diagonal(S, s)
print(pd.DataFrame(S).round(1))

在这里插入图片描述

 

        同U矩阵一样,6个词6个主题的语料库的S矩阵有6行(p),但是它有很多列是(n)都是0.每篇文档都需要一个列向量来表示,这样就可以将S乘以后面马上要用到的文档-文档矩阵V^T。因为目前还没有勇敢截断该对角矩阵来降维,所以词汇表中的词项数就是主题数。

        这里的维度(主题)是这样构造的:第一个维度包含关于语料库的最多信息(前面已经解释的方差)。这样,当想要截断主题模型时,可以一开始将右下角的维度归零,然后往左上角移动,当截断主题模型造成的错误开始对整个NLP流水线错误产生显著影响时,就可以停止将这些奇异值归零。

2.3 右奇异值向量V^T

        V^T是一个文档-文档矩阵,该矩阵将在文档之间提供共享语义,因为它度量了文档在新的文档语义模型中使用相同主题的频率。

print(pd.DataFrame(Vt).round(2))

在这里插入图片描述

        就像S矩阵,当把新的词频-文档向量转换成主题向量空间时,可以忽略VT矩阵。仅仅用VT矩阵来检查主题向量的准确性,以重建用于“训练”该矩阵的原始词项-文档向量。

2.4 SVD矩阵的方向

        机器学习训练集对应的样本-特征矩阵中的每一行都是一篇文档,而每一列都代表该文档的一个词或特性。但是要直接进行SVD线性代数运算时,矩阵需要转换成词频-文档格式。

        注意: 矩阵的命名和大小描述先由行开始,然后才是列。因此,词频-文档矩阵的行代表词,列代表文档。矩阵的维数(大小)描述也是如此。一个2*3矩阵有2行3列,这意味着np.shape()的结果为(2,3),而len()的结果为2。在NLP训练集中,向量是行向量,而在传统的线性代数运算中,向量通常被认为是列向量。

        警告: 如果使用scikit-learn,必须将特征-文档矩阵转置,以创建一个文档-特征矩阵,然后将其传递到模型的.fit()和.predict()方法中。训练集矩阵中的每一行都应该是特定样本文本(通常是文档)的特征向量。

2.5 主题约简

        得到了一个主题模型,它可以将词频向量转换为主题权重向量。但是因为主题数和词数一样多,所以得到的向量空间模型的维数和原来的词袋向量一样多。到目前为止,还没有减少维数。

        这里可以忽略S矩阵,因为U矩阵的行和列已经排列妥当,以使最重要的主题(具有最大奇异值)都在左边。可以忽略S的另一个原因是,将在此模型中使用的大部分词-文档向量(如TF-IDF向量),都已经进行了归一化处理。最后,如果这样设置的话,它只会生成更好的主题模型。
因此,开始砍掉U右边的列。但是稍等一下,到底需要多少个主题才足以捕捉文档的本质呢?度量LSA精确率的一种方法是看看从主题-文档矩阵重构词项-文档矩阵的精确率如何

err = []
for numdim in range(len(s), 0, -1):
    S[numdim - 1, numdim - 1] = 0
    reconstructed_tdm = U.dot(S).dot(Vt)
    err.append(np.sqrt(((reconstructed_tdm - tdm).values.flatten()**2).sum() / np.product(tdm.shape)))
print(np.array(err).round(2))

        Out[1]:[0.06 0.12 0.17 0.28 0.39 0.55]
        当使用奇异向量为11篇文档重构词频-文档矩阵时,截断的内容越多,误差就越大。如果大家使用前面的3个主题模型为每篇文档重构词袋向量,那么将有大约28%的均方根误差。随着主题模型丢弃的维度越来越多精确率不断下降

        LSA背后的SVD算法会“注意”到某些词总在一起使用,并将它们放在一个主题中。这就是它可以“无偿”获得几个维度的原因。即使不打算在流水线中使用主题模型,LSA(SVD)也可以是为流水线压缩词频-文档矩阵以及识别潜在复合词或n-gram的一种好方法。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NLP中隐性语义分析及奇异值分解(SVD)-学习笔记 的相关文章

  • Adblock Plus Rules 自用 2021

    Adblock Plus Rules obsolete ZhihuCSDNBilibiliBaidu 64 64 static zhihu com heifetz lib js 64 64 static zhihu com heifetz
  • pandas函数 apply、iterrows、iteritems、groupyby

    apply DataFrame span class token punctuation span span class token builtin apply span span class token punctuation span
  • PyTorch中 tensor.detach() 和 tensor.data 的区别

    以 a data a detach 为例 xff1a 两种方法均会返回和a相同的tensor xff0c 且与原tensor a 共享数据 xff0c 一方改变 xff0c 则另一方也改变 所起的作用均是将变量tensor从原有的计算图中分
  • 解决Typora的测试版已过期问题 This beta version of Typora is expired, please download and install a newer versio

    错误提示 xff1a The beta version of typora span class token keyword is span expired span class token punctuation span please
  • WSL2 配置SSH 设置开机自启

    WSL2 配置SSH 设置开机自启 WSL2 配置SSH 设置开机自启先说结论完整wsl help WSL2 配置SSH 设置开机自启 尝试了很多博客上的方法没有找到理想的解决方案 xff0c 看了wsl help之后才知道这些方法确实十分
  • Undo Log学习

    一 Undo Log的作用 数据库故障恢复机制的前世今生中提到过 xff0c Undo Log用来记录每次修改之前的历史值 xff0c 配合Redo Log用于故障恢复 这也就是InnoDB中Undo Log的第一个作用 xff1a 1 事
  • 慢SQL解决方案

    一 全表扫描 1 案例 span class token keyword SELECT span span class token function count span span class token punctuation span
  • JAVA17新特性

    2022 年 7 月底 xff0c 甲骨文正式停止对Java SE 7的扩展支持 xff0c 一个有着近 11 年历史的 Java 标准版本迎来生命周期结束 目前最新版本的 Java18 于今年 3 月正式发布 xff0c 并将于 2022
  • 测试——单元测试,集成测试,系统测试,白盒,黑盒

    一 单元测试 1 何为单元测试 单元测试 xff08 unit testing xff09 xff0c 是指对软件中的最小可测试单元进行检查和验证 单元测试通常和白盒测试联系到一起 xff0c 如果单从概念上来讲两者是有区别的 xff0c
  • java对多媒体处理工具

    简介 JAVE Java Audio Video Encoder 类库是一个 ffmpeg 项目的 Java 语言封装 开发人员可以使用 JAVE 在不同的格式间转换视频和音频 例如将 AVI 转成 MPEG 动画 xff0c 等等 ffm
  • 线程池不允许使用Executors创建原因

    1 FixedThreadPool 和 SingleThreadPool 允许的请求队列长度为 Integer MAX VALUE xff0c 可能会堆积大量的请求 xff0c 从而导致 OOM span class token keywo
  • 高分子结晶的新进展、新模型

    高分子结晶的新进展 新模型 高分子的结晶结构与形态对高分子材料的物理机械性能具有重要影响 xff0c 高分子结晶过程的分子机理 结晶热力学 结晶动力学等构成了高分子物理的重要内容 高分子结晶的研究经历了从溶液培养单晶 xff0c 确定折迭链
  • wsl安装图形界面——体验有脸有面的图形界面

    不得不说 xff0c 自动windows支持linux子系统之后 xff0c 这又使其成为一大卖点 首先 Linux 的分发版本非常多 xff0c 例如有 xff1a Ubuntu openSUSE SUSE Linux Fedora Ka
  • E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)。

    国产银河麒麟系统下在使用apt install xxxxxxx 出现如下错误 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 您也许需要运行 apt fix broken install 来修正上面的错误 下列
  • 【CCF CSP-20160903】炉石传说

    CCF CSP 20160903 炉石传说 C 43 43 代码 span class token macro property span class token directive hash span span class token d
  • 树莓派介绍

    文章目录 一 树莓派介绍二 树莓派分类 一 树莓派介绍 树莓派 xff0c xff08 英语 xff1a Raspberry Pi xff0c 简写为RPi xff0c 别名为RasPi RPI xff09 是为学习计算机编程教育而设计 x
  • Docker核心技术-联合文件系统

    联合文件系统 xff08 UnionFS xff09 是一种分层 轻量级并且高性能的文件系统 xff0c 它支持对文件系统的修改作为一次提交来一层层的叠加 xff0c 同时可以将不同目录挂载到同一个虚拟文件系统下 联合文件系统是 Docke
  • Spark SQL与Hive SQL解析执行流程

    转载专用 xff1a 读到了好文章 xff0c 用于分享收藏 xff0c 侵权删 转发自大佬 xff1a 数据人生coding xff0c https yuanmore blog csdn net type 61 blog 转发自大佬 xf
  • 银河麒麟V10服务器系统安装教程及注意事项

    系统安装 1 引导安装 从U盘引导安装时首先进入的是安装引导页面 xff0c 如下图 xff1a 使用向上方向键 lt gt 选择 Install Kylin Linux Advanced Server V10 xff0c 按进入安装过程
  • 1012 - iOS之View Controllers的理解

    需求现在只是把navigationController的导航栏字体给去掉 xff0c 不过既然都看了 xff0c 那就直接刚一下吧 阅读官网文档的顺序 xff1a Managing Content in Your App 39 s Wind

随机推荐

  • CentOS7 linux下yum安装redis以及使用 及 外网访问

    一 安装redis 1 检查是否有redis yum 源 1 yum install redis 2 下载fedora的epel仓库 1 yum install epel release 3 安装redis数据库 1 yum install
  • MySQL8.0忘记密码后重置密码(亲测有效)

    实测 xff0c 在mysql8系统下 xff0c 用mysqld console skip grant tables shared memory可以无密码启动服务 服务启动后 xff0c 以空密码登入系统 mysql exe u root
  • My uBlock static filters

    My uBlock static filters 2022 百度 2022 06 https pan baidu com pan baidu com bpapi analytics pan baidu com rest 2 0 pcs ad
  • conda安装包报错:The current user does not have write permissions to the target environment(当前用户没有写入权限)

    问题 xff1a 在Winodws 10下使用conda安装第三方包时报错 xff1a EnvironmentNotWritableError The current user does not have write permissions
  • CCF 201809-3元素选择器

    分析 xff1a 这题超级坑 xff0c 当时考试时只得了50分 xff0c 现在重新做一直卡在80分 xff0c 各种复杂情况都考虑到了 xff0c 还是不能ac xff0c 于是尝试三种不同办法解决 xff0c 也均不能AC xff0c
  • 【开发经验】通过ffmpeg进行视频剪辑

    文章目录 前言一 视频剪辑1 1 生成标题2 文字和背景图叠加3 视频切割4 视频和背景图叠加结果演示java执行cmd指令更多ffmepg指令 前言 突然发现抖音有有一些人发布电视剧的精彩片段 xff0c 并且还获得了很多的点赞 突然发现
  • IE11离线安装总是提示“获取更新”的解决方法

    微软下载的IE11离线包在安装前 xff0c 必须要先安装必备更新 首先 xff0c 先检查操作系统 xff0c XP系统是无法安装IE11的 xff0c XP支持的最高版本为IE8 xff0c 如果是XP系统 xff0c 请先升级到WIN
  • debian系列linux 启动后黑屏,只有一个光标

    重复的按ctrl 43 alt 43 F1 一直到光标消失 如果跳出一个客户端登录的话就再重复按一下上面介绍的组合键 过一会儿就开机了
  • 抖音流行的字符视频如何实现

    前几天 xff0c 有个朋友给我分享了一个抖音短视频链接 xff0c 是以代古拉k跳舞视频为原型的字符视频 xff0c 朋友问我 xff1a 这个你知道怎么做吗 xff1f 我们都知道视频是由一帧一帧的静态图片组合而成的 xff0c 所以当
  • ANR系列(三)——ANR分析套路

    前言 在懂得了ANR的发生原理和监控原理之后 xff0c 是时候针对项目中的ANR进行分析了 xff0c 在分析前要知道ANR的分析套路一般是怎么分析的 分析ANR问题需要哪些日志 Trace日志 xff1a 当ANR产生的时候 xff0c
  • java socket学习笔记(一)——单线程实现socket通信

    服务器端 span class hljs keyword public span span class hljs keyword class span serverDemo span class hljs keyword public sp
  • Backtrace 分析

    xfeff xfeff 1 Java Backtrace 从Java Backtrace 我们可以知道当时Process 的虚拟机执行状态 Java Backtrace 依靠SignalCatcher 来抓取 Google default
  • docker搭建grafana+loki+promtail日志收集系统

    文章目录 docker搭建grafana 43 loki 43 promtail日志收集系统1 拉取镜像2 loki搭建1 xff09 新建配置文件2 xff09 启动容器 3 promtail搭建1 xff09 新建配置文件2 xff09
  • 微信 Mac 内测版(2.3.0)

    微信 Mac 内测版 2 3 0 WeChat for Mac 微信 Mac 版 极致简洁 迅捷沟通 微信内测版本 2 3 0 For macOS Sierra 10 12 or later 适用于 OS X 10 11 El Capita
  • 第1步 数据预处理

    文章目录 前言一 安装依赖环境二 导入依赖包三 导入数据集保姆级操作演示 xff1a 四 处理丢失数据保姆级操作演示 五 解析分类数据保姆级操作演示 六 拆分数据集为训练集合和测试集合七 特征缩放总结 前言 一 安装依赖环境 开始之前 xf
  • 深度学习-CV方向基本原理

    算法 一 卷积 卷积的基本含义 本质上就是相乘求和功能上拥有数据过滤和增强作用对于相乘求和 xff0c 是通用的使用卷积核每个像素点与对应的像素点相乘得到的结果求和作为中心点Result对于分类 xff1a 在深度学习上分一维二维三维卷积一
  • npm ERR! code ELIFECYCLE的解决

    在使用npm run dev启动程序时 xff0c 报出如下错误 xff1a npm ERR code ELIFECYCLE npm ERR errno 1 npm ERR datav jiaminghi com 64 2 0 0 dev
  • Transformer-Attention is all you need 学习笔记

    目录 摘要 xff1a 1 Introduction 2 Background 3 Model Architecture 3 1 编码器和解码器堆栈 3 2 注意力 3 2 1 Scaled Dot Product Attention 3
  • Transformer模型-学习笔记

    根据文献Attention is All you need 和The Illustrated Transformer中提出的Transformer模型进行学习整理 目录 1 Transformer 概览 2 引入张量 3 Self Atte
  • NLP中隐性语义分析及奇异值分解(SVD)-学习笔记

    目录 1 隐性语义分析 2 奇异值分解 2 1 左奇异向量U 2 2 奇异值向量S 2 3 右奇异值向量V T 2 4 SVD矩阵的方向 2 5 主题约简 1 隐性语义分析 隐形语义分析基于最古老和最常用的降维技术 奇异值分解 SVD SV