编程与 AI14 分钟阅读更新于 2026-08-03

Transformer 的 Encoder-Decoder 结构为什么适合机器翻译

围绕 Encoder-Decoder 架构、源序列、目标序列和交叉注意力的描述,解释翻译任务中编码与生成如何分工协作。

相关工具

翻译任务天然包含输入和输出两套序列

机器翻译不是把一句话简单换成另一个词,而是给定源语言句子,生成目标语言句子。Transformer 相关概念 在概览中先把模型看成黑盒:输入一种语言的句子,输出另一种语言的句子。

打开黑盒后,源句和目标句分别进入编码组件与解码组件。编码器负责理解和整理已经给定的源序列,解码器负责根据目标前缀逐步生成目标序列。两套序列角色不同,结构也因此分成两部分。

Transformer Encoder-Decoder 结构在机器翻译中的分工示意图
Encoder-Decoder 的翻译分工

源句进入编码器形成记忆,目标句由解码器根据前缀逐步生成。

编码器先把源句变成可查询的记忆

源句经过词元化、Embedding 和位置编码后进入编码器堆叠。每层通过 Self-Attention 让源句各位置交换信息,再由 FFN 对每个位置做加工,最后形成一组保留源位置的上下文表示。

这组表示不是一个简单的句向量,而是源序列记忆。它保留了不同位置,包含了词义、顺序和上下文关系,之后会作为解码器交叉注意力的 Key 和 Value。

解码器从目标端起始状态开始

目标句在生成开始时还不存在,解码器通常从 BOS 或其他起始状态开始。目标前缀经过 Embedding 和位置编码后,先进入掩码自注意力,整理当前已经知道的目标历史。

第一轮只有起始标记,后续每轮把上一步生成的词元追加到目标前缀。解码器不能直接把完整目标答案作为输入,否则就失去了根据历史预测下一词的训练和推理任务。

Transformer 机器翻译中目标前缀从起始标记逐步增长的流程图
目标端从起始标记逐步扩展

解码器从 BOS 开始,经过掩码自注意力处理目标前缀,再逐步生成后续词元。

交叉注意力让目标端读取源句

只处理目标前缀还不够,解码器还需要知道源句中哪些内容与当前目标位置有关。交叉注意力使用目标端表示生成 Query,编码器输出提供 Key 和 Value,当前目标位置可以对源序列各位置分配不同权重。

翻译不同词元时,Query 会随着目标前缀和生成状态变化,关注的源位置也可能变化。一个目标词可能对应源句中的多个位置,源句中的一个位置也可能影响多个目标词,这种关系不需要固定的一对一对齐。

Transformer 机器翻译中交叉注意力连接源序列和目标序列的示意图
交叉注意力连接源句与目标句

解码器 Query 查询编码器源记忆,形成当前目标位置需要的源信息。

为什么不把源句和目标前缀直接拼成一条序列

把两套序列直接拼接可以形成一种输入形式,但它们的角色和可见范围不同。源句在生成开始前已经完整给定,目标端则需要遵守从左到右的因果约束。Encoder-Decoder 结构让两侧保留各自的位置、掩码和处理方式。

交叉注意力提供了一条明确的信息桥:目标端可以查询源端有效位置,但源端不必被目标未来影响。这样,模型既能读取完整源记忆,又能保持目标生成的顺序边界。

编码和生成可以使用不同的计算节奏

源句进入编码器后,编码器可以一次处理完整序列,形成源记忆。解码器训练时可以在因果掩码下并行处理多个目标位置,推理时则从 BOS 开始逐步生成。

两侧节奏不同并不矛盾:编码器处理已知输入,解码器处理逐渐出现的输出。交叉注意力把相对稳定的源记忆提供给不断变化的目标状态,形成适合翻译的协作方式。

输出层把目标隐藏状态变成词元

解码器最后产生的仍是隐藏状态,需要经过 Linear 映射到词表大小,再由 Softmax 得到下一词概率。解码策略选择普通目标词元后,追加到前缀并进入下一轮;选择 EOS 时,生成结束。

因此,完整翻译流程不是编码器直接输出目标句,而是编码器形成源记忆,解码器结合目标历史和交叉注意力逐步形成目标状态,输出层再把每一步状态变成词表候选。

Encoder-Decoder 的优势在于分工清楚

编码器可以专注于把源句变成上下文丰富、按位置保留的记忆;解码器可以专注于根据目标历史组织输出,并在需要时查询源信息。两者通过交叉注意力连接,又保持各自的输入和掩码规则。

这种分工特别适合翻译、摘要和条件生成任务:输入内容先被整体理解,输出内容再遵守自回归顺序逐步形成。理解这条主线后,Embedding、位置编码、Self-Attention、交叉注意力、FFN、Softmax 和 EOS 都能找到自己在翻译流程中的位置。

用八步复述一次翻译

源句切分成词元,加入 Embedding 和位置编码;编码器逐层形成源记忆;目标端从 BOS 开始;目标前缀经过掩码自注意力;交叉注意力查询源记忆;FFN 加工融合结果;输出层生成词表概率;选择词元并检查 EOS。

这八步不是互相独立的模块清单,而是一条连续的数据流。源序列负责提供可查询的上下文,目标序列负责确定当前生成状态,交叉注意力把两侧信息连接起来,最终让模型逐步完成目标句。

常见问题

Encoder-Decoder 结构中编码器直接生成目标词吗?

通常不直接生成。编码器形成源序列记忆,解码器根据目标前缀查询源记忆并生成目标词元。

翻译时交叉注意力是否要求源词和目标词一一对应?

不要求。每个目标位置可以对多个源位置分配权重,语序和表达变化都可以在这种软关系中表示。

为什么解码器不能只看源序列不看目标前缀?

目标前缀提供当前已经生成到哪里以及目标端历史上下文,交叉注意力只负责读取源信息,两者需要共同决定下一词。