第 1 章

翻译之困:循环网络的最后堡垒

德语复合句折成两行,后半句的主语还悬在从句深处,前面的动词已经急不可耐地落了地。Google翻译的工程师们盯着输出,没有人说话。系统把一段结构清晰的原文译成了语法完整、意思却完全错位的英语。主语、宾语和动作之间的链条断裂了。笑的人变成了被狗咬的人。

这不是偶然失误,而是循环网络架构在这一天露出了它的底牌。2014年的机器翻译团队已经习惯了短句上的胜利,但真实用户发来的文本从来不是短句。合同、技术手册、新闻导语,每一段都在挑战模型记忆力的极限。

句子一长,翻译质量就下滑;句子再长,输出几乎不可用。这个问题在学术论文里有个名字,叫长距离依赖。工程团队私下里叫它“健忘症”。

大型语言模型的诞生并非源于对语言本身的顿悟,而是源于机器翻译这一具体而顽固的工程困境。这个判断放在今天回看,几乎像一句废话,因为大模型已经无处不在。但放在2014年的语境里,整个领域的主流叙事还完全不同。

那时人们谈论的是神经网络在图像识别上的胜利,是卷积层如何一步步提取特征,是ImageNet竞赛里错误率跌破个位数的狂喜。语言领域的研究者站在旁边,手里握着循环神经网络这块旧工具,眼看图像那边锣鼓喧天,自己却被句子的记忆问题困住。

循环神经网络处理序列的方式决定了它的问题。它一个字接一个字地读进去,每一步都依赖上一步的隐藏状态。就像一个朗读句子的人,读完第七个词时,第一个词的精确字形已经模糊了。

模型不是不努力,而是它的记忆结构本身就有上限。每个时间步的隐藏状态都要同时承担两重任务:记住刚刚输入的内容,同时为下一步计算保留容量。句子变长时,这两个任务互相挤压,早期输入的信息被不断覆盖和稀释,最终消失。

LSTM的出现曾带来缓解。长短期记忆网络引入了门控机制,让信息可以选择性地穿过时间步,而不被强行压缩。遗忘门、输入门、输出门,三个开关协同工作,给了模型一个粗糙的记事本。但这个记事本的容量仍然有限。

LSTM把短期记忆的时间跨度从几个词扩展到几十个词,却没能根治顺序计算带来的根本约束。当句子长到一定程度,门控机制也开始犯糊涂:它不知道该忘掉什么,该记住什么,于是一刀切地保留和遗忘,输出质量随之崩溃。2009年,统计语言模型在大多数语言处理任务中已经优于符号语言模型,因为它们可以有效地消化大型数据集。这个判断在当年被反复验证过。

基于n元文法的统计模型把语言简化成条件概率的链条,依赖的是词组出现频率而非语法规则。数据量足够的条件下,它们能捕捉到很多规则系统无法穷尽的搭配模式。

到了2012年前后,神经网络在图像处理领域占据主导地位之后,研究者们开始把同样的工具转向语言建模,试图用连续向量替代离散符号,用反向传播替代手工特征。Google翻译团队就是这一波转向的先行者之一。他们从2013年开始内部测试循环神经网络翻译系统,最初的结果令人兴奋:在短句和中等长度的句子上,神经模型的流畅度远超旧有的基于短语的统计系统。

BLEU分数的提升让管理层看到了替代旧架构的可能性。演示会上,神经系统的输出被并排摆在旧系统的输出旁边,对比足够强烈。新的译文更像人写的,旧的译文像词典拼出来的。

但短句上的胜利掩盖了一个结构性缺陷。神经翻译系统在评测集上的表现越好,工程团队就越不敢把它放到真实流量里。评测集经过筛选和清洗,句子长度分布偏短,语法复杂度可控。真实的用户输入里,长句、嵌套从句、指代关系盘根错节的文本比比皆是。

Google翻译团队与学术界在序列到序列模型上的集体挣扎,在这一年达到了第一个高潮。模型在标准数据集上的成绩曲线已经趋平,但用户反馈却没有同步改善。工程师们在内部报告里反复描述同一个现象:系统在人工评测中表现得像一个注意力不集中的实习生,前半句还能抓住要点,后半句就开始自由发挥。

序列到序列模型的框架由两部分组成:编码器读完整个源语言句子,生成一个固定长度的语义向量;解码器再从这个向量出发,逐词生成目标语言。

这套架构的优雅之处在于它把翻译问题转化成了两个序列之间的映射问题,不需要手工设计对齐规则。但它的致命弱点也藏在那个固定长度的语义向量里。

编码器把整个句子压缩成一个维度固定的向量,无论句子多长、信息多密,都要塞进这个数学容器里。这是一种信息论意义上的瓶颈。当句子长度增加,编码器必须丢弃越来越多的细节,而解码器只能从丢失后的残骸里重建译文。

模型便像一位健忘的译者,读完后半句就忘了前半句的主语,在德语从句和英语主句之间,在修饰语和被修饰语之间,重新分配了错误的关系。

注意力机制在此时作为循环神经网络的外挂插件被引入。它像一副矫正眼镜,让模型在翻译每个词时能回看原文的相关部分,暂时缓解了记忆衰退的过程。这个设计来自2014年底到2015年初的几篇论文,其中最有影响力的一篇把注意力权重加进了编码器解码器框架。

解码器不再只依赖那个压缩后的语义向量,而是在生成每一个目标词时,动态地计算源语言各个位置的相关程度,然后加权求和,得到一个针对当前解码位置的上下文向量。这个改动很小,但效果立竿见影。模型在长句上的翻译质量开始回升,复杂从句里那个正确的主语第一次在输出中稳定地出现了。

工程团队迅速把注意力机制整合进了内部系统。训练曲线显示,长句上的BLEU分数出现了久违的上升。但这只是修修补补。

注意力机制的引入让模型能够回看原文,却没有改变编码器逐词处理的底层逻辑。模型仍然必须像人阅读一样从左到右读完整个句子,才能开始解码。每一步的隐藏状态仍然依赖前一步的输出,这个时间上的依赖链条没有被切断。训练仍然以周为单位,因为反向传播必须沿着时间轴一步步展开,无法同时处理句子中的多个位置。

顺序计算的代价在2015年变得愈发沉重。Google的数据中心里,GPU集群夜以继日地跑实验,但模型迭代的速度追不上数据增长的速度。

互联网产生的多语言文本每时每刻都在膨胀,而循环网络的训练时间与序列长度成线性关系。句子越长,训练越慢。一个长句对模型的要求,就像一个必须逐字抄写文稿的书记员,前面抄错了,后面跟着全错,而且不能同时看几行。

梯度消失的幽灵始终盘旋在深层网络之上。反向传播沿着时间轴回传误差信号时,每一步的梯度都要乘以同一个权重矩阵。如果这个矩阵的特征值小于一,梯度就会随着步数指数级衰减。模型在学习长距离依赖时,早期的参数几乎收不到有意义的更新信号。

LSTM的门控机制缓解了这个问题,但没有消除它。到了深度和长度的临界点之后,梯度消失仍然让训练变得脆弱而缓慢。

2016年,Google做出了决定:把翻译服务全面切换到神经机器翻译。这是一个商业决策,也是一场豪赌。管理层看到了神经模型在流畅度上的巨大优势,也清楚它在长句和低资源语言上的不稳定性。但竞争压力在推动。微软、百度和Facebook都在各自的语言服务里测试神经系统。

谁先把新架构铺到全量流量,谁就能在用户体验上拉开差距。Google翻译的日调用量已经大到任何架构缺陷都会被瞬间放大。工程团队不得不在切换前进行数月的灰度测试。

切换之后的第一个月,用户反馈里充满了矛盾的声音:短句翻译明显更自然了,但长句和复杂结构上的错误率仍然居高不下。注意力机制让系统在某些错误模式上收敛,却把另一些错误模式暴露得更加清晰。

学术界在2016年已经嗅到了天花板的气味。顶级会议上,关于序列到序列模型的论文数量还在增长,但边际改进越来越小。新的注意力变体层出不穷:局部注意力、硬注意力、稀疏注意力。每种方案都在基准数据集上挤出了百分之零点几的提升,却没有任何一种方案能从根本上解决顺序计算带来的训练瓶颈。

算力在增长,数据在膨胀,但核心算法成了最细的那个瓶颈。实验室里,博士生们开始私下流传一个说法:循环网络已经走到了尽头,只是没人知道替代方案在哪里。

认知套利的概念在这里第一次显出轮廓。想象一下,一个翻译公司老板坐在办公室里,面前摆着两份报价单:一份是人工翻译的每字0.12美元,另一份是机器翻译的每字0.001美元。他的手指在计算器上按了几下,眼睛盯着那个巨大的差价。这就是套利的诱惑——用机器的算力,去吃掉人工翻译的认知劳动成本。早期的神经翻译系统本质上就是在做这件事。这种替代的利润空间巨大:人工翻译按字计费,机器翻译的边际成本几乎为零。

早期神经网络翻译就是对人工翻译的初级套利。但这个套利动作有一个前提:机器的输出质量必须达到客户愿意接受的最低门槛。当长句翻译的准确率跌破这个门槛时,套利就无法完成。客户不会为一份错误百出的译文付费,哪怕它的价格是人工翻译的零头。

因此,翻译质量的瓶颈不仅是技术问题,也是商业问题。它直接决定了算力投入能否转化为可销售的产能,决定了企业客户在多大程度上愿意把翻译流程交给机器。

2016年的Google翻译团队就站在这个拐点上。神经架构已经被证明比旧的统计模型更接近商业化的临界质量,但每前进一步,都要付出更大的算力和训练成本,而收益却在递减。模型规模在扩大,参数量在爬升,但核心架构的生产效率已经逼近极限。

训练一个像样的序列到序列模型需要几周时间,而产品团队需要的迭代周期是几天甚至几小时。训练成本与模型性能之间的剪刀差在扩大。这不是靠增加GPU数量就能解决的问题。顺序计算的天花板摆在那里,像一层透明的玻璃,所有人都看得见,却没有人能打破。

实验室之外,客户的需求仍在变化。企业用户不再满足于短语级翻译。他们要求完整的段落、整页的文档、甚至实时会议的口语转写。

这些场景里,句子不再是独立的单位,上下文关系更加复杂,指代跨度更长。一个代词可能指向十句之前的名词,一个省略的主语需要从前文推知。循环网络的记忆限制在这些场景中被成倍放大,注意力机制的插件式修补也越来越力不从心。

工程团队开始意识到,他们不是在优化一个架构,而是在和一个架构的物理极限博弈。每一次改进都在接近那个极限,而极限本身并不会因为努力而移动。

就在这个时刻,整个领域的注意力开始从改进循环网络转向摆脱循环网络。这个问题在2016年还没有答案,但它已经被足够多的人以足够高的频率提出。

卷积网络被尝试用于序列建模,但卷积核的局部感受野难以捕捉远距离依赖。自注意力机制的第一个雏形已经在某些论文中出现,但没人把它当作一个完整的架构替代方案。它仍然只是循环网络内部的一个组件,一个帮助模型回看原文的辅助工具。

改变还没有到来,但条件已经在积聚。算力正在变得便宜,数据正在变得庞大,架构的束缚正在变得不可忍受。

这一困局的具体后果在2016年底清晰起来。Google翻译切换神经架构之后,服务仍然在运转,日调用量仍然在增长,但工程团队的内部评估越来越冷静。神经机器翻译的流畅度带来了用户体验的明显提升,这是确凿的。但长句错误率居高不下,训练成本高企,迭代速度缓慢,这些问题同样确凿。团队知道自己在一条临近极限的路径上前行,也知道前方不会再有短句时代那样的跃升。天花板已经看得见了,而且越来越近。

学术界在同一时期也开始出现焦躁的迹象。顶级会议收到的论文数量暴涨,但真正的突破性工作在减少。研究者们在循环网络的范式内部反复打磨,提出一个又一个小改进,却没有人能回答那个越来越响的问题:如果顺序计算本身就是错的呢?

这个问题在论文的讨论段里被谨慎地提出,在学术会议的走廊里被热烈地争论,在实验室的白板上被反复演算。

2016年的切换不是终点,而是疼痛的另一个起点。神经机器翻译系统上线之后,工程团队很快发现了一个令人不安的模式:用户在短句上的满意度持续上升,但在长句上的投诉率并没有下降。这两种反馈来自同一批用户,却指向同一个系统的两个面孔。

产品经理在内部邮件里写道:“我们像是在卖一辆加速很快但刹车失灵的跑车。”这句话被转发了好几次,最后出现在一次技术评审会的幻灯片上。

幻灯片里还列出了一组对比数据:短句翻译的BLEU分数比旧系统高出十二个百分点,长句翻译的优势却缩窄到不足三个百分点,某些语言对甚至出现了负增长。德语到英语的翻译在从句嵌套超过三层时,错误率曲线突然陡峭起来,像撞上了一堵隐形的墙。

这堵墙的材料不是算力不足,也不是数据不够。Google在那个时期拥有世界上最大的多语言平行语料库之一,内部存储系统里躺着数十亿对翻译句对,覆盖上百种语言。数据不是瓶颈。算力方面,数据中心里最新部署的TPU集群正在逐步替代GPU,矩阵运算的速度在持续提升。但所有这些资源都被一个顺序计算的瓶颈卡住了。循环网络的训练过程像一条单行道,车流只能一辆接一辆地通过,无论路面铺得多宽、引擎马力多大,通行效率被车道本身限制死了。工程团队尝试过用更大的批次、更深的网络、更激进的学习率调度来压榨剩余的性能空间,但每次改进都像在已经拧紧的螺丝上再拧八分之一圈。能拧,但手指已经开始发白。

这种无力感在2016年秋季的一次内部研讨会上被公开化了。那天的议题本来是注意力机制的优化方案,但讨论到一半,一个工程师突然问了一句:“我们是不是在给一匹瘸腿的马换马蹄铁?”会议室里安静了几秒。没有人直接回答这个问题,因为答案太明显了。在场的所有人都知道,注意力机制解决的是信息检索的问题——让解码器在翻译每个词时能从源语言中找到最相关的部分——但它没有解决信息压缩的问题。编码器仍然要把整个句子塞进一个固定维度的向量里,只是现在解码器可以跳过这个向量的一部分,直接去原文里找线索。这相当于给一个健忘的译者配了一本随时可以翻阅的原文,但译者本人的短期记忆容量并没有增加。他还是在读到句末时忘了句首,只是现在他学会了翻回去看。翻回去看需要时间,也需要认知资源,而且翻得越多,翻译得越慢。

训练过程中的这种翻看行为体现在计算图上,就是注意力权重的计算量随着句子长度的平方增长。每个解码位置都要和所有编码位置计算一次相关性,句子长度翻倍,注意力计算量翻四倍。这意味着注意力机制在缓解长距离依赖问题的同时,引入了另一个瓶颈:计算复杂度。工程团队在内部基准测试中发现,当源语言句子超过六十个词时,注意力层的计算时间开始超过循环层本身。他们在解决一个问题的过程中,制造了一个新的问题,而新问题的增长速度比旧问题更快。这不是一个可以靠工程优化绕过去的坎,它嵌在注意力机制的数学定义里:软注意力要求计算所有位置对的匹配分数,这个操作本身就是二次复杂度的。

学术界在同一时期开始正视这个困境。2016年的EMNLP会议上,一篇关于稀疏注意力的论文在口头报告环节引起了长时间的讨论。作者提出,模型不需要关注源语言的所有位置,只需要关注少数几个最相关的位置,从而把二次复杂度降到线性复杂度。这个想法在直觉上很吸引人,但实验结果显示,稀疏注意力在长句上的表现不稳定。有时候它准确地抓住了关键位置,有时候它漏掉了决定句子结构的主语或动词。硬注意力的另一个变体——基于强化学习的方法——在训练过程中更加不稳定,策略梯度的方差大得让收敛变得困难。这些尝试都在正确的方向上,但每一步都走得磕磕绊绊。会议结束后,几个研究者聚在走廊里继续讨论,有人半开玩笑地说:“我们花了两年时间发明了一个解决记忆问题的机制,然后又花了两年时间发现这个机制本身需要被解决。”笑声里有真实的苦涩。

这种苦涩的根源在于,整个领域在2014年到2016年间经历了一次期望的过山车。2014年序列到序列模型刚提出时,研究者们普遍认为翻译问题已经找到了正确的框架,剩下的工作就是在这个框架内做工程优化。Bahdanau等人的注意力论文在2015年发表后,这种乐观情绪达到了顶峰。模型第一次能够在长句上产生连贯的译文,注意力权重的可视化图也漂亮得令人信服——模型似乎真的学会了对齐源语言和目标语言之间的词语对应关系。这些可视化图在学术报告里反复出现,成为神经网络可解释性的经典案例。但可视化图里的对齐关系只在短句和中等长度句子上清晰可辨。当句子变长、从句嵌套变深、指代关系变远,注意力权重开始分散,像一张对焦失败的相片,模糊地覆盖在多个位置上,不再有明确的峰值。

这种注意力分散的现象在内部测试中被反复观察到。工程师们给它起了一个名字叫“注意力稀释”。当源语言句子的信息密度超过某个阈值,模型的注意力就不再集中在关键位置,而是均匀地洒在整个句子上,等于没有注意力。这种情况在翻译法律合同和技术文档时尤其常见,因为这些文本天然具有高信息密度和复杂的修饰关系。一份德文技术手册里的典型句子可能包含四层从句嵌套,主语出现在第一行,谓语动词出现在第三行,中间夹着两个插入语和一个定语从句。人类译者可以靠语法知识和专业经验理清这些关系,但循环网络编码器在读完第三行时,第一行的精确信息已经在隐藏状态中被覆盖了多次。注意力机制试图弥补,但编码器提供的源语言表示本身已经丢失了细节,注意力权重再精准也无法从残骸中找回已经消失的信息。

这个问题在2016年被提炼成了一个更根本的追问:编码器生成的固定维度向量到底能承载多少信息?信息论给出的是一个冷酷的答案。一个维度为d的向量,在给定精度下,能区分的状态数量是有限的。当源语言句子的信息量超过这个上限时,压缩必然是有损的。编码器被迫做出选择:保留什么,丢弃什么。而循环网络的顺序结构决定了这种选择是局部的、渐进的、不可回溯的。编码器在读到句子中段时,并不知道后文会出现什么,它只能根据当前已读内容决定保留哪些信息。当后文出现了与前文呼应的关键信息时——比如一个指代前文的代词、一个修正前文的从句——编码器已经无法回头修改之前的压缩决策。信息一旦被丢弃,就永远丢失了。注意力机制可以让解码器绕过这个瓶颈去直接查看源语言的词向量,但词向量本身并不包含上下文信息。上下文信息恰恰是编码器应该提供、却因为容量限制而丢失的那部分。

这个死结让2016年的机器翻译研究进入了一个奇怪的阶段。论文数量在增长,会议在扩大,工业界的招聘需求在飙升,但核心指标的进步速度在放缓。ACL和EMNLL的录用论文里,关于神经机器翻译的工作占据了越来越大的比例,但大多数论文报告的改进幅度在统计显著性的边缘徘徊。百分之零点三的BLEU提升、百分之零点五的TER降低,这些数字在论文的表格里被加粗标注,但在工程团队的内部测试中往往无法复现。评测集的过拟合开始成为一个隐忧。研究者们发现,某些在标准评测集上表现优异的模型,在换用另一个领域的测试数据时性能大幅下降。法律文本上训练的模型在新闻文本上表现不佳,新闻文本上训练的模型在口语对话上几乎崩溃。模型的泛化能力远低于论文中报告的数字所暗示的水平。

这个问题的根源仍然指向循环网络的架构缺陷。顺序计算模式让模型对训练数据的分布异常敏感。因为每一步的计算都依赖前一步的隐藏状态,误差会沿着时间轴累积和放大。当训练数据和测试数据的分布不一致时——比如句子长度分布不同、从句嵌套深度不同、词汇使用模式不同——累积误差的模式也会不同。模型在训练集上学到的误差修正策略,在测试集上可能完全失效。这就像一个习惯了某种特定笔迹的抄写员,换了一种字体就开始频繁出错。

它还没有凝结成一篇革命性的论文,但它已经成了一种集体困惑。翻译任务把这个困惑推向极致,因为翻译对长距离依赖的要求最为苛刻,对训练效率的渴望最为迫切,对输出质量的门槛最为严格。当翻译这个具体而顽固的工程困境逼到墙角,整个序列建模领域都被迫正视循环网络的根本局限。这一章所描述的压力在2016年底达到了一个临界状态。翻译团队的工程师们知道,现有架构的潜力已经消耗殆尽,修补的空间越来越小。他们也知道,继续在循环网络的框架内堆参数、加层数、扩数据,只能换来边际收益递减。模型规模扩张的收益递减问题第一次在这里显形。当所有人都意识到当前架构的生产率极限已经被逼近,一种新的技术范式的必要性就开始在集体心智中成型。翻译之困让整个领域付出了代价,而这个代价最终变成了下一场变革的燃料。2017年,一篇题为《Attention Is All You Need》的论文给出了回应,但那一天到来之前,困在瓶颈里的研究者们还要继续跟健忘的模型搏斗。

德语复合句还挂在测试集的末尾,错误率不再下降,只是稳定地停留在那个令人生厌的水平。工程师们知道,这个问题不会在现有架构内消失了。他们也知道,什么东西正在逼近。那种感觉清晰而沉重,就像站在一扇紧闭的门前,门把手已经摸到了,但推开的动作还没有发生。