文本表示|学习笔记

简介: 快速学习文本表示

开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践文本表示】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1067/detail/15458


文本表示

 

简单介绍文本挖掘简介,主要内容有一个是文本挖掘的概述,这里面列了,文本挖掘概述的这些内容,比如它的建议、应用、作用、价值,可以去查点资料看一下。然后文本特征提取主要对于中文来说就是中文的分词和词性的标注。

那这个分词的话,python实验里面会有,所以这一部分的话,为了节省时间,不单独给大家来讲解了。

文本表示是文本挖掘的一个非常重要的基础。文本的相似性计算,在学数据挖掘的时候,是第二章讲数据的时候,有数据的相似性和相应性的计算,同样文本也有一个很重要的概念就是文本的相似性计算。然后常用的文本挖掘,有文本分类,文本情感分析,主题模型。还有词共现网络分析,后面还有很多,比如文本过滤,文本聚类,话题检测,本体以及命名试题抽取,试题关系抽取等等。

由于课时原因,主要讲一下,表示相似度计算,文本分类和文本情感分析。


文档检索模型与文本表示

文档检索模型也简称文档模型,是指如何对文档进行查询文档进行表示的一种方法,然后对它们进行相似度计算的一个框架和方法。文档模型的本质是应用特征词量化的方法,特征词量化,有些评估函数,前面也提过。然后表示文本,以便对相关度进行建模。相关度就是要查询有一个表示,然后再到文档库里面去找到相应的文档,就这两个表示之前一样能够进行匹配,要能进行相关度计算。

image.png看这张图很直观,原始查询要有一个查询表示。那这个表示怎么表示?需要应用特征词量化的方法。然后同样的原始文档,文档也有一个表示,它们之间就可以进行相关度计算。

那么这个计算的一定要能够进行一些数字化的计算,而不是那个字符串之间的查找和匹配。那么来看一下文档的表示,这样一个表格如何来表示文档?文档d123等等,文档里面有很多特征词,很多词t1、t2等等。

那么单元格里面这个表是用什么样的一种数字化的方法?用什么样一种量化方法?这个量化前面提过。有些量化函数,比如说用tf还有df,后面新的可以延迟向量,那么这些方法很多,在文档讲述模型里面,那到底采用哪一种量化方法,就可以有不同的文档模型。

文档模型一般可以分为这样几类?比较早期的布尔模型,然后就是向量空间模型,接着是概念模型,概念模型进一步扩展,有统计语言模型,那么新的还有神经网络语言模型。看它们的时间的发展。换个模型是比较早,那么20世纪60 ,70年代就有了,然后后面才是向量模型,再后面是概念模型,那么现在就是比较新的神经网络语言模型。

下面把几个文档模型展开来介绍一下。

1.布尔模型

布尔模型是建立在经典的集合论和布尔代数的基础上。它的基本思想是每一个词在一篇文档中是否出现,然后对应的权值就是0和1。就是出现是1没有出现是0。然后它的文档检索使用布尔逻辑运算。用布尔操作,就是and 、or 、not。

然后它的相似度的计算,就是用布尔表达式来表达。然后查询文档和文档数据库,进行匹配。匹配成功的文档得分为1,否则是0,然后将得分是1的文档提供给用户。那么优点就是简单,非常容易理解,比较简洁。然后现在外面有很多的检索,就是用霍尔模型。比如看很多这种网站,它的基本的检索,大众点评,携程,一框式检索里面,大多数还是起于布尔模型。它的缺点呢是什么?是准确匹配,准确配备信息需求能力表达不足。

比如说查,那个老公,说不定丈夫就查不到了,查这个计算机,说不定电脑就查不到了,要查最便宜的笔记本电脑,它会按照关键词匹配。然后并不是前面排列的是最便宜的分店。

2.向量空间模型(VSM)

image.png向量空间模型。简称是vdm,向量vector 空间space 模型model 。向量空间模型它的思想是将文档表示成一个向量,一篇文档看作向量空间中的一个点。例如文档一,它里面的词1它的权重,词2的权重,词3的权重。

那么文档2以及查询,就可以在向量空间里表示文档了。这个向量空间里面的每个最高值就是词,那么第一文档,它在t1上面是2,这t2上面是3,t3上面是5,然后就有一个向量空间的一个点。那么同样的文档2文档3文档n等等。查询也是表示成一个向量,这样的话,如果是要检索文档的话,那就用两个向量之间的相似度进行计算。比如说夹角余弦距离,那么向量空间模型的全称就是这样一个单词。

文档-索引词(Doc Term Matrix)

image.png

这个矩阵的话,它里面是n篇文档,m个索引词构成的矩阵Am*n。这个矩阵里面的每一行是一个索引词或者特征词,每一列是个文档,中间单元格就是词的权重。简单可以是词频,当然也可以是布尔模型的0和1。

image.png看一个具体的数据的例子。这里面可以看一下,比如d1这个文档和哪个文档是最相似?那很显然容易发现它和d6是很相似的,在特征词上面,它在词频的比较。所以就可以把一个文档这一列当成一个向量,然后就可以构建向量空间模型。

向量表示

image.png那么来看看它的向量怎么表示的,向量表示的话就是m个无序的索引词t,可以是词条,可以是词根,词,短语都可以。然后每一个文档的话就可以用这个词它的向量的方式来表示。每一个词的权重构成一个向量,那么这个权重有哪些方法计算的?以前特征词的量提过多次。那么现在给大家讲一个比较常用的方法,就是这个权重,一个可以用词频统计。那么词频统计里面它是广义,还要包括这个文档频率。那么比如词频TFi,j,就是特征i在第j篇文档中出现的次数。这样一个词频TF。

那比如文档频率DF,那就是在所有文档集合中出现特征i的文档数目,这叫文档频率。那个在实际应用里面的话,更多的是用词频然后乘以文档频率的列文档频率。主要用tf乘以df这个地方在前面也提过这个概念。

TF-IDF

image.png那么来看一下td选择这一个权重的一个意义,tf和idf这两个单词的全称。然后这两个结合在一起来定义这个词的权重。它在作用和意义是什么?

如果词频越高的话,那么整个乘积越大。然后如果df越小,也就是if越大的话,这个权重也是越大。那也就是某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率就是低文档频率,容易产生高权重的TF-IDF,就一个tf比较大,一个itf比较大。那么高权重,权重的目的是能够区分什么不同的。就权重越高,它越容易和别的文档区分开来。

首先这种TF-IDF它倾向于过滤掉那些常见的词语。因为常见词语在每一个文档里基本上都有,大家互相文档很难区分。保留那些重要的词语,比如说在1万篇文档里面,那么关于这个军事的这种词语。只有5篇文档里有,然后这5篇文档里出现的频率很高,另外大多数文档是没有的。这样这个权重的乘积就很大,权重越大就是越容易把它和别人的文档区分开来。这就是TF-IDF的意义。

image.png看一下利用TF-IDF构建向量空间模型的例子。看看这里有一句查询,然后有三篇文章。因为用英文来表示,可能看起来简洁一点。文档数是三。大家注意逆文档频率就是反向文档频率,在工程里面一般是用Log绝对数来进行处理的。那么把这些分词以后可以得到所有的用的词,在这一列里面,没有去停用词。

然后查询和每篇文档,来看一下词频这个项目都是它的词频。所以首先这里是计算它的词频,然后这一列是计算它的文档频率。就是一个词在几篇文档里出现文档频率。然后这里做的是d就是文档数除以文档频率,这是工程里做的一个转换。

然后这里itf就是逆文档频率,然后这里是这些词频和文档频率的计数。计算权重,权重是用tf×idf,那么idf在工程里是用Log用对数做转换的。然后它得到的这个权重的值,分别这几列里面。那么就得到了这个文档的向量的表示,以及查询的向量表示。然后就可以在向量空间里表示这个文档和查询,如果要做相似度计算的话,就可以做向量的计算。

3.文档概率模型

image.png

其概率框架来计算,大家都比较熟悉,贝叶斯定理,然后一些概率的一些概念,条件独立性假设。那么一篇文档它是由若干词构成的,如果词相互独立的话,那么这篇文档的概率就是词概率的乘积。在文档检索模型里面基本的模型,它是这样子,就是将文档分为两部分。第一个适合查询语句相关的,第二个和查询是非相关的。就是文档的集合里面总归有一部分和查询相关,另外就是和查询无关的。然后就可以用这个概念模型,去找相关的文档。那么下面这些细节就不展开了,大家可能对概率更熟悉。

文本的表示

image.png

文本表示的含义是将文本转化成数学上的向量表示。也就是把文本里面的字符串如何转换成向量,这是文本表示的核心。也就还是特征词量化的一个概念。那么这里从另外一个角度来讲解,文本表示一种是离散的方式。

列出一些常用的方法,比如说一个是词袋模型,词袋模型注意这个缩写BOW。

就是文档分成一个词,所以文档的话就像一个袋子里装了很多次词一样的叫词袋模型。这里的词可以每一个词可以给它一个编号的。如果所有的文档里面有1万个词,那每一个词都会有一个唯一的编号。然后这就是前面的刚学过的TF-IDF,再有一个One-hot编码。叫独热,单独一个热的独热变化,后面的话会看一个事例。那么还有一些gram的方法,就是连续的几个来切词。那么比如Bi-gram的方法,在一串文本里面,2个2个切就1-2,2-3,3-4,4-5,5-6。大家想象一下,这样来把文本给它切成一个一个片段,然后构成这个表示。还有就是这个词和文档的矩阵,前面在做TF-IDF也提过。

那么单元格它里面是词的权重,就是文本的表示是一种离散的表示。就把很多文档,每一篇文档都用离散的这样一些词的量化关系,用离散来表示。另一种表示方法叫分布式表示。它就不是像前面的一个一个离散的值,它有可能就是一个词就有一组值来表示,就是用向量来表示。那么这个方法,一种是用降温的方法给前面的词文档取证,然后进行处理,这个不展开了。

接着就是用神经网络语言模型也是现在非常热的,这样的一个模型来处理,然后得到分布式表示。也就是文本的分布式表示,比如说前面很热门的,前几年特别热门的word2vec。当然这两年热门的还是波特模型,前面给大家提过。

文本表示事例

image.png 

下面来看一下文本表示的示例,这里有一句话Sentence:你是一个好人。然后分词以后,看看词。下面这里是one- hot编码,独热编码,那么每一个词给它一个向量表示。这个向量表示里面只有一个位置它是1其它都是0,所以叫one-hot编码,那么这个n的长度是什么呢?

长度就是研究的这个语料里面找的词的数量,比如说1万个词。然后每一个词给它一个位置,给它一个编号,然后再转开one- hot,整个长度就是整个词典的一个长度,就语料里面总共1万个词的长度。再来看看这个word2vec,这个词向量的一个表示,词向量表示就是将原来的one- hot编码再利用神经网络这个模型,通过上下文关系,这个是one- hot编码。然后经过神经时间网络模型处理过可以得到一个词向量,那么这个词向量的维度那么远远小于原来的one- hot编码的幅度,可以大幅度降维,还可以提高计算的效率。

word2vec可以给大家稍微介绍一下,它是Google公司2013年向外界报道,然后推出的一款词向量生成工具,将文本语料作为输入,然后利用神经网络模型,从语料当中进行学习,通过上下文的关系学习以词向量的方式输出。那么每一个词可以得到一个词向量。

那么它的语意能力更强,因为它综合学习到上下文的关系。前面的one- hot大家看看它语意的能力很弱,因为它只是在整个语料里面多少个词,每个词还有编号。然后再用一个one- hot编码的方式来处理。

image.png

那么再看一下这个word2vec,它的一些内部的一些内容。word2vec它有两个模型,一个是叫做cbow就是bow词袋模型。c是Continues就是连续的词袋模型。这个模型可以干嘛呢?可以通过上下文来预测一个词的概率。

上下文,比如说隔壁老,会想到王。这样一个词隔壁老王。然后再一个模型是skip gram模型 ,它可以通过一个词去预测它的上下午。那么如果说对着自己竖大拇指,那有可能你讲的好。

那么这个例子里面比如说you are good men本来是四个词,它都有一个one- hot编码。然后经过cbow这个模型以后,它可以通过good 前后左右的词,预测good这个词它的值。如果是用skip gram模型的话,那就可以利用good这个词来预测什么它的上下文,大家注意word2vec有两种模型的方法。

image.png那么下面我们再看一下word2vec,在实践应用的时候,一般先是把所有的词做成one- hot编码,然后再利用神经网络模型。通过神经网络一般是深度学习的这个神经网络,经过训练以后,将每一个词再转换成一个词向量。

embeddingm就是一个词向量的意思。它可以大幅度降低向量的维度,大幅度降温。可以提高以后应用的提高它的计算量和计算能力和计算效率。

所以要记住,在实践的时候,一般是先做one- hot,就说一大语料先分好词以后,每一个词给它做个词典,每一个词典里的一个词会有个编号,然后就做one- hot再利用工具生成词向量。

相关文章
|
9月前
|
人工智能 自然语言处理
|
机器学习/深度学习 自然语言处理 开发者
文本表示-上|学习笔记
快速学习文本表示-上
75 0
文本表示-上|学习笔记
|
机器学习/深度学习 自然语言处理 开发者
文本表示-下
文本表示-下
83 0
文本表示-下
|
前端开发 数据可视化 开发者
文本 | 学习笔记
快速学习文本
81 0
文本 | 学习笔记
|
前端开发 开发者
多行文本| 学习笔记
快速学习多行文本。
118 0
多行文本| 学习笔记
html+css实战51-字体和文本样式
html+css实战51-字体和文本样式
86 0
html+css实战51-字体和文本样式
|
Web App开发 移动开发 开发者
文本效果|学习笔记
快速学习文本效果
|
Linux 开发工具 git
文本查看命令 | 学习笔记
快速学习文本查看命令。
143 0
|
前端开发 程序员 开发者
文本阴影 | 学习笔记
快速学习文本阴影。
111 0
|
机器学习/深度学习 编解码 自然语言处理
《莎士比亚》文本生成
这篇文章我是基于一个博主文章改造的,但是这个博主有些方面没有说的很清楚,也可能是我比较愚昧的,所以关键的地方我都加了注释,让大家都知道,要想训练一个rnn,到底怎么组织输入,怎么利用输出(当然了,这是基于tensorflow,不同的框架可能有不同)。
925 0