文章目录
一、序列(Seq2Seq)转换的核心架构
在自然语言处理领域,序列到序列(Seq2Seq)模型是实现跨序列转换的基础框架,其核心依托Encoder-Decoder(编码器-解码器)架构。该架构通过两个协同组件完成序列转换:
- 编码器:将输入序列压缩为固定维度的语义向量c(信息压缩)
- 解码器:基于语义向量c生成目标序列(信息解码)
经典应用场景:
- 机器翻译:中文句子 → 英文句子
- 文本摘要:新闻长文 → 精简摘要
- 语音识别:音频特征序列 → 文字序列
二、Encoder-Decoder框架基础原理
RNN家族介绍:网页链接
2.1 整体工作流程
- 编码阶段:
输入序列通过编码器压缩为固定维度的语义向量 C = F ( X 1 , X 2 , … , X m ) C = F(X_1, X_2, \dots, X_m) C=F(X1,X2,…,Xm),其中 F F F 为非线性变换函数。 - 解码阶段:
解码器基于唯一的 C C C 和已生成的历史词 y 1 , y 2 , … , y i − 1 y_1, y_2, \dots, y_{i-1} y1,y2,…,yi−1,逐词生成目标序列。特别地,解码过程会添加特殊标记:- 输入端添加 作为生成起始信号(如 y 0 = < G O > y_0 = <GO> y0=<GO>);
- 输出端通过 标记序列结束(如生成 y n = < E O S > y_n = <EOS> yn=<EOS> 时终止)。
完整生成逻辑为:
y i = G ( C , y 0 , y 1 , … , y i − 1 ) ( 其中 y 0 = < G O > ) y_i = G(C, y_0, y_1, \dots, y_{i-1}) \quad (\text{其中} \ y_0 = <GO>) yi=G(C,y0,y1,…,yi−1)(其中 y0=<GO>)
2.2 编码器(Encoder)详解
以中文句子"欢迎 来 北京"的编码过程为例:
时间步 | 输入词 | 编码器隐藏状态更新 |
---|---|---|
t=1 | 欢迎 | h 1 = h_1 = h1= 捕获"欢迎"的态度语义特征 |
t=2 | 来 | h 2 = h_2 = h2= 融合"欢迎"与"来"的动作语义特征 |
t=3 | 北京 | h 3 = h_3 = h3= 融合前序语义并定位"北京"实体特征 |
最终语义向量: C = h 3 C = h_3 C=h3(包含"欢迎来到北京"的整体语义压缩)
2.3 解码器(Decoder)工作机制与缺陷
以生成英文序列" Welcome to Beijing "为例,传统Decoder的核心问题在于固定语义向量C的重复使用:
解码过程示例(含特殊标记)
- 生成初始标记: y 0 = < G O > y_0 = <GO> y0=<GO>
- 生成"Welcome": y 1 = f ( C , y 0 ) y_1 = f(C, y_0) y1=f(C,y0)
- 生成"to": y 2 = f ( C , y 0 , y 1 ) y_2 = f(C, y_0, y_1) y2=f(C,y0,y1)
- 生成"Beijing": y 3 = f ( C , y 0 , y 1 , y 2 ) y_3 = f(C, y_0, y_1, y_2) y3=f(C,y0,y1,y2)
- 生成结束标记: y 4 = f ( C , y 0 , y 1 , y 2 , y 3 ) = < E O S > y_4 = f(C, y_0, y_1, y_2, y_3) = <EOS> y4=f(C,y0,y1,y2,y3)=<EOS>
其中 f f f 为解码器的非线性映射函数,可见所有解码步骤均依赖同一个C,且未区分不同词的语义重要性。
缺陷分析
阶段 | 解码逻辑(以生成"Beijing"为例) | 本质问题 |
---|---|---|
训练 | C + < G O > + "Welcome" + "to" → "Beijing" C + <GO> + \text{"Welcome"} + \text{"to"} \to \text{"Beijing"} C+<GO>+"Welcome"+"to"→"Beijing" | C C C无法区分"北京"与"欢迎"的语义重要性,且标记未改变C的固定性 |
推理 | C + < G O > + 预测"Welcome" + 预测"to" → "Beijing" C + <GO> + \text{预测"Welcome"} + \text{预测"to"} \to \text{"Beijing"} C+<GO>+预测"Welcome"+预测"to"→"Beijing" | C C C中"北京"的语义可能被前序预测词稀释,且需人工设定终止条件 |
- 为什么称为"分心模型"?
即使添加了和标记,模型对目标词"Beijing"的生成仍依赖包含"欢迎+来+北京"混合语义的 C C C。例如:
C = F ( 欢迎, 来, 北京 ) C = F(\text{欢迎, 来, 北京}) C=F(欢迎, 来, 北京)
导致生成"Beijing"时,模型对"欢迎"和"北京"的关注度相同,无法通过标记聚焦关键信息。
三、基础框架的核心缺陷分析(以"欢迎来北京"为例)
3.1 信息瓶颈问题:固定C的维度灾难
1. 长序列信息压缩极限(扩展场景)
当输入序列扩展为"欢迎来自世界各地的朋友来北京参观故宫博物院"(12词),固定维度C(如256维)的存储瓶颈表现为:
- 专有名词丢失:“故宫博物院"的实体特征在压缩后可能被稀释为"故宫"或"博物院”,甚至误译为"Palace Museum"以外的表述。
- 时序信息断裂:“来北京参观"的动作顺序在C中可能被混淆为"参观北京来”。
2. 信息论视角分析(以原例"欢迎来北京"为例)
- 类比说明:将C比作256KB内存存储"欢迎来北京"的语义(假设每个词的语义为100KB),则:
- “欢迎"的态度语义(如热情程度)与"北京"的实体语义(如地理位置)在256维空间中竞争存储维度,导致"北京"的实体特征(如"中国首都”)可能被"欢迎"的情感特征覆盖。
- 数学本质:输入序列的信息熵H(Source)≈3×100(假设每个词100bit信息),而C的维度D=256,H(Source) >> D,必然导致:
c = F ( 欢迎, 来, 北京 ) = [ 0.7 , − 0.3 , 0.5 , … ] c = F(\text{欢迎, 来, 北京}) = [0.7, -0.3, 0.5, \dots] c=F(欢迎, 来, 北京)=[0.7,−0.3,0.5,…]
(C中"北京"的坐标值可能与"欢迎"的坐标值耦合,无法单独提取)
3.2 上下文同质化问题:单一C的语义模糊性
1. 解码阶段的语义错位案例
目标生成词 | 理想语义焦点 | 传统框架中C的实际内容(混合语义) |
---|---|---|
“Welcome” | "欢迎"的态度语义 | C = [欢迎的热情度0.6,来的动作0.3,北京的实体0.1] |
“to” | "来"的动作方向 | C = [欢迎0.4,来的方向0.5,北京0.1] |
“Beijing” | "北京"的实体特征 | C = [欢迎0.3,来0.2,北京的地理位置0.5] |
2. 机制性缺陷演示
- 固定C的计算过程:
C = RNN ( 欢迎 , 来 , 北京 ) = h 3 C = \text{RNN}(\text{欢迎}, \text{来}, \text{北京}) = h_3 C=RNN(欢迎,来,北京)=h3
其中 h 3 h_3 h3包含:- "欢迎"的词嵌入向量(如[0.8, 0.1, …])
- "来"的词嵌入与 h 2 h_2 h2的融合向量(如[0.3, 0.6, …])
- "北京"的词嵌入与 h 2 h_2 h2的融合向量(如[0.2, 0.7, …])
- 解码"Beijing"时的问题:
解码器使用 C C C生成"Beijing"时,因 C C C中"北京"的特征(0.2, 0.7)与"欢迎"(0.8, 0.1)、“来”(0.3, 0.6)的特征混合,可能导致:- 误译:“北京"→"Beiging”(实体特征被"欢迎"的发音特征干扰)
- 时序错误:“来北京"→"to Beijing come”(动作顺序在C中被打乱)
3.3 缺陷的共同根源:静态语义表示
动态序列→静态向量的映射损失:
"欢迎来北京"的动态语义包含:
- 时序依赖:"欢迎"是"来北京"的前提条件,传统框架中 C C C无法保存这种顺序关系;
- 层次结构:"来"是谓语,"北京"是宾语, C C C将其压缩为平级向量;
- 语境特征:"北京"在"欢迎来北京"中表示目的地,而在"北京欢迎你"中表示主语,传统框架中 C C C无法区分语境。
类比说明:
将"欢迎来北京"的语义比作一段3秒的视频(包含动作、地点、情感),传统框架用一张照片(C)记录视频,必然丢失:
- 动作顺序:"欢迎"先于"来"的时间关系;
- 空间关系:"来"指向"北京"的目的地关系;
- 情感强度:"欢迎"的热情程度随时间的变化。
四、注意力机制:突破瓶颈的关键改进
基础框架对比:
模型类型 | 架构示意图 | 核心差异 |
---|---|---|
传统Encoder-Decoder | ![]() |
共享固定语义向量C |
注意力增强Encoder-Decoder | ![]() |
动态生成上下文向量ct |
4.1 核心架构创新
关键突破:
- 放弃单一语义向量C,改为保留编码器隐藏状态序列 { h 1 , h 2 , … , h m } \{h_1, h_2, \dots, h_m\} {h1,h2,…,hm}
- 新增注意力模块,根据当前解码需求动态计算输入序列的语义权重分布
4.2 动态上下文生成机制
- 从固定C到动态cₜ的进化
传统模型解码逻辑 | 注意力模型解码逻辑 |
---|---|
y 1 = f ( C ) y_1 = f(C) y1=f(C) y 2 = f ( C , y 1 ) y_2 = f(C, y_1) y2=f(C,y1) |
y 1 = f ( c 1 , y 0 ) y_1 = f(c_1, y_0) y1=f(c1,y0) y 2 = f ( c 2 , y 1 ) y_2 = f(c_2, y_1) y2=f(c2,y1) |
C C C为所有输入的混合语义 | c t = ∑ i = 1 m α t i h i c_t = \sum_{i=1}^m \alpha_{ti}h_i ct=∑i=1mαtihi(动态加权和) |
权重计算核心公式
相似度计算:
score ( h i , s t − 1 ) = Attention ( h i , s t − 1 ) \text{score}(h_i, s_{t-1}) = \text{Attention}(h_i, s_{t-1}) score(hi,st−1)=Attention(hi,st−1)
(常用计算方式:点积、拼接后线性变换)
权重归一化:
α t i = exp ( score ( h i , s t − 1 ) ) ∑ k = 1 m exp ( score ( h k , s t − 1 ) ) \alpha_{ti} = \frac{\exp(\text{score}(h_i, s_{t-1}))}{\sum_{k=1}^m \exp(\text{score}(h_k, s_{t-1}))} αti=∑k=1mexp(score(hk,st−1))exp(score(hi,st−1))
动态上下文生成:
c t = ∑ i = 1 m α t i h i c_t = \sum_{i=1}^m \alpha_{ti} h_i ct=i=1∑mαtihi示例说明:
- 生成"Beijing"时,解码器状态 s t − 1 s_{t-1} st−1与编码器隐藏状态 h 3 h_3 h3(“北京”)的相似度最高,因此:
α t 1 = 0.1 , α t 2 = 0.1 , α t 3 = 0.8 \alpha_{t1}=0.1, \alpha_{t2}=0.1, \alpha_{t3}=0.8 αt1=0.1,αt2=0.1,αt3=0.8
c t = 0.1 h 1 + 0.1 h 2 + 0.8 h 3 c_t = 0.1h_1 + 0.1h_2 + 0.8h_3 ct=0.1h1+0.1h2+0.8h3
4.3 注意力机制的科学价值
- 语义焦点动态调整
解码阶段 | 目标词 | 关注的输入部分 | 传统模型缺陷对比 |
---|---|---|---|
t=1 | “Welcome” | “欢迎”(h₁) | 混合"欢迎+来+北京"的语义 |
t=2 | “to” | “来”(h₂) | "来"的动作语义被稀释 |
t=3 | “Beijing” | “北京”(h₃) | "北京"实体特征被覆盖 |
- 与人类认知的类比
注意力机制如同人类翻译时的眼球运动: - 生成"Welcome"时,视线聚焦于"欢迎"
- 生成"to"时,视线移动到"来"
- 生成"Beijing"时,视线固定在"北京"