在上一篇文章中,我们分析了 Word2Vec 的定位与三大核心缺点:
- 静态向量
- 窗口限定
- 上下文对称
这些缺点决定了:
Word2Vec 只能用于表示学习,而无法支撑真正高质量的文本生成。
那么问题来了:
👉 如果 Word2Vec 不行,下一步该怎么做?
👉 Attention 和 Transformer 是"灵光一现",还是一种必然演进?
本文将从 Word2Vec 的缺点出发,一步步推导出 Attention 的出现,并最终落到 Transformer。
一、问题重述:我们到底想要一个什么样的"词向量"?
在 Word2Vec 之后,人们逐渐意识到一个事实:
真正有用的词向量,必须依赖上下文动态生成。
换句话说:
- "苹果"在"苹果手机"中
- "苹果"在"我吃了一个苹果"中
👉 它们应该是两个不同的向量
举个直观例子
句子 A:
我买了一台 苹果,性能很强。
句子 B:
我吃了一个 苹果,味道很甜。
Word2Vec:
embedding("苹果") = 固定
但我们真正希望的是:
embedding("苹果" | 电子产品上下文)
embedding("苹果" | 食物上下文)
👉 词向量应该是"上下文的函数",而不是"词本身的属性"
二、第一次自然改进:让"上下文"参与计算
既然上下文很重要,那最直接的想法是:
让当前词,根据上下文重新计算自己的表示
假设当前词是 q,上下文是:
c₁, c₂, c₃, ...
那我们是不是可以:
new_q = f(q, c₁, c₂, c₃, ...)
问题是:
👉 上下文里的每个词,重要性真的一样吗?
三、关键转折点:上下文并不是"等权"的
来看一个例子:
虽然天气很差,但是我还是决定 出门,因为我已经和朋友约好了。
对于"出门"这个词:
- "天气"
- "但是"
- "因为"
- "约好了"
显然:
- "约好了"比"天气"更重要
- "但是"在逻辑上起转折作用
👉 不同上下文,对当前词的贡献是不同的
一个自然的问题出现了:
能不能给不同上下文词分配不同的权重?
四、加权求和:Attention 的雏形出现了
如果我们允许不同上下文有不同权重,那么一个非常自然的形式就是:
new_q = α₁·c₁ + α₂·c₂ + α₃·c₃ + ...
其中:
- αᵢ 表示上下文词 cᵢ 对当前词的重要性
这一步非常关键,因为它意味着:
词的表示,不再是"查表",而是"计算出来的"
五、权重 α 从哪来?------ Attention 的核心问题
接下来是最关键的问题:
αᵢ 应该如何计算?
显然:
- 不能人工设定
- 只能让模型自己学
那权重应该依赖什么?
👉 依赖当前词和上下文词之间的关系
回到 Word2Vec 的点积相似度
在 Word2Vec 中,已经有一个成熟做法:
score(w, c) = embedding(w) · embedding(c)
这个点积本质上是在问:
"这两个词在语义上有多相关?"
六、从 Word2Vec 点积,到 Attention 打分函数
为了增强表达能力,我们对 Word2Vec 的点积做一次升级:
score(q, cᵢ) = (Wq · q) · (Wk · cᵢ)
这里:
Wq:Query 投影Wk:Key 投影
这一步非常重要,因为:
模型不再直接比较"词",
而是比较"在当前任务下的语义投影"
到这里为止:
- Query(Q)
- Key(K)
已经自然出现了。
七、Value 是怎么来的?
接下来再问一个问题:
我们真正想"加权汇总"的是什么?
不是 Key 本身,而是:
上下文词所携带的信息
于是引入第三个向量:
V = Wv · cᵢ
最终,每个词的新表示来自:
Attention(q) = Σ softmax(score(q, kᵢ)) · vᵢ
🎯 这就是 Attention 的完整思想来源
八、一个完整例子:Attention 如何区分"苹果"的语义?
句子:
我买了一台 苹果 手机
对于"苹果":
- Query:来自"苹果"
- Keys:来自"我 / 买 / 一台 / 手机"
Attention 计算后:
- "手机"获得高权重
- "我""一台"权重较低
最终:
苹果的向量 ≈ 偏向"电子产品"
换一句话:
词的语义,由上下文决定,而不是由词本身决定
九、Transformer:把 Attention 变成"生成模型"
到目前为止,我们已经解决了:
- 静态向量
- 局部上下文
- 上下文对称
Transformer 做的事情是:
在每一层、每一个位置,都使用 Attention 重新计算词的表示
并且:
- 多层堆叠 → 从词法到语义
- 自回归结构 → 直接预测下一个词
最终得到:
Embedding
→ Transformer Blocks(Attention)
→ Softmax
→ 下一个词
👉 不再需要额外的生成模型
十、Word2Vec vs Transformer:本质差异总结
| 维度 | Word2Vec | Transformer |
|---|---|---|
| 向量生成方式 | 查表 | 动态计算 |
| 是否上下文相关 | 否 | 是 |
| 上下文范围 | 局部窗口 | 全局 |
| 是否能生成文本 | 否 | 是 |
| 训练方式 | 表示学习 | 端到端语言建模 |
十一、写在最后:为什么说 Attention 是"必然产物"?
回头看这条演进路径:
统计相似度
→ Word2Vec(预测上下文)
→ 静态向量的瓶颈
→ 上下文加权的需求
→ Attention
→ Transformer
你会发现:
Attention 并不是突然出现的技巧,
而是在 Word2Vec 的缺点下,被一步步"逼出来"的解决方案。