传统的注意力机制
传统的注意力机制关注的是 两个不同序列元素之间的关系,比如在序列到序列模型中,如下图机器翻译,传统的注意力(Attention)在 输入序列 和 输出序列 之间,如图:
自注意力机制
在自注意力(Self-Attention)机制中,“自” 指的是该机制通过关联 单个输入序列 中的 不同位置 来计算 注意力权重 的能力。
可以评估并学习输入本身各个部分之间的关系和依赖,比如句子中的单词或图像中的像素。
应用场景
- 用于Transformer编码器(如BERT、RoBERTa、ViT);
- 适合 理解类 任务:文本分类、命名实体识别、图像理解(无时序限制);
- 核心价值:充分利用全上下文信息,提升理解精度。
快速理解
在做阅读理解,看一句话 我喜欢吃苹果,可以同时看前后所有字 来理解意思——这就是标准自注意力的逻辑。
可视化
假设有一个4个词的句子:[我, 喜, 欢, 吃](对应位置1/2/3/4),标准自注意力的“可见范围”如下:
| 正在处理的位置(行) | 能参考的位置(列) | 通俗解释 |
|---|---|---|
| 位置1(我) | 1、2、3、4 | 看“我”时,能同时看到“我、喜、欢、吃” |
| 位置2(喜) | 1、2、3、4 | 看“喜”时,能同时看到“我、喜、欢、吃” |
| 位置3(欢) | 1、2、3、4 | 看“欢”时,能同时看到“我、喜、欢、吃” |
| 位置4(吃) | 1、2、3、4 | 看“吃”时,能同时看到“我、喜、欢、吃” |
提示: 没有任何限制,全可见,就像读文章时可以回头看、也可以提前看后面的内容。
用“画图”的方式更简单(√=能看,×=不能看):
位置1:√ √ √ √
位置2:√ √ √ √
位置3:√ √ √ √
位置4:√ √ √ √
上下文向量
自注意力的输出结果就是上下文向量(Context Vector)
上下文向量 = 把“周围相关信息”综合起来后得到的一个向量。
一句话解释:在当前位置,我综合了我能看到的所有信息后,形成的“理解结果”。
为什么叫“上下文”?
因为它不是只看自己,而是看:
- 前面的词
- 后面的词
- 或者根据任务规定能看到的范围
然后把这些信息“融合”成一个向量。
例子
句子:
“猫 喜欢 鱼”
当处理“喜欢”这个词时:
- 只看自己(即“喜欢”这个词) → 得到“喜欢”的词向量
- 看自己(即“喜欢”这个词) + 猫 + 鱼 → 得到“喜欢”的 上下文向量
这个上下文向量会包含:
- “喜欢”的基本含义
- 它和“猫”的关系
- 它和“鱼”的关系
- 整个短语的语义
这就是上下文向量
上下文向量长什么样?
就是一个普通的向量,比如:
[0.23, -0.12, 0.95, 1.10, -0.37, ...]
但它的含义是:
“我综合了周围信息后,对当前词的理解。”
上下文向量 vs 词向量
| 对比项 | 词向量 | 上下文向量 |
|---|---|---|
| 信息来源 | 只看自己 | 看周围所有相关词 |
| 是否固定 | 固定(如 Word2Vec) | 不固定,随句子变化 |
| 表达能力 | 单一含义 | 多义性可区分 |
例子:
“苹果 很好吃”
“苹果 公司 发布 新 手机”
“苹果”的词向量是同一个,但上下文向量完全不同。
总结
上下文向量 = 把当前词和它周围相关信息融合后得到的向量,代表模型对当前词在“这个语境下”的理解。
