从词袋模型到预训练语言模型:文本表示方法的演进

在自然语言处理中,一个最基础的问题是:

机器如何理解文本?

计算机不能直接理解"我喜欢这部电影"这样的自然语言,它需要把文本转换成数字,才能进行计算、分类、检索、翻译或生成。

因此,文本表示方法就是 NLP 的基础。

从早期的词袋模型,到后来的词向量,再到如今的预训练语言模型,文本表示方法经历了一个从"统计"到"语义",再到"上下文理解"的发展过程。

可以简单概括为:

复制代码
词袋模型:统计词是否出现
词向量:学习词的语义相似性
预训练语言模型:结合上下文理解文本

一、词袋模型:把文本看成词的集合

词袋模型,英文叫 Bag of Words,简称 BoW

它的核心思想很简单:

一段文本中出现了哪些词,每个词出现了多少次。

它不关心词语之间的顺序,也不关心句子的语法结构,只把文本当成一个"装词的袋子"。

比如有两句话:

复制代码
我 喜欢 看 电影
我 喜欢 听 音乐

假设词表是:

复制代码
[我, 喜欢, 看, 电影, 听, 音乐]

那么这两句话可以表示成:

复制代码
我 喜欢 看 电影 -> [1, 1, 1, 1, 0, 0]
我 喜欢 听 音乐 -> [1, 1, 0, 0, 1, 1]

如果某个词出现多次,也可以用词频表示:

复制代码
我 我 喜欢 电影 -> [2, 1, 0, 1, 0, 0]

这种方法非常直观,每个维度都对应词表中的一个词,数值表示这个词在文本中出现的情况。

二、词袋模型的优点和局限

词袋模型最大的优点是简单、稳定、容易解释。

比如在文本分类任务中,如果一篇文章里频繁出现"股票""基金""投资",模型可能判断它更像财经类文章;如果频繁出现"比赛""球队""冠军",模型可能判断它更像体育类文章。

这种方法在早期 NLP 任务中非常常见,例如:

复制代码
文本分类
垃圾邮件识别
关键词匹配
信息检索
情感分析

但是,词袋模型也有明显的问题。

第一,它不考虑词序

比如:

复制代码
我 喜欢 你
你 喜欢 我

这两句话的词基本一样,但表达的关系不同。词袋模型只统计词出现了什么,很难区分这种顺序差异。

第二,它不理解语义相似性

比如:

复制代码
电影
影片
电视剧

这些词在语义上有一定关联,但在词袋模型中,它们只是词表里的不同位置。模型不会天然知道"电影"和"影片"更接近,也不会知道"电影"和"香蕉"差得很远。

第三,它容易产生高维稀疏向量

如果词表有十万个词,那么每篇文章都要表示成十万维向量。但一篇文章实际出现的词可能只有几百个,所以大部分位置都是 0。这会带来存储和计算上的浪费。

所以,词袋模型解决了"文本如何数字化"的问题,但它对语义和上下文的表达能力比较弱。

三、词向量:让词拥有语义坐标

为了解决词袋模型不能表达语义关系的问题,后来出现了词向量,也叫 Word Embedding

词向量的核心思想是:

把每个词映射成一个低维、稠密、连续的向量。

例如:

复制代码
电影 -> [0.21, -0.13, 0.88, ...]
音乐 -> [0.19, -0.08, 0.75, ...]
香蕉 -> [-0.42, 0.33, -0.16, ...]

这些数字本身不需要人为解释,但模型可以通过它们计算词和词之间的关系。

词向量背后的思想是:

一个词的含义,可以通过它经常出现的上下文来学习。

比如:

复制代码
我喜欢看电影
我喜欢看电视剧
我喜欢看纪录片

"电影""电视剧""纪录片"经常出现在类似的上下文里,所以它们的向量可能会比较接近。

再比如:

复制代码
苹果很好吃
香蕉很好吃
橘子很好吃

"苹果""香蕉""橘子"经常出现在类似语境中,所以模型可能会学到它们都和水果相关。

这种方法比词袋模型更进一步,因为它不只是统计词是否出现,而是把词放进一个语义空间中。

在这个空间里,语义相近的词距离更近,语义差异大的词距离更远。

典型的词向量方法包括:

复制代码
Word2Vec
GloVe
FastText

四、词向量相比词袋模型的进步

词向量带来了几个重要变化。

首先,它从稀疏表示 变成了稠密表示

词袋模型可能需要几万甚至几十万维,而词向量通常只需要几十维、几百维或者上千维。

其次,它可以表达一定的语义相似性

在词袋模型中,"电影"和"影片"是两个完全独立的词。

但在词向量中,它们可能距离很近,因为它们经常出现在相似上下文中。

再次,词向量可以作为神经网络模型的输入。

后来的 RNN、CNN、LSTM、Transformer 等模型,都可以基于词向量继续建模文本序列。

不过,传统词向量也有一个很大的问题:

一个词通常只有一个固定向量。

比如"苹果"这个词:

复制代码
我吃了一个苹果
我买了一台苹果手机

第一句话里的"苹果"是水果。

第二句话里的"苹果"是公司或手机品牌。

但是在传统词向量中,"苹果"通常对应同一个向量。

这就导致它无法根据上下文灵活区分词义。

这也是预训练语言模型要解决的重要问题。

五、预训练语言模型:结合上下文理解文本

预训练语言模型是当前 NLP 的主流方法。

常见的模型包括:

复制代码
BERT
GPT
T5
RoBERTa
LLaMA
Qwen

它们和传统词向量最大的区别是:

预训练语言模型得到的是上下文相关的动态表示。

也就是说,同一个词在不同句子中,可以有不同的向量表示。

还是看"苹果"的例子:

复制代码
我吃了一个苹果
我买了一台苹果手机

在预训练语言模型中,第一句话里的"苹果"会更多结合"吃了"这个上下文,被理解成水果;第二句话里的"苹果"会结合"手机"这个上下文,被理解成品牌。

这就比传统词向量更接近人类理解语言的方式。

预训练语言模型通常会先在大规模文本上进行训练。

在这个过程中,模型会学习大量语言规律,比如:

复制代码
词语搭配
语法结构
句子关系
上下文依赖
常识知识
表达方式

完成预训练之后,再把模型迁移到具体任务中,比如:

复制代码
文本分类
情感分析
机器翻译
阅读理解
文本摘要
对话生成
信息抽取

这种方式的好处是,模型不再从零开始学习语言,而是已经具备了一定的语言理解能力。

六、BERT、GPT、T5 的简单区别

虽然它们都属于预训练语言模型,但结构和任务形式有所不同。

BERT 更偏向理解任务。

它通过双向上下文理解句子,常用于文本分类、命名实体识别、相似度计算、阅读理解等任务。

比如输入一句话:

复制代码
复制代码
这部电影非常精彩

BERT 可以输出整句话的语义表示,用于判断情感是正向还是负向。

GPT 更偏向生成任务。

它根据前面的文本预测后面的内容。

比如输入:

复制代码
今天天气很好,我想去

GPT 会继续生成:

复制代码
公园散步。

它特别适合对话、写作、代码生成、内容创作等任务。

T5 把很多 NLP 任务统一成文本到文本的形式。

不管是翻译、摘要、分类还是问答,都可以看成:

复制代码
输入一段文本,输出另一段文本

比如:

复制代码
输入:translate English to Chinese: I love this movie.
输出:我喜欢这部电影。

这种统一形式让 T5 在很多任务上都比较灵活。

七、三类方法的对比

方法 表示方式 是否考虑词序 是否表达语义 是否结合上下文
词袋模型 高维稀疏向量
词向量 低维稠密向量 间接考虑 中等
预训练语言模型 上下文动态表示

可以更直观地理解为:

复制代码
词袋模型:知道一句话里有哪些词
词向量:知道词和词之间是否相似
预训练语言模型:知道词在当前上下文中是什么意思

八、总结

文本表示方法的发展,本质上是机器对语言理解能力不断增强的过程。

早期的词袋模型,主要依赖词频统计。它简单有效,但无法理解词序和语义。

后来的词向量,把词映射到连续向量空间中,使模型能够学习词与词之间的相似关系。

再到现在的预训练语言模型,模型可以结合上下文动态理解文本,不仅能够表示词和句子,还能完成生成、推理、问答、翻译等复杂任务。

整体来看,这条发展路线可以概括为:

复制代码
从统计出现次数
到学习语义相似性
再到上下文理解与文本生成

这也是自然语言处理从传统机器学习走向深度学习,再走向大模型时代的一条重要主线。

相关推荐
学习要积极12 小时前
Spring AI 与阿里云 AI 快速入门:从零搭建智能应用
人工智能·spring·阿里云
crazyme_612 小时前
软件工程实践:从零到一,开发 AI 提示注入闯关平台
人工智能·软件工程
Mr数据杨12 小时前
【CanMV K210】传感器实验 HC-SR04 超声波测距与状态判断
人工智能·硬件开发·canmv k210
beyond阿亮12 小时前
PicoClaw皮皮虾: 端侧设备能跑AI智能体 超轻量AI智能体 极低成本硬件跑AI Agent,内存小于10MB
人工智能·ai·openclaw·picoclaw
kennyS_Titan12 小时前
PCB多层板升级,支撑智能硬件加速落地
人工智能·智能硬件
新加坡内哥谈技术12 小时前
Apple 和 Google 正在如何改造你的 push notification
人工智能
我材不敲代码12 小时前
【OpenCV零基础实战】键盘交互、像素位运算、通道离合、色彩转换与智能抠像
人工智能·opencv·计算机外设
yubo050912 小时前
计算机视觉第二课:3 个核心操作(灰度图 + 模糊 + 边缘检测)
人工智能·opencv·计算机视觉
Apache RocketMQ12 小时前
全新 AI 消息模型:Apache RocketMQ 如何让 AI 应用拥抱事件驱动架构?
人工智能·apache·rocketmq