利用亚马逊翻译自动翻译《动手学深度学习》的技术解析

4 阅读12分钟

利用某中心翻译自动翻译《动手学深度学习》的技术解析

《动手学深度学习》(D2L.ai)是一本让深度学习触手可及的开源教科书。其特色在于包含了使用PyTorch、JAX、TensorFlow和MXNet框架的交互式Jupyter笔记本,以及自包含代码、现实世界的示例、说明性图表和数学公式。迄今为止,D2L已被全球400多所大学采用,例如剑桥大学、斯坦福大学、麻省理工学院、卡内基梅隆大学和清华大学。

随着这本书被广泛采用,一个贡献者社区已经形成,致力于多种语言的翻译工作,包括中文、日语、韩语、葡萄牙语、土耳其语和越南语。为了高效处理这些多种语言,我们使用某中心翻译开发了自动机器翻译与同步(AMTS)系统,目标是减少人工翻译80%的工作量。AMTS可以应用于所有语言的翻译,并且每个特定语言的子AMTS管道根据语言特性和译者偏好都有其独特的功能。在本博客文章中,我们将讨论如何构建AMTS框架架构、其子管道以及子管道的构建模块。我们将演示并分析两种语言对之间的翻译:英语 ↔ 中文和英语 ↔ 西班牙语。通过这些分析,我们将推荐确保翻译质量和效率的最佳实践。

框架概述

客户可以使用某中心翻译的主动定制翻译(ACT)功能,通过提供定制化的并行数据形式的翻译示例,来实时定制翻译输出。并行数据由源语言中的一系列文本示例以及一个或多个目标语言中的期望翻译组成。在翻译过程中,ACT会自动从并行数据中选择最相关的片段,并根据这些片段对实时更新翻译模型。这使得翻译结果能更好地匹配并行数据的风格和内容。

AMTS框架由多个子管道组成,每个子管道处理一种语言的翻译——英语到中文、英语到西班牙语等。多个翻译子管道可以并行处理。

从根本上说,子管道包括以下步骤:

  1. 准备并行数据:并行数据由一系列文本示例对组成,包括源语言(例如英语)和目标语言(例如中文)。使用AMTS,我们首先准备两种语言的数据集,然后将它们组合成一一对应的配对。
  2. 通过批处理作业进行翻译:我们使用某中心翻译API调用CreateParallelData从某中心简单存储服务(S3)导入输入文件,并在某中心翻译中创建一个并行数据资源,为批处理翻译作业做好准备。使用上一步构建的并行数据资源,我们定制某中心翻译并使用其异步批处理操作批量翻译一组源语言文档。翻译后的目标语言文档存储在某中心S3中。

并行数据的准备与创建

在并行数据准备步骤中,我们从源文档(D2L英文书的章节)和专业人工翻译产生的译文(例如,D2L中文书的并行章节)构建并行数据集。软件模块从两个文档中提取文本——忽略代码和图片块——并将它们配对,存储在CSV文件中。并行数据的示例如下表所示。

EnglishChinese
Nonetheless, language models are of great service even in their limited form. For instance, the phrases “to recognize speech” and “to wreck a nice beach” sound very similar. This can cause ambiguity in speech recognition, which is easily resolved through a language model that rejects the second translation as outlandish. Likewise, in a document summarization algorithm it is worthwhile knowing that “dog bites man” is much more frequent than “man bites dog”, or that “I want to eat grandma” is a rather disturbing statement, whereas “I want to eat, grandma” is much more benign.尽管如此,语言模型依然是非常有用的。例如,短语“to recognize speech”和“to wreck a nice beach”读音上听起来非常相似。这种相似性会导致语音识别中的歧义,但是这很容易通过语言模型来解决,因为第二句的语义很奇怪。同样,在文档摘要生成算法中,“狗咬人”比“人咬狗”出现的频率要高得多,或者“我想吃奶奶”是一个相当匪夷所思的语句,而“我想吃,奶奶”则要正常得多。
Machine translation refers to the automatic translation of a sequence from one language to another. In fact, this field may date back to 1940s soon after digital computers were invented, especially by considering the use of computers for cracking language codes in World War II. For decades, statistical approaches had been dominant in this field before the rise of end-to-end learning using neural networks. The latter is often called neural machine translation to distinguish itself from statistical machine translation that involves statistical analysis in components such as the translation model and the language model.机器翻译(machine translation)指的是将序列从一种语言自动翻译成另一种语言。事实上,这个研究领域可以追溯到数字计算机发明后不久的20世纪40年代,特别是在第二次世界大战中使用计算机破解语言编码。几十年来,在使用神经网络进行端到端学习的兴起之前,统计学方法在这一领域一直占据主导地位
Emphasizing end-to-end learning, this book will focus on neural machine translation methods. Different from our language model problem in the last section, whose corpus is in one single language, machine translation datasets are composed of pairs of text sequences that are in the source language and the target language, respectively. Thus, instead of reusing the preprocessing routine for language modeling, we need a different way to preprocess machine translation datasets. In the following, we show how to load the preprocessed data into mini batches for training.本书的关注点是神经网络机器翻译方法,强调的是端到端的学习。与 上节中的语料库是单一语言的语言模型问题存在不同,机器翻译的数据集是由源语言和目标语言的文本序列对组成的。因此,我们需要一种完全不同的方法来预处理机器翻译数据集,而不是复用语言模型的预处理程序。下面,我们看一下如何将预处理后的数据加载到小批量中用于训练

当并行数据文件创建并准备就绪后,我们将其上传到S3存储桶中的一个文件夹,并使用CreateParallelData在某中心翻译中启动一个创建作业。如果只想用新的输入更新现有的并行数据资源,则应使用UpdateParallelData API调用。 作业完成后,我们可以在某中心翻译管理控制台中找到并行数据资源。该资源可以通过AWS控制台中的下载、更新和删除按钮进行进一步管理,也可以通过AWS CLI和公共API进行管理。

使用并行数据进行异步批处理翻译

创建并行数据资源后,子管道的下一步是使用某中心翻译的StartTextTranslationJob API调用来启动一个批量异步翻译。子管道将源文件上传到某中心S3存储桶的一个文件夹中。 一个批处理作业可以处理多个源文档的翻译,输出文件将被放入另一个S3存储桶文件夹。除了输入和输出数据配置外,源语言、目标语言和准备好的并行数据资源也在API调用中指定为参数。

src_lang = "en"
tgt_lang =  "zh"
src_fdr = "input-short-test-en2zh"

pd_name = "d2l-parallel-data_v2"

response = translate_client.start_text_translation_job(
            JobName='D2L1',
            InputDataConfig={
                'S3Uri': 's3://'+S3_BUCKET+'/'+src_fdr+'/',
                'ContentType': 'text/html'
            },
            OutputDataConfig={
                'S3Uri': 's3://'+S3_BUCKET+'/output/',
            },
            DataAccessRoleArn=ROLE_ARN,
            SourceLanguageCode=src_lang,
            TargetLanguageCodes=[tgt_lang, ],
            ParallelDataNames=pd_name
)

根据输入文件的数量,作业需要几分钟到几小时才能完成。我们可以在某中心翻译管理控制台上找到作业配置和状态,包括输出文件的位置。 翻译后的文档可在输出S3文件夹中找到,文件名为<目标语言>.<源文件名>。用户可以下载它们并进行进一步的评估。

使用并行数据获得更好的翻译

为了评估每个子管道的翻译性能,我们从D2L英文版中选取了五篇文章,通过英-中子管道将其翻译成中文。然后,我们计算了每篇翻译文档的BLEU分数。BLEU(双语评估替补)分数通过计算AMTS翻译输出与人工翻译参考译文的相似度来评估质量。该分数介于0到1之间;分数越高,翻译质量越好。 然后,我们将AMTS生成的结果与使用传统方法(无并行数据)翻译同一文档的结果进行比较。传统方法通过TranslateText API调用实现,其参数包括源文本名称以及源语言和目标语言。

src_lang = "en"
tgt_lang =  "zh"

response = translate_client.translate_text(
         Text = text,
         TerminologyNames = [],
         SourceLanguageCode = src_lang,
         TargetLanguageCode = tgt_lang
)

下表比较了英-中和中-英翻译的结果。我们观察到,使用并行数据的翻译比传统方法有所改进。

ArticleEN to ZHZH to EN
Without ACTWith ACTWithout ACTWith ACT
approx-training0.5530.5490.7170.747
bert-dataset0.5480.6120.7710.831
language-models-and-dataset0.5020.5180.6830.736
machine-translation-and-dataset0.5190.5460.7060.788
sentiment-analysis-and-dataset0.5580.6310.7250.828
Average0.5360.57120.72040.786

微调并行数据以提高翻译质量

为了进一步提高翻译质量,我们以更细粒度的方式构建并行数据对。我们不再从源文档和参考文档中提取并行段落并进行配对,而是将每个段落进一步分割成多个句子,并使用句子对作为训练示例。

ENZH
Likewise, in a document summarization algorithm it is worthwhile knowing that “dog bites man” is much more frequent than “man bites dog”, or that “I want to eat grandma” is a rather disturbing statement, whereas “I want to eat, grandma” is much more benign同样,在文档摘要生成算法中,“狗咬人”比“人咬狗”出现的频率要高得多,或者“我想吃奶奶”是一个相当匪夷所思的语句,而“我想吃,奶奶”则要正常得多
For decades, statistical approaches had been dominant in this field before the rise of end-to-end learning using neural networks几十年来,在使用神经网络进行端到端学习的兴起之前,统计学方法在这一领域一直占据主导地位
In the following, we show how to load the preprocessed data into minibatches for training下面,我们看一下如何将预处理后的数据加载到小批量中用于训练

我们测试了段落对和句子对两种方法,发现更细粒度的数据(句子对)比粗粒度的数据(段落对)能产生更好的翻译质量。下表显示了英-中翻译的比较结果。

ArticleEN to ZHZH to EN
ACT by “pair of paragraph”ACT by “pair of sentence”ACT by “pair of paragraph”ACT by “pair of sentence”
approx-training0.5490.5890.7470.77
bert-dataset0.6120.6890.8310.9
language-models-and-dataset0.5180.6070.7360.806
machine-translation-and-dataset0.5460.5990.7880.89
sentiment-analysis-and-dataset0.6310.7120.8280.862
Average0.57120.63920.7860.8456

将并行数据的应用扩展到通用机器翻译

为了将并行数据的可用性扩展到通用机器翻译,我们需要从大量的翻译文档中构建并行数据集。为了最大限度地提高翻译准确性,并行数据集应具有与待翻译文档相同的上下文和主题。 我们在英-西子管道中测试了这种方法。并行数据对是使用关键词“机器学习”从网络上爬取的英-西文章构建的。 我们将此并行数据应用于将一篇英文文章(结果表中缩写为DLvsML)翻译成西班牙语,并将结果与不使用并行数据的传统翻译结果进行了比较。BLEU分数表明,具有相同主题(“机器学习”)的并行数据确实有助于提高通用机器翻译的性能。

EN to ESES to EN
Without ACTWith ACTWithout ACTWith ACT
DLvsML0.7920.8240.8090.827

下表显示了使用和不使用ACT的英-西翻译的相对流畅度比较。

EN source textES reference text (human translation)ES translation without ACTES translation with ACT
Moves through the learning process by resolving the problem on an end-to-end basis.Pasa por el proceso de aprendizaje mediante la resolución del problema de un extremo a otro.Avanza en el proceso de aprendizaje resolviendo el problema de un extremo a otro.Avanza el proceso de aprendizaje resolviendo el problema de forma integral.
Deep learning use casesCasos de uso del aprendizaje profundoCasos de uso de aprendizaje profundoCasos prácticos de aprendizaje profundo
Image caption generationGeneración de subtítulos para imágenesGeneración de leyendas de imágenesGeneración de subtítulos de imagen

结论与最佳实践

在本文中,我们介绍了自动机器翻译与同步(AMTS)框架和管道及其在英-中和英-西D2L.ai自动翻译中的应用。我们还讨论了在翻译管道中使用某中心翻译服务的最佳实践,特别是使用并行数据的主动定制翻译(ACT)功能的优势。 利用某中心翻译服务,AMTS管道提供了流畅的翻译。非正式的定性评估表明,翻译后的文本读起来自然,并且在语法上基本正确。 总的来说,带有并行数据的ACT功能提高了AMTS子管道中的翻译质量。我们的结果表明,使用ACT功能比使用传统的某中心翻译实时翻译服务能带来更好的性能。 并行数据对的粒度越细,翻译性能越好。我们建议将并行数据构建为句子对,而不是段落对。 我们正在努力进一步改进AMTS框架,以提高其他语言的翻译质量。随时欢迎您的反馈。