10.2 编码器-解码器框架 353
10.2 编码器-解码器框架
说到神经机器翻译就不得不提编码器-解码器模型,或编码器-解码器框架(Encoder-
Decoder Paradigm)。本质上,编码器-解码器模型是描述输入-输出之间关系的一种
方式。编码器-解码器这个概念在日常生活中并不少见。例如,在电视系统上为了便
于视频的传播,会使用各种编码器将视频编码成数字信号,在客户端,相应的解码
器组件会把收到的数字信号解码为视频。另外一个更贴近生活的例子是电话,它通
过对声波和电信号进行相互转换,达到传递声音的目的。这种“先编码,再解码”的
思想被应用到密码学、信息论等多个领域。
不难看出,机器翻译问题也完美的贴合编码器-解码器结构的特点。可以将源语
言编码为类似信息传输中的数字信号,然后利用解码器对其进行转换,生成目标语
言。下面就来看一下神经机器翻译是如何在编码器-解码器框架下进行工作的。
10.2.1 框架结构
编码器-解码器框架是一种典型的基于“表示”的模型。编码器的作用是将输入
的文字序列通过某种转换变为一种新的“表示”形式,这种“表示”包含了输入序列
的所有信息。之后,解码器把这种“表示”重新转换为输出的文字序列。这其中的一
个核心问题是表示学习,即:如何定义对输入文字序列的表示形式,并自动学习这
种表示,同时应用它生成输出序列。一般来说,不同的表示学习方法可以对应不同
的机器翻译模型,比如,在最初的神经机器翻译模型中,源语言句子都被表示为一
个独立的向量,这时表示结果是静态的;而在注意力机制中,源语言句子的表示是
动态的,也就是翻译目标语言的每个单词时都会使用不同的表示结果。
图10.5是一个应用编码器-解码器结构来解决机器翻译问题的简单实例。给定一
个中文句子“我/对/你/感到/满意”,编码器会将这句话编码成一个实数向量 (0.2,−1,6,
5,0.7,−2),这个向量就是源语言句子的“表示”结果。虽然有些不可思议,但是神
经机器翻译模型把这个向量等同于输入序列。向量中的数字并没有实际的意义,然
而解码器却能从中提取到源语言句子中所包含的信息。也有研究人员把向量的每一
个维度看作是一个“特征”,这样源语言句子就被表示成多个“特征”的联合,而且
这些特征可以被自动学习。有了这样的源语言句子的“表示”,解码器可以把这个实
数向量作为输入,然后逐词生成目标语言句子“I am satisfied with you”。
在源语言句子的表示形式确定之后,需要设计相应的编码器和解码器结构。在
当今主流的神经机器翻译系统中,编码器由词嵌入层和中间网络层组成。当输入一
串单词序列时,词嵌入层会将每个单词映射到多维实数表示空间,这个过程也被称
为词嵌入。之后中间层会对词嵌入向量进行更深层的抽象,得到输入单词序列的中
间表示。中间层的实现方式有很多,比如:循环神经网络、卷积神经网络、自注意力
机制等都是模型常用的结构。解码器的结构基本上和编码器是一致的,在基于循环
神经网络的翻译模型中,解码器只比编码器多了输出层,用于输出每个目标语言位
置的单词生成概率,而在基于自注意力机制的翻译模型中,除了输出层,解码器还