Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

13.2 使用编码器—解码器进行机器翻译

MT 的标准架构是编码器—解码器 Transformer,也称序列到序列模型。13.3 节将介绍该架构应用于 Transformer 的细节;这里先讨论整体任务。

大多数机器翻译任务采用一种简化假设:每个句子可以独立翻译。因此暂时只考虑单句。给定源语言句子,MT 任务就是生成对应的目标语言句子。例如,系统收到英语句子:

The green witch arrived

并须将其译成西班牙语:

Llegó la bruja verde

MT 使用监督式机器学习:训练时,系统接收大量平行句(每个源语言句子都与目标语言句子匹配),并学习把源句映射为目标句。实际系统不直接使用词,而把句子拆成子词词元序列(词元可以是词、子词或单个字符)。随后训练系统,使其在给定源语言词元序列 x1,,xnx_1,\ldots,x_n 时,最大化目标语言词元序列 y1,,ymy_1,\ldots,y_m 的概率:

P(y1,,ymx1,,xn)(13.7)P (y _ {1}, \ldots , y _ {m} | x _ {1}, \ldots , x _ {n})\tag{13.7}

编码器—解码器架构不直接使用输入词元,而由两个组件构成。编码器接收输入词 x=[x1,,xn]x=[x_1,\ldots,x_n],产生中间上下文 h;解码时,系统取得 h,逐词生成输出 y:

h=encoder(x)(13.8)\mathbf {h} = \operatorname{encoder} (x)\tag{13.8}
yt+1=decoder(h,y1,,yt)t[1,,m](13.9)y _ {t + 1} = \operatorname{decoder} (\mathbf {h}, y _ {1}, \dots , y _ {t}) \quad \forall t \in [ 1, \dots , m ]\tag{13.9}

下面先讨论子词词元化,再说明如何获取训练用平行语料库,最后介绍编码器—解码器架构的细节。

13.2.1 词元化

机器翻译系统使用预先固定的词表。该词表不采用空格分隔的词,而是由第 2 章概述的 BPE 等子词词元化算法生成。源语言与目标语言共用一个词表,因而容易把姓名等词元从源端复制到目标端。使用语言间共享词元的子词词元化,可以自然地在英语、印地语等以空格分词的语言,与汉语、泰语等不使用空格分词的语言之间翻译。

构建词表时,在同时包含源语言和目标语言数据的语料库上运行子词词元化算法。

现代系统通常使用比图 2.6 中简单 BPE 更强的算法。一些系统(如 BERT)使用 BPE 的变体 WordPiece:它不选择频率最高的词元对合并,而选择最能提高词元化结果之语言模型概率的合并。WordPiece 在每个词元开头使用特殊符号。下面是 Google MT 系统得到的一个词元化结果(Wu et al., 2016):

词:Jet makers feud over seat width with big orders at stake
WordPiece:_J et _makers _fe ud _over _seat _width _with _big _orders _at _stake

WordPiece 算法接收训练语料库和期望词表大小 V,步骤如下:

  1. 用字符初始化 WordPiece 词典(例如 Unicode 字符的一个子集,其余字符统一归入特殊未知字符词元)。

  2. 重复以下过程,直到词表包含 V 个 WordPiece: a. 使用当前 WordPiece 集合,在训练语料库上训练 n 元语言模型。 b. 考察把当前词典中两个 WordPiece 串接起来形成的所有新 WordPiece,选择最能提高训练语料库之语言模型概率的一项。

BPE 需要指定合并次数;WordPiece 则指定词表总大小,这是更直观的参数。常用词表包含 8K~32K 个 WordPiece。

使用更普遍的另一算法名称稍有歧义,称为 unigram 算法(Kudo, 2018),有时也称 SentencePiece 算法;ALBERT(Lan et al., 2020)与 T5(Raffel et al., 2020)等系统都使用它。(SentencePiece 库为词元化算法提供了实用封装,并默认使用 unigram 算法(Kudo and Richardson, 2018),所以作者常说使用 SentencePiece 词元化,实际指的是 unigram 算法。)

unigram 词元化不通过合并词元逐步构建词表,而从包含每个 Unicode 字符及所有高频字符序列(对使用空格的语言还包括全部空格分隔词)的庞大词表开始,迭代移除词元,直至达到目标大小。该算法较复杂,涉及用后缀树高效存储大量词元,并用 EM 算法迭代分配词元概率,详见 Kudo(2018)及 Kudo and Richardson(2018)。粗略而言,算法反复估计每个词元的概率,以各种方式对输入数据词元化,删除一定比例未出现在高概率词元化方案中的词元,直到词表缩减到目标大小。

为什么 unigram 词元化优于 BPE?BPE 往往生成大量很小且无意义的词元,因为它只能逐字符合并以创建较大的词或语素;它还倾向把 ed 等高频词元与相邻词元合并。Bostrom and Durrett(2020)的以下例子表明,unigram 往往产生语义更明确的词元:

原文:corrupted原文:Completely preposterous suggestions
BPE:cor ruptedBPE:Complete t ely prep ost erous suggest ions
Unigram:corrupt edUnigram:Complete ly pre post er ous suggestion s

13.2.2 创建训练数据

机器翻译模型在平行语料库(parallel corpus)上训练,这种以两种(或多种)语言出现的文本有时称为双语文本(bitext)。现有大量平行语料库。有些来自政府:从欧洲议会会议记录中抽取的 Europarl 语料库(Koehn, 2005)涵盖 21 种欧洲语言,每种语言有 40 万~200 万个句子;联合国平行语料库包含联合国六种官方语言(阿拉伯语、汉语、英语、法语、俄语、西班牙语)各约 1,000 万个句子(Ziemski et al., 2016)。其他平行语料库来自电影和电视字幕,如 OpenSubtitles(Lison and Tiedemann, 2016);也有来自一般网络文本的语料库,如从 CommonCrawl 中抽取、包含 23 种欧盟语言与英语之间 2.23 亿个句对的 ParaCrawl(Bañón et al., 2020)。

句子对齐 标准 MT 训练语料库以对齐句对的形式提供。为低资源语言或新领域创建新语料库时,必须建立这些句子对齐。图 13.4 给出了一个假想示例。

E1: “Good morning,” said the little prince.F1: -Bonjour, dit le petit prince.
E2: “Good morning,” said the merchant.F2: -Bonjour, dit le marchand de pilules perfectionnées qui apaisent la soif.
E3: This was a merchant who sold pills that had been perfected to quench thirst.F3: On en avale une par semaine et l'on n'éprouve plus le besoin de boire.
E4: You just swallow one pill a week and you won't feel the need for anything to drink.F4: -C'est une grosse économie de temps, dit le marchand.
E5: “They save a huge amount of time,” said the merchant.F5: Les experts ont fait des calculs.
E6: “Fifty-three minutes a week.”F6: On épargne cinquante-trois minutes par semaine.
E7: “If I had fifty-three minutes to spend?” said the little prince to himself.F7: “Moi, se dit le petit prince, si j'avais cinquante-trois minutes à dépenser, je marcherais tout doucement vers une fontaine...”
E8: “I would take a stroll to a spring of fresh water”

图 13.4 英法句子对齐示例;句子摘自 Antoine de Saint-Exupéry 的《小王子》及一个假想译本。句子对齐接收句子 e1,,ene_1,\ldots,e_nf1,,fmf_1,\ldots,f_m,找出互为翻译的最小句集,其中既包括 (e1,f1)(e_1,f_1)(e4,f3)(e_4,f_3)(e5,f4)(e_5,f_4)(e6,f6)(e_6,f_6) 等一对一映射,也包括 (e2/e3,f2)(e_2/e_3,f_2) 等二对一对齐,以及 (f5)(f_5) 等空对齐。

给定互为翻译的两篇文档,产生句子对齐通常需要两步:

• 一个代价函数:接收一段源语言句子和一段目标语言句子,返回衡量二者互为翻译之可能性的分数。

• 一个对齐算法:利用这些分数找出文档之间的良好对齐。

为评估跨语言句子相似度,需要使用多语言嵌入空间,使不同语言的句子位于同一嵌入空间(Artetxe and Schwenk, 2019)。在这样的空间中,嵌入的余弦相似度自然可作为评分函数(Schwenk, 2018)。Thompson and Koehn(2019)为源、目标文档中的两个句子或跨度 x、y 给出如下代价函数:

c(x,y)=(1cos(x,y))nSents(x)nSents(y)s=1S1cos(x,ys)+s=1S1cos(xs,y)(13.10)c (x, y) = \frac {(1 - \cos (x , y)) \mathrm{nSents} (x) \mathrm{nSents} (y)}{\sum_ {s = 1} ^ {S} 1 - \cos (x , y _ {s}) + \sum_ {s = 1} ^ {S} 1 - \cos (x _ {s} , y)}\tag{13.10}

其中,nSents() 返回句子数,这会使指标偏向大量单句对齐,而非对齐很大的跨度。分母用于归一化相似度;x1,,xS,y1,,ySx_1,\ldots,x_S,y_1,\ldots,y_S 是分别从两篇文档中随机采样的句子。

对齐算法通常采用动态规划(Gale and Church, 1993),即第 2 章最小编辑距离算法的简单扩展。

最后,删除有噪声的句对也有助于清理语料库。可以编写规则删除准确性低的句对,例如句子过长、过短、URL 不同,甚至彼此过于相似而可能是复制而非翻译的句对;也可以按多语言嵌入余弦分数为句对排序,并丢弃低分项。