云计算百科
云计算领域专业知识百科平台

【LLM基础教程】文本特征表示方法入门(一):BoW

​ 语言人工智能历史始于一种名为词袋(bag-of-words)的技术,这是一种表示非结构化文本的方法 。它早在20世纪50年代就被提出,但直到2000年前后才开始流行。

  • 核心思想:将文本看作一个“词的集合”,忽略词序,只统计每个词出现的次数。

    换言之,在 BoW 模型中,句子或文档被表示为一个固定长度的向量,向量的每个维度对应词汇表(vocabulary)中的一个词,值表示该词在文本中出现的频率或次数。

一、介绍

​ 词袋模型是一种文本表示,用于描述文档中单词的出现情况。我们只跟踪单词数量,忽略语法细节和词序。之所以称之为“词袋”,是因为任何关于文档中单词顺序或结构的信息都会被丢弃。该模型只关注已知单词是否出现在文档中,而不是出现在文档的哪个位置。

在这里插入图片描述

1.1 结构化处理文本

​ 文本的最大问题之一是它混乱且非结构化,而机器学习算法更喜欢结构化、定义明确的固定长度输入,通过使用词袋技术,我们可以将可变长度的文本转换为固定长度的向量**。**

​ 此外,在更精细的层面上,机器学习模型处理的是数值数据,而不是文本数据。更具体地说,通过使用词袋(BoW)技术,我们将文本转换为其等效的数字向量。

1.2 模型特点

优点缺点
简单易实现,计算高效 完全丢失词序与上下文信息
可作为许多模型(如朴素贝叶斯、SVM)的输入特征 词汇表维度高,稀疏性强
适用于小规模文本分析、特征工程初期 无法处理同义词、多义词问题

​ 总的来说,词袋模型为文本向量化提供了最基础的形式化框架。但由于它仅仅将语言视为一个几乎字面意义上的“词袋”,而忽略了文本的语义特性和上下文含义,因此难以有效表达词与词之间的语义联系。这也成为后续 Word2Vec、Transformer 等模型提出的直接动因。

二、构建步骤

​ 词袋模型的工作原理如下:

2.1 文本表示的起点:分词(Tokenization)

分词是构建词袋模型的第一步,也是影响模型性能的重要因素。

​ 在自然语言处理中,计算机无法直接理解原始文本。分词(Tokenization) 是将文本切分成最小可处理单元(词或子词,token)的过程,是所有文本表示方法的基础步骤。

  • 举例:

​ 假设我们有两个句子需要创建数值表示。词袋模型的第一步是分词(tokenization),即将句子拆分成单个词或子词(词元,token)。最常见的分词方法是通过空格分割来把句子分割成词。然而,这种方法也有其缺点,因为某些语言(如汉语)的词之间没有空格。

在这里插入图片描述

(1) 为什么需要分词?
  • 模型的输入必须是离散的 token 序列,不能直接处理字符串。
  • 对于英语等以空格分词的语言,可直接按空格或标点切分;
  • 对于中文、日语等无显式词界的语言,需要使用分词算法(如结巴分词、BERT WordPiece、SentencePiece 等)。
(2) 常见分词方式
方法说明适用场景
Word-level Tokenization 按词切分,例如“我 喜欢 NLP” → [“我”, “喜欢”, “NLP”] 英语、经过分词的中文文本
Character-level Tokenization 按字切分,例如“我喜欢NLP” → [“我”, “喜”, “欢”, “N”, “L”, “P”] 低资源语言、字符模型
Subword Tokenization(BPE/WordPiece) 将词拆成更小的单元(如“unhappiness” → [“un”, “happy”, “ness”]) 现代大模型(如 BERT、LLaMA)常用
  • 在 BoW 模型中,分词结果决定了词汇表的构成。 不同的分词策略,会显著影响 BoW 特征空间的维度与稀疏性:
    • 分得太细 → 词汇表过大,稀疏性高;
    • 分得太粗 → 无法捕捉词义变化。

2.1 建立词汇表(Vocabulary)

​ 在分词之后,我们将每个句子中所有不同的词组合起来,创建一个可用于表示句子的词表(vocabulary)。即从语料库中提取所有不同的词,形成一个固定的词汇集合。

在这里插入图片描述

​ 使用词表,我们只需计算每个句子中词出现的次数,就创建了一个词袋。

2.2 向量化表示(Vectorization)

​ 词袋模型旨在以数字形式创建文本的表示(representation),也称为向量或向量表示。通过过计算单个词出现的次数创建词袋,这些值被称为向量表示。 在这里插入图片描述

2.3 语料库和词表

名称含义示例
corpus 原始语料库(原始文本集合) [“this is a book”, “that is a pen”]
feature_names 特征词汇表(经过分词、清洗后) [‘book’, ‘pen’, ‘this’, ‘that’]

三、BoW构建

​ 下面通过一个简单示例来说明 词袋模型(Bag of Words) 的构建过程。

  • Sentence 1: ”Welcome to Great Learning, Now start learning”

  • Sentence 2: “Learning is a good practice”

3.1 分词

Tokenization

将每个句子拆分为单词:

  • Sentence 1 → [Welcome, To, Great, Learning, Now, start, learning]
  • Sentence 2 → [learning, is, a, good, practice] 在这里插入图片描述

3.2 构建词表

Vocabulary

​ 浏览上述文本中的所有单词,并列出模型词汇表中的所有单词。

Welcome
To
Great
Learning
,
Now
start
learning
is
a
good
practice

​ 这里需要注意,“Learning” 和 “learning” 因大小写不同被视为两个不同的词,因此在词汇表中会重复出现。同时,标点符号(如逗号 “,”) 也被分词器识别为独立的 token,并被计入词袋中。

​ 因为我们知道词汇表有 12 个单词,所以我们可以使用固定长度为 12 的文档表示,并在向量中的一个位置对每个单词进行评分。

3.3 计算词频并用向量表示

​ 我们这里采用的评分方法是统计每个单词的出现次数,不存在则记为0。这种评分方法比较常用。

  • Sentence1

    在这里插入图片描述

    将上述频率写入向量中:

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

  • Sentence2

    在这里插入图片描述

    将上述频率写入向量中:

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

  • 综上所述: 在这里插入图片描述

3.4 局限性

​ 词袋模型仅能反映文本中词出现的频率,而忽略了语言的结构与语义信息,主要局限如下:

  • 忽略词序:例如,“Learning start now” 与 “Now start learning” 在 BoW 表示中完全相同,无法体现语序差异。
  • 忽略语义差异:例如,“good practice” 与 “bad practice” 的结构一致,但语义相反。
  • 大小写敏感:如 “Learning” 与 “learning” 含义相同,却被视为两个不同的词。
  • 包含无意义符号:标点符号(如逗号 “,”)会被当作独立 token 加入词汇表,增加噪声却无实际信息。

因此,词袋模型仅将语言视为一个几乎字面意义上的“词袋”,无法捕捉上下文与语义关系。 这一局限正是 TF-IDF 与后续词向量模型(如 Word2Vec、GloVe)出现的动机。

四、BoWs实现

​ sklearn的CountVectorizer类可以实现Bag Of Words的功能。

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer(max_features=max_features, stop_words=stop_words)
X_train = vectorizer.fit_transform(train_texts)
X_test = vectorizer.transform(test_texts)

1. 参数说明

参数类型默认值作用 / 描述
max_features int 或 None None 限制词表大小。对所有词的 词频(term frequency) 排序,取前 max_features 个作为关键词集合。例如 max_features=10000 表示只保留前 10,000 个高频词。
stop_words string/list/None None 去除停用词。例如 stop_words='english' 自动去掉英文常用停用词。
ngram_range tuple (min_n, max_n) (1, 1) 控制 n-gram 范围。默认 (1,1) 只保留 unigram(单词), (1,2) 表示保留 unigram + bigram(两词组合)。
lowercase bool True 是否将文本转换为小写。通常保持 True 以减少词表冗余。
min_df int / float 1 最小文档频率。词语至少出现在 min_df 个文档中才会被保留。
max_df int / float 1.0 最大文档频率。词语若出现在超过 max_df 个文档中(或比例),则被忽略。常用来去掉高频词。
token_pattern string r"(?u)\\b\\w\\w+\\b" 正则表达式,用于识别词语边界。默认匹配至少两个字符的单词。
analyzer string/callable ‘word’ 指定分析对象:'word' 按单词分词,'char' 按字符,'char_wb' 按字符且只考虑单词边界。

2. fit:统计训练文本中所有词出现的频率

​ 根据 max_features 和 stop_words 生成一个 词汇表(vocabulary)。词汇表里每个词对应一个索引,比如:

{'apple': 0, 'banana': 1, 'orange': 2}

3. transform:把测试文本也转换成同样维度的词频向量

  • 使用已有词汇表,把新文本映射成向量
  • 例如:

test_texts = ["apple orange"]
X_test =
[[1 0 1]]

​ 注意,如果测试文本里有训练集中没有出现的词,它们会被 忽略(不会增加新维度)。

五、BoW 与现代 LLM 的关系

BoW其实是语言表示演进的第一步

5.1 从 BoW 到 LLM:语言表示的技术演化路径

​ 从历史视角看,BoW 并不是“被淘汰的旧技术”,而是现代大模型语言表示体系的起点。

  • 语言表示方法大致经历了以下阶段:
阶段表示方式核心思想
BoW / TF-IDF 稀疏词频向量 统计词出现
Word2Vec / GloVe 稠密词向量 学习词语语义空间
RNN / LSTM 序列模型 建模词序
Transformer 注意力机制 建模长距离依赖
LLM 大规模预训练 学习语言的隐式概率结构

​ 可以看到,BoW 是第一个将“文本 → 数值向量”的工程可行方案,没有它,就没有后续的词向量和 Transformer 输入形式。

5.2 为什么说 BoW 不是“差模型”,而是“时代最优解”

​ 很多现代 NLP 教程会把 BoW 描述为“原始、简单、效果差”,这种说法在工程史上是不准确的。

(1) 计算资源限制决定了模型形式
  • 在 BoW 流行的年代(1990–2010),那时:

    • GPU 尚未普及
    • 深度神经网络训练成本极高
    • 大规模语料不可获得
    • 分布式训练基础设施不存在
  • 在这种环境下:

    • 稠密向量训练几乎不可行
    • Transformer 完全无法训练
    • BoW 是唯一可工业化落地的文本表示方式
(2) 在很多任务上,BoW 至今仍然是强基线
  • 即使在今天,文本分类、信息检索、搜索排序、推荐系统特征工程,BoW / TF-IDF + 线性模型仍然是强基线,且成本极低。

  • 在工业界常见经验是:一个调优良好的 TF-IDF + Logistic Regression,往往能击败一个没有调参的小型神经网络模型。

5.3 BoW 与现代 LLM 的本质差异

​ 从数学本质上看,BoW 和 LLM 的区别是统计阶数与结构建模能力:

模型建模能力表示类型
BoW 一阶统计(词频) 稀疏向量
Word2Vec 二阶共现统计 稠密嵌入
Transformer 高阶条件概率 序列隐空间
LLM 全局语言分布 隐式世界模型
  • BoW 是

    P

    (

    w

    )

    P(w)

    P(w)

  • LLM 是:

    P

    (

    w

    t

    w

    <

    t

    ,

    context

    )

    P(w_t|w_{<t}, \\text{context})

    P(wtw<t,context) 本质上,LLM 是 BoW 的高阶条件概率扩展。

5.4 从工程角度看:LLM 仍然继承了 BoW 的思想

​ 尽管 Transformer 表面上非常复杂,但在底层LLM 仍然需要:

  • Tokenization(分词)

  • Vocabulary(词表)

  • Token ID 向量化

  • 稀疏→稠密嵌入映射

    这样看来,BoW 的思想仍然存在于 embedding lookup 表中,只是被神经网络“软化”了。

5.5 为什么说 BoW 是 NLP 的“牛顿力学”

在这里插入图片描述

​ 可以用一个物理学类比:

NLP物理学
BoW 牛顿力学
Word2Vec 经典统计物理
Transformer 相对论
LLM 量子场论级复杂系统

​ 牛顿力学并没有“过时”,只是适用范围有限。同理,BoW 不是错误模型,而是在低复杂度语言建模中的最优工程选择。

5.6 BoW 的思想在现代系统中的隐秘复活

​ 有趣的是,很多现代 LLM 系统又回归了“词频思想”:

  • BM25 仍然是搜索引擎核心

  • Hybrid Search = BM25 + Embedding

  • RAG 系统中仍使用 TF-IDF / BM25 召回

  • Prompt caching / prefix caching 本质是统计语言片段复用

    深度模型并没有取代统计模型,而是与之叠加。

六、总结

​ 词袋模型并不是一个“落后的技术”,它是现代语言模型体系的工程原点:

  • 第一次实现文本 → 数值空间映射
  • 建立了词表、分词、向量化的统一范式
  • 为 Word2Vec、Transformer、LLM 提供了概念与工程基础

​ 没有 BoW,就没有今天的大模型语言智能。它不是被淘汰的旧模型,而是语言智能工程史上的第一块基石。它的局限来自时代,而它的思想仍活在每一个 LLM 的 embedding 层中。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【LLM基础教程】文本特征表示方法入门(一):BoW
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!