Seq2Seq模型中Context Vector的生成机制及相关技术疑问
关于Seq2Seq中Context Vector的核心疑问解答
一、标准Seq2Seq(Sutskever 2014)的Context Vector:生成方式与本质
你找不到专门的生成公式是因为它本身就是编码器的最终输出——Sutskever的经典模型用单向循环网络(LSTM/GRU)做编码器,Context Vector就是编码器处理完整个输入序列后的最终隐藏状态。
生成流程非常直接:
- 编码器逐个输入序列里的每个token(比如单词的嵌入向量),每一步都会更新自身的隐藏状态
h_t - 当处理完最后一个token
x_T时,得到的隐藏状态h_T就是整个输入序列的Context Vector,没有额外的计算步骤。
在论文的条件概率公式里,这个Context Vector是隐含的条件:解码器的初始状态直接设置为这个向量,整个解码过程的概率计算都基于它。
二、经典Seq2Seq的Context Vector≠平均Word2Vec向量
这两者完全不是一回事:
- 平均Word2Vec是对输入序列所有token的静态嵌入做简单算术平均,完全忽略了语序和上下文依赖——比如“我打他”和“他打我”的平均向量几乎一致,但语义完全相反。
- 经典Seq2Seq的Context Vector是循环编码器动态计算的结果,它编码了序列的语序信息、上下文逻辑和全局语义,和序列的顺序强绑定,能区分语义完全相反的同词序列。
三、Context Vector的含义与解码器的信息提取逻辑
核心含义
Context Vector是输入序列的全局语义浓缩表示,它把整个输入序列的信息压缩成固定维度的向量,让解码器可以基于这个“语义摘要”生成对应的输出序列。
解码器的使用方式
在Sutskever的经典模型中:
- 解码器的初始隐藏状态直接赋值为这个Context Vector,相当于让解码器从输入序列的全局语义“启动”。
- 每一步解码时,解码器会结合上一步生成的token嵌入,以及自身当前的隐藏状态(而这个隐藏状态的初始值来自Context Vector,后续更新也间接依赖它),来预测下一个token。
对比Bahdanau的注意力机制:注意力模型里的c_i是随解码步骤动态变化的向量,每一步都会根据当前解码器的状态对编码器所有隐藏状态做加权求和;而经典Seq2Seq的Context Vector是全局唯一、固定不变的,整个解码过程只用到这一个向量。
内容的提问来源于stack exchange,提问作者AbdurRehman
相关产品推荐
相关产品推荐

