13.2 使用编码器—解码器进行机器翻译
MT 的标准架构是编码器—解码器 Transformer,也称序列到序列模型。13.3 节将介绍该架构应用于 Transformer 的细节;这里先讨论整体任务。
大多数机器翻译任务采用一种简化假设:每个句子可以独立翻译。因此暂时只考虑单句。给定源语言句子,MT 任务就是生成对应的目标语言句子。例如,系统收到英语句子:
The green witch arrived
并须将其译成西班牙语:
Llegó la bruja verde
MT 使用监督式机器学习:训练时,系统接收大量平行句(每个源语言句子都与目标语言句子匹配),并学习把源句映射为目标句。实际系统不直接使用词,而把句子拆成子词词元序列(词元可以是词、子词或单个字符)。随后训练系统,使其在给定源语言词元序列 时,最大化目标语言词元序列 的概率:
编码器—解码器架构不直接使用输入词元,而由两个组件构成。编码器接收输入词 ,产生中间上下文 h;解码时,系统取得 h,逐词生成输出 y:
下面先讨论子词词元化,再说明如何获取训练用平行语料库,最后介绍编码器—解码器架构的细节。
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 _stakeWordPiece 算法接收训练语料库和期望词表大小 V,步骤如下:
用字符初始化 WordPiece 词典(例如 Unicode 字符的一个子集,其余字符统一归入特殊未知字符词元)。
重复以下过程,直到词表包含 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 rupted | BPE:Complete t ely prep ost erous suggest ions |
| Unigram:corrupt ed | Unigram: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 的《小王子》及一个假想译本。句子对齐接收句子 与 ,找出互为翻译的最小句集,其中既包括 、、、 等一对一映射,也包括 等二对一对齐,以及 等空对齐。
给定互为翻译的两篇文档,产生句子对齐通常需要两步:
• 一个代价函数:接收一段源语言句子和一段目标语言句子,返回衡量二者互为翻译之可能性的分数。
• 一个对齐算法:利用这些分数找出文档之间的良好对齐。
为评估跨语言句子相似度,需要使用多语言嵌入空间,使不同语言的句子位于同一嵌入空间(Artetxe and Schwenk, 2019)。在这样的空间中,嵌入的余弦相似度自然可作为评分函数(Schwenk, 2018)。Thompson and Koehn(2019)为源、目标文档中的两个句子或跨度 x、y 给出如下代价函数:
其中,nSents() 返回句子数,这会使指标偏向大量单句对齐,而非对齐很大的跨度。分母用于归一化相似度; 是分别从两篇文档中随机采样的句子。
对齐算法通常采用动态规划(Gale and Church, 1993),即第 2 章最小编辑距离算法的简单扩展。
最后,删除有噪声的句对也有助于清理语料库。可以编写规则删除准确性低的句对,例如句子过长、过短、URL 不同,甚至彼此过于相似而可能是复制而非翻译的句对;也可以按多语言嵌入余弦分数为句对排序,并丢弃低分项。