translation-choices-2014.md · 可读全文
这里保留原文的中文、公式标记、代码和链接。可直接交给 Agent 读取,也可选取下方原文复制。此入口返回 HTML;原始 .md / .py 文件仍保留,完整候选包同时包含 UTF-8 原件。
# 2014:先拥有一个可工作的翻译器,再决定改哪里
课堂接续:[T18](https://codingai-lec05.pages.dev/classroom/T18.html?step=b0) · [T19](https://codingai-lec05.pages.dev/classroom/T19.html?step=b0) · [T20](https://codingai-lec05.pages.dev/classroom/T20.html?step=b0) · [T21](https://codingai-lec05.pages.dev/classroom/T21.html?step=b0)。连续读本:[第3章](https://codingai-lec05.pages.dev/lecture.html#chapter-3);本主题提供独立定义、例子、代码与来源。
源句为“我/昨天/给/了/他/一/本/书/。”,九个单位来自本课的教学切分。
把源句九单位送过encoder,取末隐藏状态形成固定源摘要 $c_{src}=h_n$,再通过 $s_0=g(c_{src})$ 建立decoder的初始状态。第一次预测先用BOS与 $s_0$ 更新出 $s_1$,再由 $s_1$ 形成I的词表分布;选中I后,本步新输入I与上一状态 $s_1$ 一起产生 $s_2$,再预测gave。写到 `I gave` 时,新送入的只有gave,它与上一状态 $s_2$ 更新出 $s_3$,随后才形成him的分布;him仍是候选,选中后才成为下一步输入。后续同样经过状态更新、词表分布、选择和反馈,依次接入him、a、book、yesterday与句号,最终选中EOS结束。图旁的完整前缀用于记下已生成内容,不表示每一步都把整段前缀重新送入这一个RNN。

`I gave him a book yesterday . EOS` 是这个教学任务的合适目标。这里展示的是合适目标及生成接口,不是受训模型在这句话上的实测输出。源长9、目标文本7项再加EOS,共8个预测目标;两侧长度不同没有矛盾。句号有自己的下一步预测,不能用它代替EOS。
固定的是源接口,不是每一步decoder状态或输出分布。图中的 $s$ 是decoder递推状态的总记号;采用LSTM时,它可包含hidden与cell,而 $c_{src}$ 只指源摘要。图保留 $c_{src}→s_0$ 作为初始化背景,后续活动连接是“上一状态+本步新输入→当前状态→词表分布”,源条件沿状态传递,不在每一步重新注入。另一种实现可以每步再次注入源条件;具体实验必须声明使用哪一种。原LAB02采用双向源编码、decoder零初始化和逐步注入,固定组对有效源状态取均值,动态组逐次读取。因此不能把本段末状态初始化的示意当成LAB02训练配置。
扩大状态、改进训练和门控都可能改善这个已经可用的接口。一个短例没有证明固定摘要装不下;有限维实向量也不是长句必然失败的数学定理。是否有必要保留源位置供每步读取,要用任务与受控结果继续判断。
有了完整可工作的系统,才适合问哪里值得改变。当前九单位短句说明接口,没有证明固定摘要已经失败。下面保留2014的原论文任务、源序反转、两套不同系统的预算和旧她/her诊断样本;它们是研究证据与独立实验,不是新him主例的训练记录。
[阅读本主题](https://codingai-lec05.pages.dev/course/knowledge/translation-choices-2014.html) · [返回实验](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/Fall-26-Lecture-05-841ec8e7-e352-4840-b628-d3742b03d6d0/notebook/LAB-02-bba1d024d8e64a589c290b09381de692?utm_content=bba1d024d8e64a589c290b09381de692&utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_term=get_notebook) · [与Agent共读全文](https://codingai-lec05.pages.dev/course/knowledge/translation-choices-2014.md.read.html)
读本:[ CLS 02 · Attention 与 Transformer ](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/Fall-26-Lecture-05-841ec8e7-e352-4840-b628-d3742b03d6d0/notebook/CLS-02-Attention-Transformer-2d44adcb6f3d409aa7dfb25c21a748a3?utm_content=2d44adcb6f3d409aa7dfb25c21a748a3&utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_term=get_notebook),查找“2014:先拥有一个可工作的翻译器,再决定改哪里”;实验中查找“D/E · 固定源序,比较两种读取接口”。
<span id="translation-choices-2014-s01"></span>
## 固定接口怎样闭合条件生成
下列旧六片段她/her例仍保留原接口说明;当前九单位的末状态初始化与原LAB02的逐步注入区别已在上面声明。
encoder按源词逐步更新,把句子变成最后状态或其他汇总向量c。decoder先以c初始化状态,或在每一步把c作为条件输入;这是两种明确的接口选择,不应在图里混用。输入BOS启动目标端,读 `BOS I gave` 后给下一词概率;训练时用正确目标前缀,生成时用已选词,直到EOS。encoder、decoder、embedding与词表头通过翻译loss共同学习。
令源 token 为 $x_{1:n}$,encoder 得到 $h_1,\ldots,h_n$。此处为明确一种实现,固定表示接口取 $c_{src}=h_n$,用它初始化 $s_0=g(c_{src})$;随后源条件沿解码状态向前传递:
$$s_i=f_{\mathrm{dec}}(E_y[y_{i-1}],s_{i-1}),\qquad
p(y_i\mid y_{<i},x)=\operatorname{softmax}(Ws_i+b).$$
这里 $c_{src}$ 是源句条件,不是 LSTM cell。每一步再拼接固定条件是另一种可实现的设计,上面这一式选择初始化接口;LAB02实际采用逐步注入,二者不能混成同次运行。输入长度 $n$ 与输出长度 $m$ 不必相同,EOS 决定何时停止。完整条件分解为
$$p(y_{1:m},\mathrm{EOS}\mid x)=\prod_{i=1}^{m+1}p(y_i\mid y_{<i},x_{1:n}).$$
可以沿三个时刻检查图是否读对:源端读完以后,$c_{src}$在这次生成中保持不变;目标端读BOS后形成$s_1$,读I后形成$s_2$,读gave后又形成下一状态。固定的是源条件接口,并非所有解码状态被冻结。目标前缀在变化,模型分布也可变化;中文“昨天”虽然较早出现,仍可能在较后的英文位置表达。这解释了两个不同长度、不同次序的序列怎样接起来。
固定接口意味着源信息对 decoder 的影响必须经由 $c_{src}$,这是一项计算图事实。它可能使优化、细节保存或长句泛化困难,却不能简化成“有限维向量在数学上一定装不下长句”。真实结果还受参数容量、表示精度、训练数据和长度分布影响。2014 年的工作已经表明,这个基线在翻译上具有实际价值。
我们的合成LAB02采用另一项清楚的实现约定:双向LSTM编码全部源序列,固定组用**所有有效源状态的均值**;两组decoder都从零h/c开始,每步把条件向量与上一步目标embedding拼接,更新LSTMCell,再拼接条件向量进词表头。动态组只把均值换成依当前decoder状态的加权读取。它不是逐行复刻Sutskever最后状态初始化的原模型。先明确这些共同条件,57.67%/87.00%才有可解释的比较对象。
<span id="translation-choices-2014-s04"></span>
## 把 2014 年当作开放选择

同一源序列正读或反读,目标始终按原顺序生成。沿A→X这对对应位置,A位于源序末端时更接近目标首步;其他词对不必都变短。这个具体改变提出可学性问题,而不是增加了输入信息。
<span id="read-R28"></span>
### 共同观察与待检验选择
给书句的固定摘要需要依次服务I、her、yesterday等目标位置,当前信息需求随目标变化。保留完整源位置,可以把保存表示与决定读取对象分开;反转源序则在保持信息内容的同时改变部分依赖路径。两项改动提出不同假设,并不需要先宣布固定接口必然失效。
来源信息没有增加,是源序实验的重要条件;读取接口改变,是动态方案的重要条件。“读取到预测”主题会说明匹配、内容汇总、词表预测与loss怎样接起来,本主题在历史条件后保留评分与搜索的深入比较。
### 2014 年秋:已公开工作怎样改变下一次实验
Bahdanau初稿公开于2014-09-01,Sutskever初稿公开于2014-09-10。本课先讲固定摘要再讲动态读取,是概念依赖的组织,不能改写为前者看到后者已经发表才开始修补。
固定向量 encoder–decoder 是能工作的起点。Cho 等的 RNN Encoder–Decoder 用于短语评分,不能不加说明便当作同一个完整句子翻译实验。此处回看 Sutskever 与 Bahdanau 已公开的早期论文;课堂顺序不是实际研究者知悉对方工作的顺序。
| 论文内比较 | 系统与设置 | 全测试集 BLEU |
| --- | --- | ---: |
| Sutskever v1 Table 1 | 单模型,beam=12,源句正序 | 26.17 |
| 同上 | 单模型,beam=12,源句反转 | 30.59 |
| Bahdanau v1物理p8 Table 1,All列 | RNNenc-50 | 17.82 |
| 同上 | RNNsearch-50 | 26.75 |
50是训练句长上限;NoUNK子集与延长训练后的28.45另属条件。两组是独立比较,不能把它们拼成四个系统在统一条件下的排名。Sutskever 的深 LSTM 与更大词表、不同训练及搜索设置不等于 Bahdanau 的基线。后者的 RNNsearch 使用双向编码器,每向 1000 单元,而 RNNenc 的编码器为 1000 单元,因而也不只是开关 attention 的消融。
Sutskever Figure 3 报告少于 35 词的句子没有性能下降,最长句仅轻微下降。这反驳“固定向量在长句上必然崩溃”的叙述,但不否定另一个设置下的瓶颈动机。Bahdanau Figure 2 在其设置中显示长度相关差别;图形趋势不应编造成未报告的精确分组数值。
本课的研究判断是优先验证动态读取,同时保留源句反转的强固定向量基线。动态读取改变了信息接口,值得实验;并非旧接口已经被证明不可能。如果原系统尚未调好,先做反转和搜索诊断也是有依据的选择。
下一次比较尽量固定数据、分词、词表、训练预算、参数量、搜索与评测;单独控制编码方向。记录总 BLEU,也按长度、未知词与关系遗漏分组。若认真优化旧基线后动态读取优势消失,降低固定表示瓶颈解释的权重;若匹配条件后长距离关系和遗漏仍稳定改善,则增加这条路线的投入。以上是待实施实验,不是本课已经得到的训练结果。
原版:[Sutskever v1](https://arxiv.org/pdf/1409.3215v1),[Bahdanau v1](https://arxiv.org/pdf/1409.0473v1)。
<span id="read-R29"></span>
反转证据直接约束了这个判断。若我们原先认定“固定向量装不下,所以必须换接口”,同一固定接口仅改变源序就取得改进,会要求把结论收窄。它支持继续认真优化旧路线,同时并不排除另一种访问方式可能更适合某些任务。值得比较的是在共同条件下能带来什么收益,而不是先把旧模型写成无效。
反转源句后要重新编码,目标顺序保持不变。部分早期对应的最短依赖间隔缩短,平均距离没有被证明全部缩短。这个成功的基线改动使后续问题更准确:动态读取相对一个认真优化的固定向量系统,在哪些任务与长度上值得增加复杂度?
<span id="translation-choices-2014-s05"></span>
## 数据与计算预算是判断的一部分

上表的质量差异还要放回训练预算。Sutskever2014-09-10 v1在选定WMT14英法12M句对上训练,源/目标词表160k/80k,四层1000cell、约380M参数,8GPU约一周。正文另报PPL5.8到4.7及BLEU25.9到30.6,与Table1分别保留口径。
Bahdanau2014-09-01 v1使用各30k词表,长度≤30/50训练,batch80、Adadelta;RNNsearch双向encoder每向1000,decoder1000。延长训练的28.45另列,不能与上表混成同预算结果。
可以把源序(正/反)与读取接口(固定摘要/逐位置读取)放进同一份小型翻译数据的四格设计,目标参考始终保持原顺序。每一列内只改变源序,保持编码方向、宽度、参数量、训练与搜索预算不变;跨列分别报告编码器配置和新增读取参数。它能研究源序效应及其与系统配置的交互;等容量控制是额外实验,四格本身不自动识别净attention因果效果。**四格仍是待做研究设计,结果留空。** 现有两组单种子合成反转共同500更新、动态组多1024有效参数,是机制相关的真实训练证据,不是自然翻译能力,也不能据此宣判那一句人称错译来自固定摘要。
假如更宽固定接口就追平,下一步可能继续优化旧系统;假如换搜索保留了正确候选却仍得低分,下一步就要查模型分布;如果动态读取只在一组长度有效,先查任务范围与随机性。这些结论都比预先写定“attention获胜”更有研究价值。
来源:[Sutskever等v1](https://arxiv.org/html/1409.3215v1)、[Bahdanau等v1](https://arxiv.org/pdf/1409.0473v1),R7读本第二、三章,M15/M17/R4-2014/R5-JUDGMENT。历史结果来自原论文;本课合成结果来自存档checkpoint;四格为未执行设计。
原课程组织参考:CS224N 2026 Lecture05物理p14–21依次建立任务、完整Seq2Seq、条件目标、训练与固定摘要问题。论文结果继续使用各自v1原表。
<span id="translation-choices-2014-s02"></span>
## 同样的错译,先检查一项能区分解释的证据
源句仍为 `我/昨天/给了/她/一本/书`。把 `her` 误写为 `him`,可能是源表示没有保留角色、读取或训练不足、模型偏好错误,也可能是搜索没有返回模型评分更高的正确句子。不能仅从一个错词选定根因。
现在额外给定两条**教学构造**的候选评分:同源、同模型参数、同tokenizer,八项目标含句号与EOS,自然对数求和,不加长度惩罚。
|候选|Σlog p|是否返回|
|---|---:|---|
|I gave him a book yesterday . EOS|−8.2|是|
|I gave her a book yesterday . EOS|−6.4|否|
−6.4高于−8.2,因而至少存在这一对候选的搜索遗漏。下一步优先记录候选覆盖和beam剪枝,或在短序列受限词表中穷举。这个证据没有证明her是全空间最高分,也没有证明其他源信息都用对。反过来,若正确句已被保留但分数较低,扩大搜索本身不能改变模型对这一对的排序。既有[训练与生成主题的真实反转样本](https://codingai-lec05.pages.dev/course/knowledge/teacher-forcing-and-generation.html#teacher-forcing-and-generation-s04)展示了后一种情形:正确候选已被保留,却被模型排在错误候选之后。两项诊断各自适用于各自案例。
<span id="translation-choices-2014-s03"></span>
## 同一个错词,有几种仍然合理的解释
一种解释是固定汇总把角色信息压得难以恢复;另一种是信息还在,但解码训练没有学好;也可能输入切分/UNK已经抹掉关键区别,或模型给her的概率不错却搜索留下him分支。长句更差也不能单独选出其中一种:长句有更多词、更多角色、更多生成机会,训练覆盖还可能不同。
可以增加状态容量,可以用门控改善信用分配,可以反转源序使某些对应关系在早期训练更近,也可以保留整列源状态,让每一步重新寻找。固定维实向量不是严格意义上“数学上绝不可能编码任意句子”的证明;现实限制来自有限精度、训练、任务复杂度和可学习的读出。短任务上固定接口可以很好用,原始Seq2Seq也提供了强长句证据。
<span id="translation-choices-2014-s06"></span>
## 相邻知识与复核资源
[状态在流动,梯度可以停在边界](https://codingai-lec05.pages.dev/course/knowledge/recurrent-state-and-credit.html) · [读取之后,系统怎样决定写 him](https://codingai-lec05.pages.dev/course/knowledge/attention-to-prediction.html)
[全部主题](https://codingai-lec05.pages.dev/course/knowledge/index.html) · [关键结果JSON](https://codingai-lec05.pages.dev/course/knowledge/data/learning-paths.json) · [只读诊断源码](https://codingai-lec05.pages.dev/course/knowledge/code/learning_paths.py.read.html) · [Seq2Seq完整实现](https://codingai-lec05.pages.dev/course/knowledge/code/seq2seq.py.read.html) · [视觉机制实现](https://codingai-lec05.pages.dev/course/knowledge/code/mechanisms.py.read.html) · [TinyDecoder与cache实现](https://codingai-lec05.pages.dev/course/knowledge/code/legacy_numpy.py.read.html)