词袋模型的通俗介绍

简介: 作者在文章中用浅显的语言介绍了词袋模型是什么、存在的意义是什么等问题,内容丰富,思路清晰,浅显易懂,但又不失文章所述内容的专业性、技术性,值得一读。

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


所谓的词袋(Bag-of-words)模型是一种用机器学习算法对文本进行建模时表示文本数据的方法。

在本教程中,你将了解到自然语言处理中的特征抽取方法。

完成本教程后,你将知道:

1.什么是词袋(Bag-of-words)模型,以及为什么需要用它来表示文本。

2.如何为一组文档开发一个词袋(Bag-of-word)模型。

3.如何使用不同的技术准备词汇和单词。

e2c27c65f131ab117dec5322b9a96e8ff3dc035e

教程概述

本教程分为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》

作者:Jason Brownlee  

译者:乌拉乌拉,审校:袁虎。

文章为简译,更为详细的内容,请查看原文文章。

相关文章
|
API 开发工具 数据安全/隐私保护
蚂蚁开放平台 ✖️ 授权管理
为保障数据安全,开放平台要求开发者调用能力时使用有效令牌(token)进行身份验证。请勿泄露或暴露令牌信息。开发者可登录平台添加、复制、删除或切换令牌状态,调用时需将token添加至请求头Authorization参数。每种类型令牌最多10个。
696 0
|
9月前
|
人工智能 数据可视化 API
2026年新手阿里云快速部署OpenClaw(Clawdbot)接入 Slack 实现高效协同教程
在AI智能体加速普及的2026年,OpenClaw(原Clawdbot,曾用名MoltBot)凭借开源灵活、多场景适配的核心优势,成为个人与轻量团队提升效率的首选工具。其不仅支持文件处理、任务自动化、代码辅助等基础功能,更可无缝对接Slack等协同工具,实现“指令直达、响应即时”的高效协作模式。阿里云专为OpenClaw优化的一键部署方案,彻底打破了传统部署的技术壁垒,依托预置专属镜像,无需手动配置依赖、调试环境,全程可视化操作,20分钟即可完成从部署到接入Slack的全流程,所有运行任务依托阿里云云端算力,本地设备仅作为交互终端,真正实现“零门槛上手、高稳定运行”。
447 1
|
10月前
|
机器学习/深度学习 算法 数据可视化
基于YOLOv8+pyqt5的pcb缺陷检测系统
针对电子制造中PCB缺陷检测难题,本研究提出基于YOLOv8与PyQt5的智能检测系统。融合深度学习高精度识别与图形界面友好交互,实现短路、断路等微小缺陷的高效、自动化检测,提升检测精度与效率,降低企业成本,推动电子制造向智能化、低成本化发展。
|
机器学习/深度学习 人工智能 自然语言处理
《AI大模型技术全景解读》从机器学习到现代大模型
人工智能历经从机器学习到深度学习的演进,以Transformer架构为里程碑,推动大模型时代到来。技术发展涵盖CNN、RNN、BERT、GPT等核心模型,逐步实现语言理解、生成与多模态能力突破,正朝高效推理、安全对齐与普惠应用迈进。(238字)
|
机器学习/深度学习 存储 数据可视化
Vision Transformer中的图像块嵌入详解:线性投影和二维卷积的数学原理与代码实现
本文详细介绍了 Vision Transformer 中图像块嵌入的实现过程,结合理论与代码示例,帮助读者深入理解这一关键机制。
774 8
Vision Transformer中的图像块嵌入详解:线性投影和二维卷积的数学原理与代码实现
|
机器学习/深度学习 算法 安全
从方向导数到梯度:深度学习中的关键数学概念详解
方向导数衡量函数在特定方向上的变化率,其值可通过梯度与方向向量的点积或构造辅助函数求得。梯度则是由偏导数组成的向量,指向函数值增长最快的方向,其模长等于最速上升方向上的方向导数。这两者的关系在多维函数分析中至关重要,广泛应用于优化算法等领域。
2519 36
从方向导数到梯度:深度学习中的关键数学概念详解
|
自然语言处理 JavaScript 前端开发
聊聊什么是 i18n?JavaScript 中的 i18n 基本概念
聊聊什么是 i18n?JavaScript 中的 i18n 基本概念
2745 1
|
开发工具 Docker 容器
Docker 镜像加速器配置指南
dockerhub加速器失败,使用第三方加速器
|
机器学习/深度学习 PyTorch 算法框架/工具
详解三种常用标准化Batch Norm & Layer Norm & RMSNorm
通过本文的介绍,希望您能够深入理解Batch Norm、Layer Norm和RMSNorm的原理和实现,并在实际应用中灵活选择和使用,提升深度学习模型的性能和稳定性。
4943 5
|
算法 搜索推荐 小程序
智慧医院导航系统,技术引领就医流程优化
【摘要】智慧医院导航系统解决患者寻路难题,提高就医效率。政府政策支持导航服务纳入智慧医院标准,系统包括来院规划、院内精准定位、AR实景导航和全程导诊功能,减少患者等待时间,减轻导医台压力,促进医院信息化建设。
986 2
智慧医院导航系统,技术引领就医流程优化

热门文章

最新文章