词袋模型(bag-of-words)学习记录 2020-12

词袋模型的概念

词袋(Bag-of-words)是描述文档中单词出现的文本的一种表示形式。它涉及两个方面:

1.已知词汇的集合。

2.测试已知单词的存在。

因为文档中单词是以没有逻辑的顺序的放置,所以称为单词的“袋子”。该模型只关注文档中是否出现已知的单词,并不关注文档中的出现的单词。

词袋模型的例子

一个词袋(bag-of-words)模型的例子。

步骤1:收集数据

以下是Gutenberg项目中Charles Dickens的《双城记》一书中的前几行文字。

“It was the best of times,

it was the worst of times,

it was the age of wisdom,

it was the age of foolishness,”

对于这个小示例,我们将每一行视为一个单独的“文档”,将4行视为整个文档。

步骤2:设计词汇

现在我们可以列出我们的模型词汇表中的所有单词:

•“it”

•“was”

•“the”

•“best”

•“of”

•“times”

•“worst”

•“age”

•“wisdom”

•“foolishness”

这是一个由包括24个词组成的语料库中其中包含10个词汇。

步骤3:创建文档向量

下一步是在每个文档中记录单词。目的是将自由文本的每个文档转换为一个文本向量,这样我们就可以将其用作机器学习模型的输入或输出。

因为我们知道词汇有10,所以我们可以使用固定长度为10的文档,来表示向量中的每一个单词的位置。

最简单的设计方法是将单词的存在标记为布尔值,0表示缺席,1表示存在。使用我们的词汇表中列出的任意顺序排列,我们可以通过第一个文档(“It was the best of times”),并将其转换为二进制向量。

该文件的评分如下所示:

·“it” = 1

·“was” = 1

·“the” = 1

·“best” = 1

·“of” = 1

·“times” = 1

·“worst” = 0

·“age” = 0

·“wisdom” = 0

·“foolishness” = 0

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

在这里插入图片描述
其他三份文档如下:

在这里插入图片描述

这些传统的文档式词的所有排序都被丢弃了,我们可以用这种通用的方法来从我们语料库中的任何文档来提取特征,进而可以用于建模。但可能包含新的词汇,但仍然可以进行编码,其中只有已知单词的出现被统计,而未知单词将被忽略。

你可以想到这种方式将如何自然的扩展到更大型的文档。

词汇管理

随着词汇量的增加,文档的向量表示也将随之增加。在前面的示例中,文档向量的长度等于已知单词的数量。你可以想象,对于一个非常大的语料库,比如成千上万的词汇量,向量的长度可能达到成千上万。此外,每个单一的文档可能包含词汇中已知的词汇量很少。

这就产生了很多零向量,称为稀疏向量(sparse vector)或稀疏表示(sparse representation)。

稀疏向量在建模时需要更多的内存和计算资源,大量的位置或维度使建模过程使用传统算法非常具有挑战性。

因此,当使用词袋(bag-of-words)模型时可以迫使其减小词汇量的大小。

当然,也有一些简单的文本清理技术可以作为第一步,如:

•忽视案例。

•忽略标点符号。

•忽略没有太多信息的频繁单词(又被称为停止词),如“a”,“of”等。

•修正拼错的单词。

•使用词干算法减少词语(例如“播放”)。

一种更复杂的方法是创建分组单词的词汇表。这两者都改变了词汇表的范围,并允许词袋(bag-of-words)从文档中获取更多的意义。

在这种方法中,每个单词或标记被称为“gram”。创建两个词对的词汇又被称为二元模型(bigarm)。再次,只有出现在语料库中的bigarm,而非所有的bigram都能被称为二元模型。

一个N-gram是一个N符号的单词序列:一个2-gram(更常称为二进制)是一个两个字的序列,如“please turn”,“turn your”或“your homework”,一个3-gram(更通常称为三元组)是一个三个字的序列,如“please turn your”或“turn your homework”。—语音和语言处理,2009。

例如,上一模块的第一行文字中的2-gram:“It was the best of time”如下:

•“it was”

•“was the”

•“the best”

•“best of”

•“of time”

•然后,词汇跟踪三元组的单词称为三元模型,通用方法称为n-gram模型,其中n表示分组单词的数量。

通常,简单的二元组方法比用于文档分类的任务的1-gram 词袋(bag-of-words)模型简单的多。

“一个bag-of-bigrams表示比词袋(bag-of-words)更强大,在许多情况下该观点难以被推翻。”-,自然语言处理中的神经网络方法,2017。

词的统计

一旦选择了词汇表,就需要对示例文档中的单词进行统计。在上面的例子中,我们已经看到一个非常简单的评分方法:用二进制来表示单词的存在或不存在。

其他一些的简单评分方法包括:

•计数:计算每个单词在文档中出现的次数。

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

(1)散列词(WordHashing)

从计算机科学来看,一个哈希函数是将数据映射到一个固定大小的数字的数学。例如,我们在哈希表中使用它们,在编程时,可能会将名称转换为数字,以便快速查找。

我们可以在我们的词汇表中使用已知单词的散列表示。这解决了对大型文本语料库非常大的问题,因为我们可以选择散列空间的大小,也可以完成文档的向量表示。

在目标散列空间中,对相同的整数索引进行散列处理。然后可以用二进制的分数或计数来得分。

这被称为“哈希技巧(hash trick)”或“特征散列(feature hashing)”。而其所面对的挑战在于选择一个散列空间来容纳所选的词汇表大小,将冲突的可能性和交换的稀疏性最小化。

(2)TF-IDF

词频统计的问题是,在整片文档中的高频率单词虽然占主导地位,但是可能只是在特定领域的单词包含着少量信息内容,整体不会包含很多的“信息内容”。

一种方法是通过在所有文档中单词出现的频率来重新调整单词出现的频率,以便对所有文档中频繁出现的频繁单词(如the)的分数带来坏的影响。

这种统计方法称为术语频率 - 逆文档频率,简称为TF-IDF,其中:

•术语频率:是本文档中单词频率的得分。

•逆文档频率:是在文档中罕见单词的得分。

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

“因此,一个罕见的术语的idf是高的,而一个频繁的术语的idf可能很低。”——“信息检索简介”,2008年。

词袋(Bag-of-words)的限制

词袋(Bag-of-words)模型非常易于理解和实施,并为定制特定的文本数据提供了很大的灵活性。

它在语言建模和文档分类等预测问题上取得了很大的成功。

然而,它有一些缺点,比如:

•词汇:词汇需要仔细的设计,特别是为了管理文档的大小,这会影响文档表示的稀疏性。

•稀疏性:由于计算的原因(空间和时间复杂性)以及信息的原因,稀疏表示更难模拟,因为模型在如此庞大的代表空间中利用这么少的信息面临着巨大挑战。

•含义:丢弃词序忽略了上下文,进而又影响在文档中的词语的意义(语义)。上下文和意义可以提供很多模型,如果模型可以区分相同的单词不同的排列(“这是有趣的”vs“这是有趣的”),同义词(“旧自行车”vs“二手自行车”)。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值