让机器读懂文字:词向量的前世今生

在自然语言处理(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 是:<whwhehererere>
词向量:

$$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 Google 原生多模态,超长上下文
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 是这条路上最关键的转折点——它用一个极简的预测任务证明了分布式假说的威力,开启了"预训练语言表示"的范式,这个范式至今仍是大语言模型的底层哲学。