1.1 文本表示
从 one-hot、Bag-of-Words、TF-IDF 到静态词向量(Word2Vec / GloVe / FastText),理解经典文本表示方法及其在大模型时代的复活点
为什么从"表示"讲起
机器本质上处理的是数字向量。文本表示(Text Representation)要解决的问题是:如何把一段字符串变成一个向量,且这个向量能尽量保留语义信息? 从统计学习时代到神经网络时代,这个问题的答案演化出了三代方法:
- 稀疏离散表示:one-hot、Bag-of-Words(BoW)、TF-IDF——把词看成独立符号
- 稠密静态向量:Word2Vec、GloVe、FastText——每个词一个固定向量,能编码语义关系
- 上下文向量:ELMo、BERT、GPT——每个 token 的表示随上下文动态变化(留到第 2 讲)
本节聚焦前两代。它们不是"被淘汰的古董"——TF-IDF 至今是 RAG 系统里 BM25 检索的基石,Word2Vec 至今是关键词扩展、术语聚类、轻量分类的首选。
稀疏离散表示
One-hot 编码
最朴素的表示:词表大小为 ,每个词对应一个 维向量,在该词位置为 1,其余为 0。
致命缺陷:任意两个不同词的余弦相似度都是 0。"猫"和"狗"与"猫"和"银行"的距离完全一样,语义信息彻底丢失。
Bag-of-Words(BoW)
把一篇文档表示为词频向量,忽略词序:
| 词 | the | cat | sat | on | mat | dog |
|---|---|---|---|---|---|---|
| 文档 A:"the cat sat on the mat" | 2 | 1 | 1 | 1 | 1 | 0 |
| 文档 B:"the dog sat on the mat" | 2 | 0 | 1 | 1 | 1 | 1 |
BoW 能反映一篇文档"谈什么",但存在两个问题:
- 高频功能词主导:
the,of,a等在每篇文档都出现很多次,它们的计数掩盖了真正区分文档的关键词 - 忽略词序:语义相反的两句话("狗咬人" vs "人咬狗")在 BoW 中完全一样
TF-IDF:给稀有词加权
TF-IDF(Term Frequency - Inverse Document Frequency)通过**"这个词在本文档有多频繁"乘以"这个词在整个语料中有多稀有"**来解决高频功能词问题:
其中:
- :词 在文档 中出现的次数(或归一化频率)
- :语料总文档数
- :包含词 的文档数
直觉:the 出现在几乎所有文档中,,,它的 TF-IDF 权重被压到接近零;而像量子纠缠这种只在少数文档出现的词,IDF 项很大,权重高,能真正反映文档主题。
TF-IDF 今天依然活跃:Elasticsearch、Lucene 的 BM25 算法就是 TF-IDF 的改进版,至今是绝大多数搜索引擎、RAG 系统的检索底座。稠密检索(dense retrieval)爆发后,工业实践仍广泛使用 BM25 + dense 的 hybrid retrieval。
稠密静态词向量
稀疏表示的根本缺陷:每个词都是孤立符号,没有"猫"和"狗"比"猫"和"银行"更接近的概念。稠密词向量通过"相似的词应当有相似的向量"来解决这个问题。
Word2Vec
Mikolov 等(2013)提出 Word2Vec,核心思想一句话概括:一个词的含义由它的上下文决定(Distributional Hypothesis)。
两种训练目标:
- CBOW(Continuous Bag-of-Words):用上下文预测中心词
- Skip-gram:用中心词预测上下文(对低频词表现更好)
训练后得到一个矩阵 (典型 ),每行就是一个词的稠密向量。
GloVe
Pennington 等(2014)的 GloVe(Global Vectors)从全局共现矩阵出发,用加权最小二乘拟合共现概率的对数。直观上它把 Word2Vec 的"局部窗口预测"和"全局矩阵分解"结合在一起。
FastText
Bojanowski 等(2017)的 FastText 在 Word2Vec 基础上把词拆成字符 n-gram 子词:一个词的向量是其所有 n-gram 向量的和。这让它能给训练时没见过的词(OOV)也生成合理向量,对中文和形态丰富的语言(德语、芬兰语)特别有用。
静态词向量能做什么
训练后的词向量天然编码了语义关系:
# 经典例子
king - man + woman ≈ queen
Paris - France + Italy ≈ Rome典型应用:
- 语义相似度:用余弦相似度 衡量两个词的相近程度
- 词聚类:把医疗术语自动归并为"症状/药物/诊断"类别
- 轻量文本分类:对一段文本的词向量取平均得到句向量,送入逻辑回归分类器——效果远超 BoW,成本远低于 BERT
静态词向量的致命缺陷:一个词只有一个向量。"苹果"在"吃苹果"和"买苹果手机"里拿到的是同一个向量,无法区分上下文含义。这就是第 2 讲 Transformer / BERT 要解决的核心问题——上下文化表示(Contextualized Representation)。
三代表示方法的定位
| 方法 | 维度 | 是否编码语义 | 是否随上下文变化 | 今天的用武之地 |
|---|---|---|---|---|
| One-hot | 词表大小 | 否 | 否 | 索引查找、词表编码 |
| TF-IDF | 词表大小 | 弱(通过权重) | 否 | BM25 检索、轻量分类、关键词提取 |
| Word2Vec / GloVe | 100-300 | 是 | 否 | 关键词扩展、术语聚类、RAG 初筛 |
| FastText | 100-300 | 是(含子词) | 否 | 多语言 / OOV 场景、轻量分类(Facebook 生产级) |
| BERT / GPT embedding | 768-4096 | 是 | 是 | 现代稠密检索、语义搜索、下游微调 |
经典方法在大模型时代的复活点
研究生常有一种错觉:"有了大模型,这些经典方法就没用了。"恰恰相反:
- RAG 系统的 hybrid retrieval:BM25(TF-IDF 改进版)+ 稠密向量的混合召回,在工业界几乎是标配。纯稠密检索对专有名词、罕见术语反而不如 BM25。
- 术语词表构建:从无标注语料里自动抽取术语、做领域词扩展,Word2Vec / FastText 仍是首选,成本比 LLM 调用低三个数量级。
- 轻量分类任务:情感二分类、垃圾邮件识别、意图分流这些已经"过度优化"的任务,TF-IDF + LogReg / LinearSVC 的线上延迟和内存占用都远优于 BERT,准确率差距往往在 1-2 个百分点以内。
- 冷启动和隐私场景:不能外发 API、GPU 资源受限时,静态词向量配合浅层模型仍是唯一可行方案。
本节小结
| 概念 | 一句话要点 |
|---|---|
| One-hot | 每个词独立符号,任意两词距离相等 |
| BoW | 词频向量,忽略词序 |
| TF-IDF | 稀有词加权,公式 ;是 BM25 的前身 |
| Word2Vec | 分布式假设:上下文相似 ⇒ 向量相似;CBOW / Skip-gram 两种目标 |
| GloVe | 从全局共现矩阵出发,结合局部和全局信息 |
| FastText | 字符 n-gram 子词,能处理 OOV 和形态丰富的语言 |
| 三代方法关系 | 稀疏 → 稠密静态 → 稠密上下文(第 2 讲) |