利用某中心的机器翻译服务自动翻译《动手学深度学习》
《动手学深度学习》(D2L.ai)是一本开源教材,旨在让每个人都能接触深度学习。该书包含交互式 Jupyter 笔记本,其中提供了 PyTorch、JAX、TensorFlow 和 MXNet 的自包含代码,以及真实世界的示例、说明图和数学公式。迄今为止,D2L 已被全球 400 多所大学采用,例如剑桥大学、斯坦福大学、麻省理工学院、卡内基梅隆大学和清华大学。
由于该书的广泛采用,一个贡献者社区已经形成,致力于多种语言的翻译工作,包括中文、日文、韩文、葡萄牙文、土耳其文和越南文。为了高效处理这些多语言任务,我们利用某中心的翻译服务开发了自动机器翻译与同步系统,旨在将人工翻译的工作量减少 80%。AMTS 可应用于所有语言的翻译,每个特定语言的子 AMTS 流水线都根据语言特点和译者偏好拥有其独特的功能。
在本博文中,我们将讨论如何构建 AMTS 框架架构、其子流水线以及子流水线的构建模块。我们将通过两个语言对(英语 :left-right_arrow: 中文和英语 :left-right_arrow: 西班牙语)的翻译来演示和分析翻译效果。通过这些分析,我们将推荐确保翻译质量和效率的最佳实践。
框架概述
用户可以使用某中心翻译服务的主动定制翻译功能,通过提供定制化的并行数据形式的翻译示例,来实时自定义翻译输出。并行数据由源语言中的一系列文本示例以及一种或多种目标语言中的期望翻译组成。在翻译过程中,ACT 会自动从并行数据中选择最相关的片段,并根据这些片段对实时更新翻译模型。这使得翻译结果能更好地匹配并行数据的风格和内容。
AMTS 框架由多个子流水线组成,每个子流水线处理一种语言翻译(例如英语到中文、英语到西班牙语等)。多个翻译子流水线可以并行处理。
从根本上说,子流水线包含以下步骤:
- 准备并行数据:并行数据由一系列文本示例对组成,分别来自源语言(例如英语)和目标语言(例如中文)。使用 AMTS,我们首先准备两种语言的数据集,然后将它们组合成一 一对应的配对。
- 通过批量作业进行翻译:我们使用某中心翻译服务的 API 调用
CreateParallelData从某中心的简单存储服务导入输入文件,并在某中心翻译服务中创建并行数据资源,为批量翻译作业做好准备。使用上一步构建的并行数据资源,我们定制某中心翻译服务,并使用其异步批量处理操作来批量翻译一组源语言文档。翻译后的目标语言文档存储在某中心的 S3 中。
并行数据的准备与创建
在并行数据准备步骤中,我们从源文档(D2L 英文版书的章节)和专业人工翻译产生的译文(例如 D2L 中文版的对应章节)构建并行数据集。软件模块从两个文档中提取文本(忽略代码和图片块),将它们配对,并以 CSV 文件格式存储。并行数据的示例如下表所示:
| English | Chinese |
|---|---|
| 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
)
英-中和中-英翻译的结果对比如下表所示。观察到使用并行数据的翻译相比传统方法有所改进。
| Article | EN to ZH | ZH to EN |
| :--- | :--- | :--- | :--- |
| | 无 ACT | 有 ACT | 无 ACT | 有 ACT |
| approx-training | 0.553 | 0.549 | 0.717 | 0.747 |
| bert-dataset | 0.548 | 0.612 | 0.771 | 0.831 |
| language-models-and-dataset | 0.502 | 0.518 | 0.683 | 0.736 |
| machine-translation-and-dataset | 0.519 | 0.546 | 0.706 | 0.788 |
| sentiment-analysis-and-dataset | 0.558 | 0.631 | 0.725 | 0.828 |
| Average | 0.536 | 0.5712 | 0.7204 | 0.786 |
微调并行数据以提升翻译质量
为了进一步提升翻译质量,我们以更细粒度的方式构建并行数据对。不再是从源文档和参考文档中提取并行段落并进行配对,而是将每个段落进一步分割成多个句子,并使用句子对作为训练示例。
| EN | ZH |
|---|---|
| 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 | 下面,我们看一下如何将预处理后的数据加载到小批量中用于训练 |
测试了段落对和句子对两种方法,发现更细粒度的数据(句子对)能产生比粗粒度数据(段落对)更好的翻译质量。英-中翻译的对比结果如下表所示。
| Article | EN to ZH | ZH to EN |
| :--- | :--- | :--- | :--- |
| | ACT(段落对) | ACT(句子对) | ACT(段落对) | ACT(句子对) |
| approx-training | 0.549 | 0.589 | 0.747 | 0.77 |
| bert-dataset | 0.612 | 0.689 | 0.831 | 0.9 |
| language-models-and-dataset | 0.518 | 0.607 | 0.736 | 0.806 |
| machine-translation-and-dataset | 0.546 | 0.599 | 0.788 | 0.89 |
| sentiment-analysis-and-dataset | 0.631 | 0.712 | 0.828 | 0.862 |
| Average | 0.5712 | 0.6392 | 0.786 | 0.8456 |
将并行数据的使用扩展到通用机器翻译
为了将并行数据的可用性扩展到通用机器翻译,需要从大量已翻译的文档中构建并行数据集。为了最大限度地提高翻译准确性,并行数据集应具有与待翻译文档相同的上下文和主题。
在英-西子流水线中测试了这种方法。并行数据对是使用关键词“机器学习”从网络上爬取的英-西文章构建的。
在将一篇英文文章(在结果表中缩写为 DLvsML)翻译成西班牙语时应用了此并行数据,并将结果与不使用并行数据的传统翻译结果进行了比较。BLEU 分数表明,具有相同主题(“机器学习”)的并行数据确实有助于提高通用机器翻译的性能。
| EN to ES | ES to EN | |
|---|---|---|
| 无 ACT | 有 ACT | |
| DLvsML | 0.792 | 0.824 |
使用和不使用 ACT 的英-西翻译在流畅度上的相对差异可以从下表中看出。
| EN 源文本 | ES 参考译文(人工翻译) | ES 翻译(无 ACT) | ES 翻译(有 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 cases | Casos de uso del aprendizaje profundo | Casos de uso de aprendizaje profundo | Casos prácticos de aprendizaje profundo |
| Image caption generation | Generación de subtítulos para imágenes | Generación de leyendas de imágenes | Generación de subtítulos de imagen |
结论与最佳实践
本文介绍了自动机器翻译与同步框架及其流水线,以及其在英-中和英-西 D2L.ai 自动翻译中的应用。还讨论了在翻译流水线中使用某中心翻译服务的最佳实践,特别是带有并行数据的主动定制翻译功能的优势。
利用某中心翻译服务,AMTS 流水线提供了流畅的翻译。非正式的定性评估表明,翻译后的文本读起来自然,并且大部分语法正确。
通常,带有并行数据的 ACT 功能提高了 AMTS 子流水线中的翻译质量。结果表明,使用 ACT 功能比使用传统的某中心翻译实时翻译服务能带来更好的性能。
并行数据对的粒度越细,翻译性能越好。建议将并行数据构建为句子对,而不是段落对。
正在努力进一步改进 AMTS 框架,以提高其他语言的翻译质量。欢迎提供反馈。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码
