词袋模型是一种为了使用机器学习算法处理文本对文本建模表示文本数据的方法。词袋模型易于理解和实现,并且在语言建模和文档分类等问题上取得了巨大成功。在本教程中,您将学到用于自然语言处理中的特征提取的词袋模型。完成本教程后,您将了解:

  • 词袋模型是什么以及为什么需要用词袋模型来表示文本。
  • 如何为一组文档开发一个词袋模型。
  • 如何使用不同的技巧来准备词汇和计算每个词的分值

5.1 教程概述

本教程分为以下几部分:

  1. 文本问题
  2. 什么是字袋?
  3. 词袋模型的例子
  4. 管理词汇
  5. 计算每个词的分值
  6. 词袋的局限性

5.2 文本问题

建模文本的一个问题是它很乱,机器学习算法等技术更喜欢定义明确的固定长度输入和输出。机器学习算法不能直接使用原始文本;文本必须转换为数字。具体而言,是数字的向量。

在语言处理中,向量x从文本数据导出,以反映文本的各种语言属性。

  • 65页,自然语言处理中的神经网络方法,2017年。

这称为特征提取或特征编码。文本数据进行特征提取的一种流行且简单的方法称为词袋模型。

 

5.3 什么是袋?

词袋模型(简称BoW)是一种从文本中提取特征以用于机器处理的建模方法,这方法非常简单和灵活,并且可以采取多种方式从文档中提取特征。词袋是文本的表示,用于描述文档中单词的出现它涉及两件事:

  • 已知单词的词汇。
  • 衡量已知单词的存在。

它被称为词袋,因为有关文档中单词的顺序或结构的任何信息都将被丢弃。该模型仅关注文档中是否出现已知单词,而不是文档中的位置。

句子和文档的一个非常常见的特征提取过程是词袋方法(BOW)。在这种方法中,我们查看文本中单词的直方图,即将每个单词计数视为一个特征。

  • 69页,自然语言处理中的神经网络方法,2017年。

直觉是如果文档具有相似的内容,则文档是相似的。此外,仅从内容中我们可以了解文档的含义。这个词袋可以像你想的那样简单或复杂。复杂性在于决定如何设计已知单词(或标记)的词汇以及如何对已知单词的存在进行评分。我们将仔细研究这两个问题。

5.4 词袋模型的例子

让我们用一个具体例来看看如何构造文本的词袋模型。

5.4.1 1步:收集数据

下面是查尔斯·狄更斯(Charles Dickens)的双城记The Tale of Two Cities)中的前几行文本片段,摘自Project Gutenberg

It was the best of times,

it was the worst of times,

it was the age of wisdom,

it was the age of foolishness,

代码清单5.1Charles Dickens双城记中的文本样本。

对于这个小例子,让我们将每一行视为一个单独的文档,将4行视为我们的整个文档集。

5.4.2 2步:设计词汇表

现在我们可以列出模型词汇表中的所有单词。这里的独特单词(忽略大小写和标点符号)是:

it

was

the

best

of

times

worst

age

wisdom

foolishness

代码清单5.2:唯一单词列表

这是一个包含24个单词的语料库中10个单词的词汇。

5.4.3 3步:创建文档向量

下一步是对每个文档中的单词进行评分目标是将每个自由文本文档转换为一个向量,我们可以将其用作机器学习模型的输入或输出。词汇表有10个单词,所以使用10的固定长度来表示文档,在向量中有一个位置来对每个单词进行评分。最简单的评分方法是将单词的存在标记为布尔值,0表示没有这个单词,1表示有这个单词。使用我们词汇表中上面列出的单词的任意排序,我们可以逐步浏览第一个文档(这是最好的时间)并将其转换为二进制向量。该文件的评分如下:

it = 1

was = 1

the = 1

best = 1

of = 1

times = 1

worst = 0

age = 0

wisdom = 0

foolishness = 0

代码清单5.3:文档中唯一单词及其出现的列表

作为二进制向量,这将如下所示:

[1, 1, 1, 1, 1, 1, 0, 0, 0, 0]

代码清单5.4:作为二进制向量的第一行文本

其他三份文件如下:

"it was the worst of times" = [1, 1, 1, 0, 1, 1, 1, 0, 0, 0]

"it was the age of wisdom" = [1, 1, 1, 0, 1, 0, 0, 1, 1, 0]

"it was the age of foolishness" = [1, 1, 1, 0, 1, 0, 0, 1, 0, 1]

代码清单5.5:将三行文本作为二进制向量保留。

从上面的表示结果看,所有单词的排序都被丢弃了,我们使用这个方法从我们语料库中的任何文档中提取特征,用于构建机器学习建模。我们面对的文档肯定不是一层不变的,新文档中会包好词汇表中单词,但是也会包含不在词汇表中的单词,已知单词使用原有的词汇表很容易就编码了,而词汇表中没有的单词会被忽略掉。扩展词汇表适应新文档就是一个必须面对的工作了。

5.5 管理词汇

随着词汇量的增加,文档的向量表示也会增加。在前面的示例中,文档向量的长度等于已知单词的数量。你可以想象,对于一个非常大的语料库,例如数千本书,矢量的长度可能是数千或数百万个位置。此外,每个文档也只仅仅使用了词汇表中很少的单词。

这导致具有许多零分数的向量,称为稀疏向量或稀疏表示。稀疏向量在建模时需要更多的存储器和计算资源,对于传统算法大量数据维度使建模过程非常具有挑战性。因此,当使用词袋模型时,存在减小词汇量的压力。

有一些简单的文本清理技术可用作第一步,例如:

  • 无视案例。
  • 忽略标点符号。
  • 忽略不包含太多信息的常用词,称为停止词,如aof等。
  • 修复拼写错误的单词。
  • 使用词干算法将单词减少到词干(例如,播放)。

更复杂的方法是创建分组词的词汇表。这既改变了词汇表的范围,又允许词袋从文档中捕获更多的含义。在这种方法中,每个单词或标记称为gram反过来,创建双字对词汇表称为二元组模型只有出现在语料库中的二元词组被建模,而不是所有可能的二元词组。

n-gram是一个n-token单词序列:2-gram(通常称为bigram)是一个双字序列,如please turnturn youryour homework,一个3-gram通常称为三元音)是一个三字词序列,如please turn your,turn your homework

  • 85页,语音和语言处理,2009年。

例如,上一节文本第一行中的二元词组:

it was

was the

the best

best of

of times

代码清单5.6:文档的二进制文件列表

把每三个词在记录在一起作为一个原子词的词汇表称为三元组模型,一般方法称为n-gram模型,其中n表示分组单词的数量。对于像文档分类这样的任务,通常一个简单的二元组方法比1-gram词袋模型更好。

二元词袋模型一元词袋模型表示能力更强大,这个在很多应用场合都给出非常好的证明

  • 75页,自然语言处理中的神经网络方法,2017年。

5.6 词评分(如何在词汇表中表示该词存在与否)

一旦选择了词汇表,就需要对示例文档中单词的出现进行评分。在上面示例中,我们已经看到了一种非常简单的评分方法:对单词存在与否的二进制表示当然还有其他一些额外的简单评分方法包括:

  • 数。计算每个单词在文档中出现的次数。
  • 率。计算文档中所有单词中每个单词出现在文档中的频率。

5.6.1 字哈希

您可能还记得计算机科学中的哈希函数是一种将数据映射到固定大小的数字集的数学运算。例如,我们在编程时在哈希表中使用它们,其中可能将名称转换为数字以进行快速查找。我们可以在词汇表中使用已知单词的哈希表示。这解决了对于大文本语料库具有非常大的词汇表的问题,因为我们可以选择哈希空间的大小,该大小又是文档的向量表示的大小。

单词被确定性地散列到目标散列空间中的相同整数索引。然后可以使用二进制分数或计数来对单词进行评分。这称为散列技巧或特征散列。挑战在于选择一个哈希空间来容纳所选择的词汇量大小,以最小化冲突和合理的稀疏性的之间做一个权衡。

5.6.2 TF-IDF

对单词频率进行评分的问题在于,高频率词在文档中占主导地位(例如,得分较高),但可能没什么意义很多文档的内容往往是由一些频率适中的词表述出来的。一种方法是通过它们在所有文档中出现的频率来重新调整单词的频率,使得在所有文档中频繁出现的频繁单词的分数也会受到惩罚。这种评分方法称为术语频率 - 反向文档频率,或简称为TF-IDF,其中:

  • Term Frequency:是当前文档中单词频率的得分。
  • Inverse Document Frequency:是对文档中单词的罕见程度的评分。

分数是一个权重,并非所有单词都同样重要或有趣。分数具有突出显示给定文档中不同(包含有用信息)单词的效果。

因此,罕见术语的idf很高,而常用术语的idf可能很低。

  • 118页,信息检索简介,2008年。

5.7 词袋的局限性

词袋模型非常易于理解和实现,并为您的特定文本数据提供了很大的灵活性。它在语言建模和文档分类等预测问题上取得了巨大成功。然而,它有一些缺点,例如:

  • 汇:词汇表需要精心设计,最重要的是为了管理大小,这会影响文档表示的稀疏性。
  • 疏性:由于计算原因(空间和时间复杂性)以及信息原因,稀疏表示更难以建模,其中挑战是模型在如此大的代表空间中如何利用如此少的信息。
  • 义:丢弃单词顺序忽略了上下文,而忽略了文档中单词的含义(语义)。上下文和意义可以为模型提供很多东西,如果建模可以告诉不同排列的相同单词之间的差异(this is interesting vs is this interesting),同义词(old bike vs used bike)等等。

0 条 查看最新 评论

没有评论
暂时无法发表评论