让机器读懂文字:词向量的前世今生
在自然语言处理(NLP)中,最基础的问题之一是:如何把一个词表示成计算机能处理的数学对象?
这个问题的答案,几乎决定了整个 NLP 系统的上限。
过去几十年,词的表示方法经历了几次范式转变:
离散符号表示 → 矩阵分解降维 → 静态稠密向量 → 上下文动态表示
(One-Hot) (LSA) (Word2Vec) (BERT/GPT)
每一次转变都带来了 NLP 能力的质的飞跃。
本文沿着这条时间线,从最朴素的方法讲到当前最前沿的大语言模型。
1. 第一阶段:Word2Vec 之前的世界
1.1. One-Hot 编码:最朴素的起点
假设词表大小为 $V$,每个词用一个 $V$ 维向量表示,只有对应位置是 1,其余全是 0。
比如词表是 [猫, 狗, 鱼],那么"猫"= [1,0,0],“狗”= [0,1,0],“鱼”= [0,0,1]。
两个致命问题:
- 维度灾难:真实词表动辄几万到几十万,每个词都是一个极高维的稀疏向量。
- 语义缺失:任意两个 one-hot 向量的内积都是 0,"猫"和"狗"的距离与"猫"和"经济学"的距离完全一样。词与词之间的语义关系被彻底抹掉了。
One-Hot 的问题很明显,那怎么改进?
一个自然的想法是:能不能从大量文本的统计规律中,自动学出每个词的低维稠密表示?
1.2. LSA(潜在语义分析):第一次降维
LSA(Latent Semantic Analysis, 1990)的思路是:构建一个"词-文档"共现矩阵,然后用 SVD(奇异值分解)做降维,把每个词映射到一个低维稠密向量。
$$X_{V \times D} \approx U_k \Sigma_k V_k^\top$$
取 $U$ 的前 $k$ 列(通常 $k \sim 100\text{–}300$),每一行就是一个词的 $k$ 维向量。
LSA 是第一个真正意义上的"词向量"方法——它产生了稠密、低维的表示。
为什么降维后语义相近的词会靠近?
直觉上,"猫"和"狗"经常出现在相似的文档中(宠物、动物相关的文章),所以它们在共现矩阵中的行向量本来就相似,SVD 降维保留了这种相似性。
但 LSA 有几个问题:
- SVD 的计算复杂度是 $O(V^2 D)$,对大规模语料很慢
- 共现矩阵是全局统计,无法增量更新
- 线性模型,表达能力有限
1.3. NNLM(神经网络语言模型):用神经网络学词向量
2003 年,Yoshua Bengio 提出了 NNLM(A Neural Probabilistic Language Model),第一次用神经网络来学习词向量。
1.3.1. 查找表:从 One-Hot 到稠密向量的桥梁
NNLM 的第一步是建立一个查找表(也叫嵌入矩阵)$C \in \mathbb{R}^{V \times d}$,其中 $V$ 是词表大小,$d$ 是我们想要的词向量维度(比如 100)。
这个表一开始是随机初始化的——每个词对应表中的一行,就是它的 $d$ 维向量。
比如词表有 5 万个词,$d = 100$,那查找表就是一个 $50000 \times 100$ 的矩阵。
“猫"是词表中第 3721 个词,那"猫"的词向量就是第 3721 行。
所谓"查找”,就是用词的编号去矩阵里取对应的那一行——本质上等价于 One-Hot 向量乘以这个矩阵($\text{one-hot} \times C$),效果就是取出对应行。
关键在于:这个查找表不是固定的,它是模型的可训练参数。
训练过程中,表中的数值会被反向传播不断更新。
训练结束后,表中每一行就是对应词的最终词向量——此后固定下来,每个词对应唯一的向量表示,可以拿去给各种下游任务使用。
1.3.2. 模型结构
有了查找表,NNLM 的训练任务是:给定一句话中前 $n-1$ 个词,预测第 $n$ 个词是什么。
比如 $n = 5$,句子是"我 喜欢 自然 语言 处理",那训练样本就是:
- 输入:[我, 喜欢, 自然, 语言] → 预测"处理"
具体步骤:
- 从查找表中取出这 4 个词的向量(每个 $d$ 维),拼接成一个 $4d$ 维的长向量
- 通过一个隐藏层(带 $\tanh$ 非线性激活)
- 通过 softmax 输出词表上的概率分布,看哪个词的概率最高
$$P(w_t \mid w_{t-n+1}, \ldots, w_{t-1}) = \text{softmax}\bigl(W_2 \cdot \tanh(W_1 [v_{w_{t-n+1}}; \ldots; v_{w_{t-1}}] + b_1) + b_2\bigr)$$
训练目标是最大化正确词的概率。
在这个过程中,查找表 $C$、隐藏层权重 $W_1$、输出层权重 $W_2$ 都会被反向传播更新。
词向量就是这样"学"出来的——它是为了让预测更准确而自动调整的结果。
1.3.3. 为什么 NNLM 没有成为主流?
NNLM 证明了神经网络确实可以学到有意义的词向量,但它有一个实际问题:训练太慢,导致无法在大规模语料上使用。
慢在两个地方:
- 隐藏层:$\tanh$ 非线性变换的计算量不小
- softmax:每次预测都要对词表中所有 $V$ 个词算概率($V$ 可能是 5 万甚至更多),这一步的计算量是 $O(V)$
你可能会想:训练慢没关系,训练一次以后就能一直用了。
问题在于,词向量的质量高度依赖训练数据的规模——数据越多,词向量越好。
NNLM 在 2003 年的硬件上,训练几百万词的语料就要好几周。
而真正好用的词向量需要在数十亿词的语料上训练。
以 NNLM 的速度,这根本不现实。
这就是 Word2Vec 登场的背景:我们需要一种更快、更简单的方法,能在超大规模语料上高效训练词向量。
2. 第二阶段:Word2Vec —— 里程碑
2.1. 分布式假说:你的朋友圈定义了你
“You shall know a word by the company it keeps.” —— J.R. Firth, 1957
Word2Vec(Mikolov et al., 2013)的哲学基础是分布式假说:一个词的含义,由它周围的词决定。
考虑:
“我家的猫喜欢在沙发上睡觉” vs “我家的狗喜欢在沙发上睡觉”
"猫"和"狗"出现在几乎相同的上下文中,所以它们的含义应该相近。
Word2Vec 通过一个浅层神经网络,从大量文本中学习每个词的向量表示,使得上下文相似的词在向量空间中彼此靠近。
相比 NNLM,Word2Vec 做了一个关键的简化:去掉隐藏层的非线性变换,只保留查表和线性预测。
这让模型极其高效,可以在数十亿词的语料上训练。
2.2. Word2Vec 的两种训练方式:CBOW 和 Skip-gram
Word2Vec 提出了两种不同的训练方式,思路互为镜像:
2.2.1. CBOW(Continuous Bag of Words):用上下文预测中心词
给定窗口内的上下文词,预测中间的目标词。
例如窗口大小为 2,句子是"我 喜欢 自然 语言 处理",目标词是"自然":
- 输入(上下文):[我, 喜欢, 语言, 处理]
- 输出(目标):自然
将上下文中每个词的词向量查出来(从输入矩阵 $W \in \mathbb{R}^{V \times d}$ 中查表),取平均得到上下文表示 $h$,再用输出矩阵 $W’ \in \mathbb{R}^{d \times V}$ 做线性变换过 softmax:
$$P(w_t \mid \text{context}) = \frac{\exp({v^{\prime\top}{w_t} h})}{\sum{w=1}^{V} \exp({v^{\prime\top}_w h})}$$
其中 $v_w$ 是词 $w$ 的输入向量,$v’_w$ 是输出向量,$c$ 是窗口半径。
训练时,模型通过反向传播更新两组参数:
- 输入矩阵 $W$(查找表):梯度从 $h$ 均匀分配回每个上下文词,只更新当前上下文中出现的 $2c$ 个词对应的行,其余行不动
- 输出矩阵 $W’$:对词表中每个词都要算梯度(这就是 softmax 慢的原因),更新对应列
训练结束后,输入矩阵 $W$ 的每一行就是对应词的最终词向量。
2.2.2. Skip-gram:用中心词预测上下文
和 CBOW 反过来:给定中心词,预测窗口内的每个上下文词。
$$P(w_i \mid w_t) = \frac{\exp(v^{\prime\top}{w_i} v{w_t})}{\sum_{w=1}^{V} \exp(v^{\prime\top}w v{w_t})}$$
损失函数是所有上下文词的对数概率之和:
$$\mathcal{L} = -\sum_{i \in \text{context}} \log P(w_i \mid w_t)$$
Skip-gram 同样更新两组参数:
- 输入矩阵 $W$:每次只更新中心词 $w_t$ 对应的那一行(因为输入只有一个词)
- 输出矩阵 $W’$:理论上更新所有 $V$ 列(用负采样后只更新 $k+1$ 列)
和 CBOW 一样,训练结束后取输入矩阵 $W$ 的行作为词向量。
2.2.3. CBOW vs Skip-gram
| CBOW | Skip-gram | |
|---|---|---|
| 输入 → 输出 | 上下文 → 中心词 | 中心词 → 上下文 |
| 速度 | 更快(上下文取平均,一次预测) | 更慢(每个上下文词单独预测) |
| 低频词 | 表现较差(被平均稀释) | 表现更好(每次都直接用中心词) |
| 实践中 | 适合大数据集、高频词 | 更常用,尤其在小数据集上 |
Skip-gram 在实践中更常用。
下面的讨论以 Skip-gram 为主。
下图展示了两种架构的结构对比:
CBOW vs Skip-gram 架构对比
2.3. 训练的核心难题:softmax 太贵了
softmax 的分母需要对词表中所有 $V$ 个词求和。
词表 10 万,每次更新就要算 10 万次内积——计算上完全不可接受。
Word2Vec 提出了两种高效的近似方法。
2.3.1. 层次化 Softmax(Hierarchical Softmax)
普通 softmax 要对词表中所有 $V$ 个词算分数,层次化 softmax 的思路是:把"从 $V$ 个词中选一个"变成"沿着一棵二叉树走一条路径"。
具体做法:用词表构建一棵 Huffman 二叉树,每个词是一个叶子节点。
要预测某个词时,不再和所有词比较,而是从根节点出发,在每个内部节点做一次二分类——往左走还是往右走——直到到达目标词所在的叶子。
层次化 Softmax 示意图
如上图所示,要预测"自然"这个词,只需沿红色路径做 3 次二分类(右→右→左),而不是遍历全部 $V$ 个词。
每次二分类用 sigmoid 函数判断:
$$P(\text{left}) = \sigma(v^{\prime\top}{\text{node}} \cdot v{w_I}), \quad P(\text{right}) = 1 - \sigma(v^{\prime\top}{\text{node}} \cdot v{w_I})$$
其中 $v’{\text{node}}$ 是当前内部节点的参数向量(可训练),$v{w_I}$ 是输入词的词向量。
最终目标词的概率就是路径上所有二分类概率的乘积:
$$P(w \mid w_I) = \prod_{j=1}^{L(w)-1} \sigma!\left(d_j \cdot v^{\prime\top}{n(w,j)} \cdot v{w_I}\right)$$
其中 $d_j = +1$ 表示走左,$d_j = -1$ 表示走右。
计算复杂度从 $O(V)$ 降到了 $O(\log V)$——词表 10 万个词,只需要约 17 次二分类。
Huffman 树还有一个好处:高频词的路径短,低频词的路径长,高频词的计算更快。
2.3.2. 负采样(Negative Sampling)
负采样是比层次化 softmax 更简单、也更常用的方法。
它的核心思路是:softmax 之所以慢,是因为要和词表中所有词比较。但我们真的需要和所有词比较吗?
回想一下训练的目标:我们希望中心词"自然"的向量和真实上下文词"语言"的向量靠近(内积大),和不相关的词的向量远离(内积小)。
要达到这个目的,并不需要和全部 $V$ 个词都比一遍——只需要挑几个"反面教材"(负样本)来对比就够了。
这就是负采样的做法:把"从 $V$ 个词中选出正确的那个"这个多分类问题,简化为一系列"这个词对是不是真实的上下文关系"的二分类问题。
对于一个训练样本(中心词 $w_I$,真实上下文词 $w_O$):
- 正样本:($w_I$,$w_O$)是真实共现的词对 → 标签为 1,希望它们的内积大
- 负样本:从词表中随机采 $k$ 个词 $\tilde{w}_1, \ldots, \tilde{w}_k$,它们大概率不是 $w_O$ 的真实上下文 → 标签为 0,希望它们和 $w_I$ 的内积小
负采样示意图
损失函数的设计直接对应这个目标:
$$\mathcal{L} = \log \sigma(v^{\prime\top}{w_O} v{w_I}) + \sum_{j=1}^{k} \mathbb{E}_{\tilde{w}j \sim P_n(w)}[\log \sigma(-v^{\prime\top}{\tilde{w}j} v{w_I})]$$
正样本:让内积尽量大;负样本:让内积尽量小。
其中 $\sigma$ 是 sigmoid 函数。
第一项让正样本的内积通过 sigmoid 后接近 1(即模型判断“是真实上下文”的概率高);第二项让每个负样本的内积取负后通过 sigmoid 接近 1(即模型判断“不是真实上下文”的概率高)。
负样本怎么采?按词频的 3/4 次方分布:
$$P_{\text{noise}}(w) = \frac{f(w)^{3/4}}{\sum_{w’} f(w’)^{3/4}}$$
为什么是 3/4 次方?
如果直接按词频采样,高频词(“的”、“是”)会被采到太多次,低频词几乎永远不会被采到。
3/4 次方会"压平"这个分布——高频词的采样概率被压低,低频词的被提升,让训练更均衡。
这是一个经验值,Mikolov 在论文中尝试了多种指数,发现 3/4 效果最好。
计算复杂度从 softmax 的 $O(V)$ 降到了 $O(k)$,$k$ 通常取 5~20。
也就是说,每个训练样本只需要更新 $k$ 个词的输出向量(1 个正样本 + $k$ 个负样本),而不是全部 $V$ 个。
2.4. 训练细节
窗口大小:通常取 5~10。
小窗口学到更多语法关系(词性相似的词靠近),大窗口学到更多语义关系(主题相似的词靠近)。
子采样高频词:像"的"、"是"这样的高频词几乎出现在所有上下文中,信息量少但占据大量训练时间。
Word2Vec 对高频词做概率性丢弃:
$$P_{\text{discard}}(w) = 1 - \sqrt{\frac{t}{f(w)}}$$
频率越高的词被丢弃概率越大,阈值 $t$ 通常取 $10^{-5}$。
两套向量:模型有输入矩阵 $W$ 和输出矩阵 $W’$,每个词有输入向量 $v_w$ 和输出向量 $v’_w$。
训练结束后通常只用输入向量作为最终词向量。
2.5. 词向量的神奇性质
训练好的词向量展现出令人惊喜的线性类比关系:
$$v_{\text{king}} - v_{\text{man}} + v_{\text{woman}} \approx v_{\text{queen}}$$
- $v_{\text{Paris}} - v_{\text{France}} + v_{\text{Italy}} \approx v_{\text{Rome}}$(首都关系)
- $v_{\text{bigger}} - v_{\text{big}} + v_{\text{small}} \approx v_{\text{smaller}}$(比较级关系)
这不是魔法。
Levy & Goldberg (2014) 证明了 Skip-gram + 负采样实际上是在隐式地分解一个点互信息(PMI)矩阵:
$$v_w \cdot v_c \approx \text{PMI}(w, c) - \log k$$
词向量的线性结构来源于 PMI 矩阵的低秩近似。
词向量的线性类比关系
2.6. Word2Vec 的局限
- 静态向量:每个词只有一个固定向量,无法处理一词多义。"苹果"在"吃苹果"和"苹果手机"中含义不同,但只能有一个向量。
- 无法处理未登录词(OOV):训练语料中没出现过的词无法生成向量。
- 只利用局部上下文:只看窗口内的共现,没有利用全局统计。
- 浅层模型:单隐层网络,表达能力有限。
3. 第三阶段:Word2Vec 之后的改进
3.1. GloVe(2014):结合局部与全局
GloVe(Global Vectors, Pennington et al.)的出发点是:Word2Vec 只利用局部窗口内的共现,而 LSA 利用全局统计但只是线性分解。
能不能两者兼得?
GloVe 先统计全局的词-词共现矩阵 $X$,其中 $X_{ij}$ 是词 $i$ 和词 $j$ 在窗口内共现的次数。
然后优化:
$$\mathcal{L} = \sum_{i,j=1}^{V} f(X_{ij})\bigl(v_i^\top v_j’ + b_i + b_j’ - \log X_{ij}\bigr)^2$$
其中 $f(x)$ 是一个权重函数,对高频共现做截断,避免"的"、"是"这类词主导训练。
GloVe 的词向量质量和 Word2Vec 相当,在某些任务上略好。
它的优势是训练过程更可控(直接优化一个明确的目标函数),劣势是需要先构建共现矩阵,内存开销大。
3.2. FastText(2016):子词信息解决 OOV
FastText(Bojanowski et al., Facebook)在 Skip-gram 的基础上引入了字符 n-gram。
每个词被拆成若干子词,词向量是所有子词向量的和。
比如"where"(加上边界标记 <>)的 3-gram 是:<wh、whe、her、ere、re>。
词向量:
$$v_{\text{where}} = \sum_{g \in \text{ngrams}(\text{where})} z_g$$
这带来两个好处:
- 处理 OOV:未见过的词可以通过其子词组合出向量
- 形态学信息:词缀相似的词(如 “teach”、“teacher”、“teaching”)自然获得相似的向量
4. 第四阶段:从静态到动态 —— 上下文相关的词表示
Word2Vec、GloVe、FastText 都有一个共同的根本局限:每个词只有一个固定的向量。
但自然语言中一词多义是常态,"苹果"在不同句子中的含义完全不同。
我们需要的是:同一个词在不同上下文中获得不同的向量表示。
4.1. ELMo(2018):上下文词向量的开端
ELMo(Embeddings from Language Models, Peters et al.)用一个双向 LSTM 语言模型来生成词向量。
模型分别从左到右和从右到左读句子,每个词的表示是各层 LSTM 隐状态的加权组合:
$$\text{ELMo}k = \gamma \sum{j=0}^{L} s_j h_{k,j}$$
其中 $h_{k,j}$ 是第 $j$ 层在位置 $k$ 的隐状态,$s_j$ 是可学习的层权重。
ELMo 的词向量是上下文相关的——同一个词在不同句子中会得到不同的向量。
这是从静态词向量到动态词向量的关键一步。
但 ELMo 仍然是基于 LSTM 的,序列建模的并行性差,而且双向信息只是简单拼接,左右上下文没有真正交互。
4.2. BERT(2018):双向 Transformer 预训练
BERT(Bidirectional Encoder Representations from Transformers, Devlin et al., Google)是当前 NLP 的分水岭。
它用 Transformer 的 Encoder 架构,通过两个预训练任务从大量无标注文本中学习语言表示。
4.2.1. Transformer 的核心:自注意力
Transformer 的关键创新是自注意力机制(Self-Attention)。
对于输入序列中的每个位置,它会计算该位置与所有其他位置的关联度,然后用这些关联度对所有位置的表示做加权求和:
$$\text{Attention}(Q, K, V) = \text{softmax}!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V$$
其中 $Q$(Query)、$K$(Key)、$V$(Value)分别由输入经过不同的线性变换得到。
$d_k$ 是缩放因子,防止内积过大导致 softmax 饱和。
自注意力的优势:
- 全局视野:每个位置都能直接看到序列中的所有其他位置,不像 RNN 需要逐步传递
- 并行计算:所有位置的注意力可以同时计算,训练效率远高于 RNN
- 灵活的依赖建模:长距离依赖和短距离依赖同等对待
实际使用中,BERT 采用多头注意力(Multi-Head Attention):把 $Q, K, V$ 分成多个"头",每个头独立做注意力,最后拼接起来。
不同的头可以关注不同类型的关系(语法、语义、指代等)。
4.2.2. BERT 的预训练任务
任务一:掩码语言模型(Masked Language Model, MLM)
随机遮住输入中 15% 的词(替换为 [MASK] 标记),让模型预测被遮住的词:
$$P(w_{\text{mask}} \mid \text{context}) = \text{softmax}(W h_{\text{mask}} + b)$$
这迫使模型同时利用左右两侧的上下文来理解每个词——真正的双向建模。
任务二:下一句预测(Next Sentence Prediction, NSP)
给定两个句子,判断第二个句子是否是第一个句子的真实下文。
这让模型学到句子级别的关系。
(后来 RoBERTa 等工作发现 NSP 的作用有限——判断两句话是否相邻这个任务太简单了,模型只需要看主题是否相关就能做对,学不到深层的句间逻辑关系,所以后续工作大多去掉了这个任务。)
4.2.3. BERT 的使用方式:预训练 + 微调
BERT 开创了**“预训练 + 微调”**的范式:
- 预训练:在大规模无标注文本上训练 MLM 和 NSP,学到通用的语言表示
- 微调:在具体的下游任务(分类、问答、命名实体识别等)上,用少量标注数据微调整个模型
这个范式的威力在于:预训练阶段学到的语言知识可以迁移到各种下游任务,即使下游任务的标注数据很少。
BERT-base 有 1.1 亿参数,BERT-large 有 3.4 亿参数。
在发布时,它在 11 个 NLP 基准任务上刷新了记录。
4.3. GPT 系列(2018~):自回归语言模型的崛起
与 BERT 的双向掩码预测不同,GPT(Generative Pre-trained Transformer, Radford et al., OpenAI)走的是自回归路线:从左到右逐词预测下一个词。
$$P(w_t \mid w_1, \ldots, w_{t-1}) = \text{softmax}(W h_t + b)$$
GPT 用的是 Transformer 的 Decoder 架构(带因果掩码,每个位置只能看到它左边的内容)。
4.3.1. GPT 的演进
| 模型 | 年份 | 参数量 | 关键突破 |
|---|---|---|---|
| GPT-1 | 2018 | 1.17 亿 | 证明了自回归预训练 + 微调的有效性 |
| GPT-2 | 2019 | 15 亿 | 规模扩大,展现了零样本(zero-shot)能力 |
| GPT-3 | 2020 | 1750 亿 | 上下文学习(in-context learning),不需要微调 |
| GPT-4 | 2023 | 未公开 | 多模态(文本+图像),推理能力大幅提升 |
GPT-3 的出现是一个转折点:它发现当模型足够大、训练数据足够多时,不需要微调,只需要在输入中给几个示例(few-shot)甚至不给示例(zero-shot),模型就能完成各种任务。
这被称为上下文学习(In-Context Learning)。
4.3.2. BERT vs GPT:两条路线
| BERT | GPT | |
|---|---|---|
| 架构 | Transformer Encoder | Transformer Decoder |
| 预训练方式 | 双向掩码预测(MLM) | 单向自回归(从左到右) |
| 上下文 | 双向(同时看左右) | 单向(只看左边) |
| 擅长 | 理解类任务(分类、问答、NER) | 生成类任务(文本生成、对话、翻译) |
| 使用方式 | 预训练 + 微调 | 预训练 + 提示(prompt) |
| 代表 | BERT, RoBERTa, ALBERT, DeBERTa | GPT-3/4, LLaMA, Claude |
在 2020 年之前,BERT 路线在各种 NLP 基准上占主导。
但 GPT-3 之后,大规模自回归模型展现出了惊人的通用能力,成为当前的主流方向。
4.4. 当前最前沿:大语言模型(LLM)
当前最前沿的语言表示方法就是大语言模型(Large Language Models, LLM)。
它们本质上是 GPT 路线的延续——超大规模的自回归 Transformer,在海量文本上预训练。
4.4.1. 关键技术进展
规模定律(Scaling Laws):Kaplan et al. (2020) 发现,模型性能随参数量、数据量、计算量的增加呈幂律提升,且三者之间存在最优分配比例。
这为"越大越好"提供了理论依据。
指令微调(Instruction Tuning):在预训练之后,用"指令-回答"格式的数据进一步训练,让模型学会遵循人类指令。
代表工作:FLAN、InstructGPT。
人类反馈强化学习(RLHF):用人类偏好数据训练一个奖励模型,再用强化学习(PPO)优化语言模型的输出,使其更符合人类期望。
这是 ChatGPT 的核心技术之一。
长上下文:早期 Transformer 的上下文窗口只有 512~2048 个 token,现在已经扩展到 128K 甚至更长(如 Claude 的 200K、Gemini 的 1M+),通过 RoPE(旋转位置编码)、ALiBi 等位置编码改进实现。
混合专家模型(MoE):如 Mixtral、GPT-4(据推测),用多个"专家"子网络,每次只激活其中一部分,在不增加推理计算量的前提下扩大模型总参数量。
4.4.2. 当前代表性模型
| 模型 | 机构 | 特点 |
|---|---|---|
| GPT-4o | OpenAI | 多模态,强推理能力 |
| Claude 3.5/4 | Anthropic | 长上下文,强指令遵循 |
| Gemini | 原生多模态,超长上下文 | |
| LLaMA 3 | Meta | 开源,社区生态丰富 |
| Qwen | 阿里 | 中文能力强,开源 |
| DeepSeek | DeepSeek | 高效训练,开源 |
5. 全景回顾:词表示的演进
词表示方法演进时间线
把整条时间线拉通来看:
| 时期 | 方法 | 表示类型 | 核心思想 | 局限 |
|---|---|---|---|---|
| ~2000 | One-Hot | 稀疏、高维 | 离散符号编码 | 无语义,维度灾难 |
| 1990 | LSA | 稠密、静态 | SVD 分解共现矩阵 | 计算慢,无法增量更新 |
| 2003 | NNLM | 稠密、静态 | 神经网络语言模型 | 太慢 |
| 2013 | Word2Vec | 稠密、静态 | 预测上下文 | 一词一义,无法处理 OOV |
| 2014 | GloVe | 稠密、静态 | 全局共现矩阵分解 | 一词一义 |
| 2016 | FastText | 稠密、静态 | 子词信息 | 一词一义 |
| 2018 | ELMo | 稠密、动态 | 双向 LSTM 语言模型 | 序列建模慢 |
| 2018 | BERT | 稠密、动态 | 双向 Transformer + MLM | 不擅长生成 |
| 2018~ | GPT 系列 | 稠密、动态 | 自回归 Transformer | 单向上下文 |
| 2023~ | LLM (GPT-4, Claude, etc.) | 稠密、动态 | 超大规模 + RLHF + 指令微调 | 计算成本高,幻觉问题 |
从 one-hot 到 LLM,核心趋势是:
- 从稀疏到稠密:one-hot → Word2Vec
- 从静态到动态:Word2Vec → ELMo/BERT
- 从小到大:BERT (1亿) → GPT-3 (1750亿) → 更大
- 从专用到通用:每个任务单独训练 → 一个模型解决所有任务
而贯穿始终的核心思想,从 Word2Vec 到 GPT-4 从未改变:从大量无标注文本中,通过预测任务学习语言的表示。
Word2Vec 预测上下文词,BERT 预测被遮住的词,GPT 预测下一个词——形式不同,哲学相同。
6. 总结
词的表示方法从 one-hot 的离散符号,经过 LSA 的矩阵分解降维,到 Word2Vec 的稠密静态向量,再到 BERT/GPT 的上下文动态表示,每一步都在回答同一个问题:如何让计算机更好地理解词的含义。
Word2Vec 是这条路上最关键的转折点——它用一个极简的预测任务证明了分布式假说的威力,开启了"预训练语言表示"的范式,这个范式至今仍是大语言模型的底层哲学。