文本建模系列之一:LSA

2023-12-14 22:10
文章标签 系列 建模 文本 lsa

本文主要是介绍文本建模系列之一:LSA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

俗话说“庙小妖风大,水浅王八多”,作为一名自然语言处理的水货研究生,通常只是对论文有着一知半解的了解,然而因为毕竟人老了年纪大容易忘事,有时候还是想把这一知半解的想法用文字写出来,以便之后回顾,看官勿喷,水货要开始动笔了。

 

文本建模是自然语言处理领域中很基础的内容,而且也已经被研究了千万遍,这个系列我主要的思路是从LSA->pLSA->unigram model ->LDA,其中pLSA和LDA都是主题模型。我研究主题模型的初衷是为了在文本分类中提取出文本特征,而通过主题模型的建模过程,可以很好的了将文档的向量表示的维度压缩到K维,然后这K维的向量就可以丢到SVM、朴素贝叶斯、最大熵、神经网络、CNN等多个分类器中去了。文本表示的去稀疏和降维无疑对文本分类是个好事。

 

开始LSA,LSA论文是Deerwester等人在90年代早期发表的,其主要的方法是利用了奇异值分解(SVD)方法,这个方法在后来的pLSA论文中被指出没有真正的统计依据,也就是说缺乏合理的统计概率方法支撑,然而这个方法还是起到不错的效果,这也是神奇的地方。我并不想去探讨SVD的实际含义,只是把作者的做法表达出来一下

 

LSA(Latent Semantic Analysis)或者LSI(Latent Semantic Index),作者提出来主要是为了信息检索,也就是给定一个字符串,查找语料库中所有和这个字符串有关系的文档。

 

首先,我们将语料库的文档按照如下格式转换成矩阵:

 

 

 如上图所示,横向表示文档编号,纵向表示文档中的单词,表中数字表示文档的词频统计。把这个矩阵计做是X

 

对于X我们可以分解成如下的形式:


 其中T0和D0是正交矩阵,S0是对角矩阵,而且S0的对角是递减的正数,分解过程如下:



 这并不神奇,神奇的是后面过程,

为了降维,我们可以在S0中取前k个数产生一个新的对角矩阵S,对应的在T0中取前两列,在D0'中取前两列,构成新的X^

其中:

 

 

示例如下:



 那么上面的初始矩阵可以按照下面的分解:


 

 假设我们取K=2,那么新产生的矩阵是:



然后就得到了新的矩阵X^:



 到这里,我们就可以进行下一,也就是比较文档和文档、文档和词语、词语和词语、查询语句与词语之间的相似度了。具体的计算过程如下:

  • 计算词语之间的相似度(相关性)

计算词语与词语之间的相关性,



 上面的矩阵,X^和X^的转置的点乘是所有的词语之间的相似度关系,而根据右边的式子,可以看出,其实是TS与TS的转置,因此第i个词语和第j个词语之间的相似性就可以使用TS中第 i 行和第 j 列的相似性,当然这里可以使用欧式距离或者余弦函数cos来计算。

 

  • 计算文档与文档之间的相似度

计算文档与文章之间的相似度,可以用下面的矩阵来表示:


和计算词语与词语之间的一样,第 i 篇 文档 和第 j 篇文档之间的相似度就是 DS矩阵第 i 行 和 第 j 行的向量距离。
 

  • 计算文档与词语之间的相似度(相关性)

 计算文档与单词相似性的矩阵就是X^:

 我们可以把第 i 个词语 和第 j 个文档的相似性比较为: TS(1/2) 矩阵的第 i 行 和 DS(1/2)矩阵的第 j 行的向量距离

  • 计算查询语句q与语料中文档的相似性

这个计算过程,稍显麻烦,首先将查询语句转换成一维列向量,也就是和文最初的形式一样。然后就算:



 然后将Dq和D的每一行计算向量距离即可

 

 

参考文献:

[1]Scott Deerwester. Indexing by Latent Semantic Analysis. Journal of the American Society for Information Science(1986-1998);sep 1990;41,6; ABI?INFORM Global

 

[2]Edel Garcia,Latent Semantic Indexing (LSI) A Fast Track Tutorial

这篇关于文本建模系列之一:LSA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/494061

相关文章

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

Java实现将Markdown转换为纯文本

《Java实现将Markdown转换为纯文本》这篇文章主要为大家详细介绍了两种在Java中实现Markdown转纯文本的主流方法,文中的示例代码讲解详细,大家可以根据需求选择适合的方案... 目录方法一:使用正则表达式(轻量级方案)方法二:使用 Flexmark-Java 库(专业方案)1. 添加依赖(Ma

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl