机器学习中的词袋 (BoW) 模型

2025年2月3日 | 阅读10分钟

什么是词袋模型?

词袋模型 (BoW) 是自然语言处理 (NLP) 领域使用的复杂文本建模方法。共现矩阵是一种用于文本数据的特征提取方法,它提供了一种相对简单灵活的方式来从文档中获取特征。

BoW 模型处理文本时,会通过关注文档中词语的频率来存储记录。它用于计算常规词语的出现次数,而忽略语法上的特殊性以及词语在句子中的位置。

在此模型中,词语被放入一个“袋子”里,这意味着词语的组织和顺序不被考虑。该方法还侧重于词语及其在给定文档中的重要性,以及它们重复出现的频率。

为什么使用 BoW 算法?

令人难以置信的是,我们可能需要这种算法来处理生活中经常遇到的如此普通的文本。文本数据面临着显著的挑战:数据完全是非结构化的,而所需的输入是结构化的、明确定义的且长度固定的。

BoW 技术在此是恰当的,因为它将可变长度的文本转换为固定长度的向量。更具体地说,机器学习模型处理的是数字,而不是字符串或文本;因此,文本首先被转换为数字。因此,BoW 技术将文本转换为相似的数值向量,以便于在机器学习算法中使用。

BoW 用在哪里?

词袋模型或 BoW 常用于信息检索和自然语言处理。此外,它最适合于文档分类等方法,其中词语的频率在特征空间中用于构建分类器。

BoW 模型也用于计算机视觉。更实际的应用是特征生成。这种处理文本并将其转换为“词袋”的方式有助于计算表征文本的数值。BoW 模型产生的最重要和最典型的概念是词频 (Term Frequency),它量化了一个词语在文档中出现的频率。单独来看,词频并不是文本的最佳表征;然而,它在电子邮件过滤等应用领域是有效的。

然而,词频会成为一个问题,因为文档中高频出现的词语的重要性会被夸大。解决这个问题的一种标准技术是使用逆文档频率 (Inverse Document Frequency) 对词语进行加权,从而对词频进行归一化。类似地,对于分类任务,监督算法能够考虑到所检查文档的类别标签。因此,二元加权是处理这些困难的另一种方法。

BoW 如何工作?我们如何实现它?

以下是实现词袋 (BoW) 模型涉及的步骤:

预处理数据

  • 将所有文本转换为小写,以提高合规性。
  • 为了清理文本,排除所有非词语的字符,尤其是所有标点符号。

查找常用词

  • 必须确定文档中每个词语的频率来定义词汇表。
  • 将每个句子拆分成词语列表,并找出列表中每个词语重复出现的次数。

构建模型

  • 构建一个向量来决定一个词语是否是频繁词语。如果一个词语在给定的文本中频繁出现,那么它的值就应为 1,而如果它不常出现,则应为 0。

这个过程有助于将文本转换为可用于 NLP 过程中不同操作的数字。

通过示例理解 BoW 模型

让我们通过一个例子来更好地理解词袋 (BoW) 模型

1. 数据收集: 考虑以下句子作为要向量化的单独文档

狗吠了

狗在晚上吠叫

狗在晚上大声吠叫

2. 确定词汇表: 词汇表是文档中出现的所有离散词语的集合。对于这些句子,词汇表是:["the", "dog", "barked", "at", "night", "loudly"]。

3. 计数: 向量化过程意味着词汇表中每个词语在给定文档中的出现次数都会被计算

文档thedogbarkedatnightloudly
狗吠了111000
狗在晚上吠叫011110
狗在晚上大声吠叫111111

BoW 向量表示文档中词语的存在和数量,而不考虑词语的上下文或顺序。

狗吠了: [1, 1, 1, 0, 0, 0]

狗在晚上吠叫: [0, 1, 1, 1, 1, 0]

狗在晚上大声吠叫: [1, 1, 1, 1, 1, 1]。

4. 管理词汇表: 词汇表越大,向量表示的长度就越长。对于大型文档,向量可能会变得非常长,并且包含大量零值。

为了管理词汇表的大小,常见的做法包括:

  • 忽略标点符号
  • 纠正拼写错误
  • 停用词(例如,“a”和“of”):可以通过消除停用词来执行简单的预处理技术,以减少维度。通过移除这些常见但信息量较低的词语,可以显著缩小向量的尺寸,提高效率。

5. 词语评分: 评分过程是指为词语的出现分配数值。在上例中,计数被简化为二元值,表示任何给定词语的出现 (1) 或不存在 (0)。其他评分方法包括:

  • 计数: 具体功能包括计算词语频率,以确定特定词语在文档中使用了多少次。
  • 频率: 将该词语的频率除以文档中的总词语数。
  • 通过上述说明,您可以遵循词袋模型,将文本数据转换为数值向量,用于各种 NLP 应用。

什么是 TF-IDF?

词频-逆文档频率 (Tf-Idf) 是一个数学值,旨在显示一个词语在一个文档中使用的频率,同时考虑该词语相对于整个文档库的出现频率。

词频 (TF):告诉你一个词语在文档中出现了多少次。

逆文档频率 (IDF):计算词语的相关性,为频繁使用的词语赋予较低的权重,但为很少使用但有影响力的词语赋予更高的权重。

IDF 值很重要,因为仅计算 TF 在许多文档中不足以衡量词语的相关性。

BoW 与 Tf-Idf

词袋 (BoW) 模型与 Tf-Idf 之间的主要区别在于:

  • BoW: 生成包含文档中词语计数的向量,而不考虑词语的重要性。
  • Tf-Idf: 优先考虑词语,并根据这些词语在文档中出现的频率区分重要词语和不太重要的词语。

BoW 向量易于理解和解释,但 Tf-Idf 在模型中通常表现出更好的结果,尤其是在机器学习模型中,尽管其解释可能有点复杂。

BoW 的优点

  1. 易于计算: BoW 模型非常容易计算,使用二元法时,计算甚至更容易。此方法要么将文档归类到某个主题,要么不归类,这使其简单且适合初步分析。
  2. 简单性: 它更灵活、易于使用和实现,因此适合仅用于构建初筛(或第一遍)模型。由于此特性,它可以作为一种快速便捷的工具,用于证明可行性或定义图形鸟(例如,简单的文本分类或聚类算法)的基本功能。
  3. 基础: 这适用于 BoW 作为更复杂系统的起点。在对文本中的词语进行初步分组,然后进行更复杂的操作(如对数据使用 Word2Vec 或 BERT)之前,它可以用作第一层。这种分步方法可能很有用,因为它消除了噪声,并随后使用了更强大的模型。

BOW 的缺点

  1. 语义含义: BoW 模型不考虑词语的重要性或意义,只考虑词语的存在以及它们出现的频率。因此,它无法区分同一个词语的潜在用法,这可能导致文本的预期信息混淆。
  2. 向量大小: BoW 模型尤其是在处理具有更多特征/词语/词汇表的大型文档时,会创建大型特征空间向量。

这会导致计算复杂度高,使文本的处理和分析更加复杂。向量通常是稀疏的,大部分条目为零,通常会导致计算困难。

这样,用户就可以根据 BoW 的优点和缺点来理解何时以及如何应用它。

使用 Python 实现 BoW

使用 Python 实现 BoW

数据预处理

  • 导入必要的模块。
  • 对句子进行分词。
  • 标点符号和空格与词语连接,所有非字母字符都转换为小写。
  • 创建用户句子列表和所需的词汇表列表。

分配词语索引

  • 设计一个词汇表索引,将每个被认为重要的词语映射到概念的定义中。

定义词袋模型的函数

  • 定义一个函数,根据上述索引字典返回给定句子的向量。

测试模型

  • 通过将示例句子转换为其向量形式,然后打印该向量来检查模型的运行能力。

代码

输出

[1. 1. 2. 1. 1. 0. 0. 0. 0. 0. 0. 0.]

说明

下面提供的代码表示 Python 中的词袋 (BoW) 模型。最初,它导入了一些必需的包,并将文本数据语料库分割成词语,将所有词语转换为小写并去除标点符号。然后,它构建词汇表列表,并为词汇表中的每个词语分配索引。bag_of_words 函数为给定的输入句子创建一个向量,并将句子中的词语计数分配给词汇表中的索引。最后,通过将示例句子转换为特征向量并显示它来评估模型。此过程有助于将文本数据转换为某种形式的数值,如果原始数据需要分析或用于机器学习算法,则非常有用。

BoW 的实际应用

情绪分析

BoW 是另一种标准的文本数据预处理方法,主要用于情感分析。情感分析旨在揭示文本数据作者想要传达的情感,这可能对根据这些情感做出决策非常有利,例如在产品评论或社交媒体帖子的情况下。文本消息中的词语频率决定了机器学习模型将情感识别为积极、消极或中性。

  1. 垃圾邮件检测
    在垃圾邮件检测中,BoW 有助于确定垃圾邮件中可能经常出现的词语的频率。有人推测,像“免费”、“中奖”和“奖品”这样的词语在垃圾邮件中出现的频率可能高于非垃圾邮件。因此,通过识别这些频率模式,模型可以检测电子邮件是否为垃圾邮件,从而帮助增强电子邮件过滤服务。
  2. 文档分类
    BoW 在分类问题中表现良好,可以将文档分类到已定义的类别中。例如,在新闻分类中,可以仅通过考虑特定领域词语的出现次数,将文章分为体育、政治、娱乐等类别。然后,这些 BoW 向量被用作朴素贝叶斯、SVM 或逻辑回归等分类器的特征。
  3. 文档分类
    因此,BoW 在文档分类中表现良好,文档属于已定义的类别。例如,在新闻分类中,文章可以根据特定领域词语的频率分为体育、政治、娱乐和其他类别。BoW 向量可以用作朴素贝叶斯、SVM 或逻辑回归等分类器的输入特征。
  4. 主题建模
    BoW 也用于从一组文档中识别潜在主题,尤其是在主题建模中。BoW 与潜在狄利克雷分配 (LDA) 等技术相结合,通过分析词语模式来形成文档,从而根据主题对文档进行分组。此应用程序有助于筛选大量文本文档,例如研究论文或网络文章,按主题进行排序。

这些示例说明了 BoW 模型如何在将文本转换为数值形式以用于各种 NLP 应用和改进 ML 任务方面非常有用。