更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud
所谓的词袋(Bag-of-words)模型是一种用机器学习算法对文本进行建模时表示文本数据的方法。
在本教程中,你将了解到自然语言处理中的特征抽取方法。
完成本教程后,你将知道:
1.什么是词袋(Bag-of-words)模型,以及为什么需要用它来表示文本。
2.如何为一组文档开发一个词袋(Bag-of-word)模型。
3.如何使用不同的技术准备词汇和单词。
教程概述
本教程分为6部分; 它们是:
1ã 文本问题。
2ã 什么是词袋(Bag-of-Words)?
3ã Bag-of-Words模型的例子。
4ã 管理词汇(managing vocabulary)。
5ã 得分词(scoring words)
6ã 词袋(Bag-of-Words)的局限。
1、文本问题
机器学习这样的技术比较喜欢被定义好的固定长度的输入和输出,因此不固定输入输出是文本建模的一个问题。
机器学习算法不能直接处理原始文本,文本必须转换成数字。具体来说,是数字的向量。
“在语言处理中,向量x是由文本数据派生而来的,以反映文本的各种语言属性。”在自然语言处理中神经网络方法,2017年。
这被称为特征提取或特征编码。这是一种流行的、简单的文本数据提取方法被称为文本的词汇模型。
2、什么是词袋(Bag-of-Words)?
一个简单的词袋模型(BOW),是一种使用机器学习算法。从文本中提取特征的方法。该方法非常简单和灵活,可以用于从文档中提取各种功能的各种方法。词袋(Bag-of-words)是描述文档中单词出现的文本的一种表示形式。它涉及两件方面:
1.已知词汇的集合。
2.测试已知单词的存在。
因为文档中单词是以没有逻辑的顺序的放置,所以称为单词的“袋子”。该模型只关注文档中是否出现已知的单词,并不关注文档中的出现的单词。
“bag-of-words方法(BOW)是句子和文件的一个非常常见的特征提取程序。在这种方法中,我们查看文本中单词的直方图,也就是将每个单词计数作为一个特性。”- 自然语言处理中的神经网络方法,2017。
词袋(bag-of-words)可以像你喜欢的那样简单或复杂。其复杂性在于决定如何设计已知单词(或令牌)的词汇量以及如何统计已知单词的存在。
接下来我们将仔细研究这两个问题。
3、词袋(Bag-of-Words)模型的例子
让我们用一个有效的例子来制作一个词袋(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
作为二进制向量,如下所示:
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
其他三份文档如下:
"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]
这些传统的文档式词的所有排序都被丢弃了,我们可以用这种通用的方法来从我们语料库中的任何文档来提取特征,进而可以用于建模。但可能包含新的词汇,但仍然可以进行编码,其中只有已知单词的出现被统计,而未知单词将被忽略。
你可以想到这种方式将如何自然的扩展到更大型的文档。
4、词汇管理(Managing Vocabulary)
随着词汇量的增加,文档的向量表示也将随之增加。在前面的示例中,文档向量的长度等于已知单词的数量。你可以想象,对于一个非常大的语料库,比如成千上万的词汇量,向量的长度可能达到成千上万。此外,每个单一的文档可能包含词汇中已知的词汇量很少。
这就产生了很多零向量,称为稀疏向量(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。
例如,上一节的第一行文字中的双字:“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。
5、词的统计
一旦选择了词汇表,就需要对示例文档中的单词进行统计。在上面的例子中,我们已经看到一个非常简单的评分方法:用二进制来表示单词的存在或不存在。
其他一些的简单评分方法包括:
• 计数:计算每个单词在文档中出现的次数。
• 频率:在文档中的所有单词中计算每个单词在文档中出现的频率。
(1)散列词(Word Hashing)
从计算机科学来看,一个哈希函数是将数据映射到一个固定大小的数字的数学。例如,我们在哈希表中使用它们,在编程时,可能会将名称转换为数字,以便快速查找。
我们可以在我们的词汇表中使用已知单词的散列表示。这解决了对大型文本语料库非常大的问题,因为我们可以选择散列空间的大小,也可以完成文档的向量表示。
在目标散列空间中,对相同的整数索引进行散列处理。然后可以用二进制的分数或计数来得分。
这被称为“哈希技巧(hash trick)”或“特征散列(feature hashing)”。而其所面对的挑战在于选择一个散列空间来容纳所选的词汇表大小,将冲突的可能性和交换的稀疏性最小化。
(2)TF-IDF
词频统计的问题是,在整片文档中的高频率单词虽然占主导地位,但是可能只是在特定领域的单词包含着少量信息内容,整体不会包含很多的“信息内容”。
一种方法是通过在所有文档中单词出现的频率来重新调整单词出现的频率,以便对所有文档中频繁出现的频繁单词(如the)的分数带来坏的影响。
这种统计方法称为术语频率 - 逆文档频率,简称为TF-IDF,其中:
• 术语频率:是本文档中单词频率的得分。
• 逆文档频率:是在文档中罕见单词的得分。
分数是一个权衡的结果,不是所有的词都同样重要或有用。分数具有在给定文档中突出显示不同的单词(包含有用信息)的效果。
“因此,一个罕见的术语的idf是高的,而一个频繁的术语的idf可能很低。”——“信息检索简介”,2008年。
6、词袋(Bag-of-words)的限制
词袋(Bag-of-words)模型非常易于理解和实施,并为定制特定的文本数据提供了很大的灵活性。
它在语言建模和文档分类等预测问题上取得了很大的成功。
然而,它有一些缺点,比如:
• 词汇:词汇需要仔细的设计,特别是为了管理文档的大小,这会影响文档表示的稀疏性。
• 稀疏性:由于计算的原因(空间和时间复杂性)以及信息的原因,稀疏表示更难模拟,因为模型在如此庞大的代表空间中利用这么少的信息面临着巨大挑战。
• 含义:丢弃词序忽略了上下文,进而又影响在文档中的词语的意义(语义)。上下文和意义可以提供很多模型,如果模型可以区分相同的单词不同的排列(“这是有趣的”vs“这是有趣的”),同义词(“旧自行车”vs“二手自行车”)。
相关资料:
1.维基百科上的词袋模型。
2.维基百科上的N-gram。
3.tf-idf在维基百科解释。
总结
在本教程中,你发现了使用文本数据进行特征提取的词袋模型。
具体来说,你学到了:
• 词袋模型是什么,为什么我们需要它。
• 如何通过应用一个词袋的模型来处理文档的集合。
本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。
文章原标题《A Gentle Introduction to the Bag-of-Words Model》
译者:乌拉乌拉,审校:袁虎。
文章为简译,更为详细的内容,请查看原文文章。