购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 词向量离散表示

2.2.1 独热编码

独热编码(One-Hot Encoding),又被称为有效编码,其方法是使用N为状态寄存器来对多个状态进行编码,每个状态都有独立的寄存器位,并且只有一个有效位。独热编码也可以用来表示词向量,即每个单词使用一个长度为 N 的向量表示, N 表示语料库中单词的数量。假设我们有如表2.1所示的单词的语料库。

表2.1 单词的语料库

上述语料库中组成不重复的词典一共包含4个词语,分别为“橘子”“苹果”“葡萄”“香蕉”。根据独热编码的表示方式,我们可以用4位的向量表示每个词语,单词的独热编码表示如表2.2所示。

表2.2 单词的独热编码表示

词向量的独热编码表示比较简单,但是也有很多问题。当在语料库中加入新词时,整个向量的长度会改变,并且存在维数过高难以计算,以及向量的表示方法很难体现词与词之间的语义关系的问题。

2.2.2 词袋模型

独热编码表示只考虑使用0和1对词语进行表示,而词袋模型(Bag Of Words,BOW)需要考虑词语出现的频数。词袋模型将所有词语装进一个袋子里,不考虑其词法和语序,即每个词语都是独立的,对每个单词进行统计,同时计算每个单词出现的次数。

在如表2.1所示的语料库中,4个词语可以构成这样一个词典:“橘子”“苹果”“葡萄”“香蕉”。它们的编号为0、1、2、3。词典的长度为4,我们可以用一个4维的独热编码表示每个词语。词袋模型则把文本当成一个由词语组成的袋子,记录句子中包含各个词语的频数,则表2.1中语料库的文本对应的词袋模型如表2.3所示。

表2.3 语料库的文本对应的词袋模型

表2.3中的数字表示单词在句子中出现的次数,比如数字“2”表示苹果在句子2中出现了两次。上述例子中只有4个句子,词典的大小是4。当语料库很大时,词典的大小可以是几千甚至几万,这样大维度的向量,计算机很难去计算。此外,词袋模型忽略了词序信息,对语义理解来讲是丢失了重要信息。最后,词袋模型会造成语义鸿沟现象,即两个表达意思很接近的文本的文本向量差距很大。

2.2.3 词频-逆文本频率

词频-逆文本频率(Term Frequency-Inverse Document Frequency,TF-IDF)是一种用于信息检索与数据挖掘的常用加权技术,常用于挖掘文章中的关键词。

词频(Term Frequency,TF)指某一给定词语在当前文件中出现的频率。由于同一个词语在长文件中可能比短文件有更高的词频,因此需要根据文件的长度对给定词语进行归一化,即用给定词语的数量除以当前文件的总词数。

逆文件频率(Inverse Document Frequency,IDF)是一个词语普遍重要性的度量,即如果一个词语只在很少的文件中出现,表示它更能代表文件的主旨,它的权重也就越大;如果一个词在大量文件中都出现,表示不清楚它代表什么内容,它的权重就应该小。

TF-IDF的主要思想是,如果某个词语在一篇文章中出现的频率高,并且在其他文章中较少出现,则认为该词语能较好地代表当前文章的含义,即一个词语的重要性与它在文档中出现的次数成正比例,与它在语料库中文档出现的频率成反比例。式(2.1)~式(2.3)给出了TF-IDF的计算过程。

从TF-IDF的计算公式可以看出,如果一个单词在句子中出现的频率越高,说明该单词的权重越高,而如果该单词在正片语料库中出现的频率都很高,则说明该单词是一个普遍性的词语,这表示该单词在句子中的权重就降低了。

2.2.4 案例实现——文本离散表示

1.实验目标

(1)理解独热编码的实现原理。

(2)掌握词袋模型的实现方法。

(3)掌握词频-逆文本频率的实现方法。

2.实验环境

实验环境如表2.4所示。

表2.4 实验环境

3.实验环境

该项目由3个代码组成,分别为onehot.py、bow.py、tfidf.py。接下来分别解释3个代码的具体功能。

(1)onehot.py实现独热编码,具体功能是根据输入数据输出指定数字的独热编码,输入数据共3列,每一列表示不同的特征及取值范围,程序输出结果为数字0、1、3的独热编码。

(2)bow.py实现词袋模型,具体功能是输出语料库中每个句子对应的词袋模型的表示。

(3)tfidf.py实现TF-IDF模型,具体功能是输出语料库中每个句子对应的TF-IDF的表示。

分别创建onehot.py、bow.py、tfidf.py源码文件,实验目录如图2.3所示。

图2.3 实验目录

按照如下步骤分别编写代码。

(1)完成onehot.py代码编写,实现独热编码操作。

步骤一:导入模块

步骤二:调用独热编码,拟合训练数据

步骤三:将结果转化为数组,并打印显示

步骤四:运行代码

使用如下命令运行代码onehot.py。

运行的结果如下所示:

从运行结果可以看出,前两个数字(1.0.)表示数字0的独热编码;中间3个数字(0.1.0.)表示数字1的独热编码;后4个数字(0.0.0.1.)表示数字3的独热编码。

(2)完成bow.py代码编写,实现词袋模型编码操作。

步骤一:导入模块

步骤二:加载语料库

步骤三:文本向量化表示

步骤四:打印结果

步骤五:运行代码

使用如下命令运行代码bow.py。

运行的结果如下所示。

从运行结果可以看出,第一行打印信息表示语料库构建的词汇表,第二行打印信息表示每个句子对应的词袋模型表示。

(3)完成tfidf.py代码编写,实现词袋模型编码操作。

步骤一:导入模块

步骤二:加载语料库

步骤三:文本向量化表示

步骤四:打印结果

步骤五:运行代码

使用如下命令运行代码tfidf.py。

运行的结果如下所示:

从运行结果可以看出,第一行打印信息表示语料库构建的词汇表,第二行打印信息表示每个句子对应的TF-IDF模型表示。 j6Lc6xW88FKE5i7vqDLQWjE1AxBWJQce02F2SJS++KI4IjmWVi8OgYw44KTpB4MI

点击中间区域
呼出菜单
上一章
目录
下一章
×