亚马逊AWS官方博客

使用 Amazon Translate、AWS Lambda 和新推出的 Batch Translate API 翻译文档

出于商业和个人原因,越来越多的数字文本文件在全世界共享,在此趋势下,对翻译功能的需求变得越来越迫切。人们可以使用多种在线工具复制/粘贴文本,然后获得他们所选择语言的等效译文。虽然这是对(有限)文本进行临时翻译的好办法,但如果频繁执行,可能会很繁琐费时。

您的组织可能会在很大程度上依赖内容来记录产品和服务,教客户如何与您互动,或者只是分享您在做的一些比较好的事情。这种内容通常偏重于文本,而且几乎都用英文撰写。这样一来,语言知识不充分的人就很难理解它,从而可能会直接影响您与客户的关系。您需要一种自动化解决方案,它可以将一组文档从一种语言快速且经济高效地翻译成另一种语言。

在此博文中,我们将逐步介绍两种不同的文档翻译解决方案,一种是使用异步批量翻译对一批文档进行异步翻译的简单方法,另一种是使用 AWS Lambda 和 Amazon 实时翻译在文档到达时即同步翻译的高级方法。您可以使用最适合您需求的方法。

使用异步批量翻译的简单方法

Amazon Translate 是一种神经网络机器翻译服务,可提供快速、高质量且经济实惠的语言翻译。神经网络机器翻译是语言翻译自动化的一种形式,它使用深度学习模型来提供比传统的统计和基于规则的翻译算法更准确、发音更自然的翻译。这种翻译服务针对不同使用案例和领域的各种不同内容进行了训练,在多种内容上均表现良好。请访问 Amazon Translate 产品页面了解更多信息。

Amazon Translate 最近推出了异步批量翻译,您可以用它翻译大量文本或 HTML 文档。只需进行一次 API 调用,您即可将此文档集从一种语言翻译成另一种语言。您可以每天运行异步批量翻译,将您的文档、教学材料和博客本地化为您选择的语言。此外,您还可以监控批量翻译作业的进度,从指定输出文件夹中检索翻译结果。我们来回顾一下如何使用异步批量翻译。

我们使用下面列出的三种文本文件来回顾 Amazon Translate 批量翻译。 您可以在此处找到并下载这些文本文件。

文本文件 1:

Amazon Translate is a neural machine translation service that delivers fast, high-quality, and affordable language translation.

文本文件 2:

Neural machine translation is a form of language translation automation that uses deep learning models to deliver more accurate and more natural sounding translation than traditional statistical and rule-based translation algorithms.

文本文件 3:

Amazon Translate allows you to localize content - such as websites and applications - for international users, and to easily translate large volumes of text efficiently.

要使用此示例文本创建批量翻译作业,请完成以下步骤:

  1. 在 us-east-1 中创建 S3 存储桶并指定一个唯一的名称,例如 translate-job-batch-input
  2. 在该存储桶内创建一个文件夹,并命名为 raw
  3. 将需要翻译的文本文件上传到 s3://translate-job-batch-input/raw/ 中。此存储桶将包含批量翻译的输入。
  4. 在 us-east-1 中创建另一个 S3 存储桶,并指定一个唯一的名称,例如 translate-job-batch-output/
  5. 在该存储桶内创建一个文件夹,并命名为 output
  6. 批量翻译的输出将保存在 s3://translate-job-batch-output/output/ 中。
  7. 在 Amazon Translate 控制台上,选择批量翻译。
  8. 选择创建作业。
  9. 对于名称,请输入 MyTranslationJob
  10. 对于源语言,请选择英语。
  11. 对于目标语言,请选择德语。
  12. 对于输入 S3 位置,请输入 s3://translate-job-batch-input/raw/
  13. 对于文件格式,请选择 txt。
  14. 对于输出 S3 位置,请输入 s3://translate-job-batch-output/output/
  15. 对于访问权限,请选择创建 IAM 角色。
  16. 对于 IAM 角色,请选择输入和输出 S3 存储桶。
  17. 对于角色名称,请输入 translate-batch-role
  18. 选择创建作业。

创建好作业后,您可以在 Amazon Translate 控制台中看到作业是“已提交”状态,见以下截图。

当作业完成时,您将看到状态 Completed,且您翻译好的文档显示在您的输出 S3 存储桶中。以下屏幕截图显示了已完成作业的详细信息。

翻译好的文件存储在输出 S3 位置中,如下所示。

使用 AWS Lambda 和实时翻译的高级方法

您可以通过运行批量翻译作业轻松且经济高效地解决您的内容本地化问题。然而,有时候您没有时间积聚一批文档并为积聚的批量文档定期调用异步批量 API。在此情况下,您需要文档一准备好后马上就可以开始翻译。

为了实现此目标,我们使用事件驱动的架构。当新文档上传到指定 S3 存储桶后,我们将配置此 S3 存储桶的设置,以将通知发送至 AWS Lambda。收到通知后,AWS Lambda 将按顺序执行以下事件,即读取上传到 S3 存储桶的文档、从可以通过实时翻译 API 传递的文档中提取短片段、通过实时翻译 API 传递这些片段、使用实时翻译 API 输出重建翻译好的输出文档,然后将输出保存在指定输出位置。

下图展示了此架构。

使用 AWS CloudFormation 启动应用程序

您可以通过在 AWS CloudFormation 控制台中启动以下 AWS CloudFormation 堆栈来在您的 AWS 账户中轻松且经济高效地实施此解决方案:

部署应用程序

要部署应用程序,请完成以下步骤:

  1. 在 AWS CloudFormation 控制台上,选择使用新资源创建堆栈(标准)
  2. 选择 Amazon S3 URL 并将 https://s3.amazonaws.com/aws-ml-blog/artifacts/serverless-document-translation/translate-lambda-cfn-stack.yml 粘贴到 Amazon S3 URL 字段中,然后选择下一步。
  3. 对于堆栈名称,为此账户输入一个唯一的堆栈名称;例如,automated-document-translation
  4. 对于 IAMRoleName,为此账户输入一个唯一的 IAM 角色名称;例如 TranslationLambdaExecRole。Lambda 函数将利用此角色以访问所需的 Amazon S3 和 Amazon Translate API。此 IAM 角色附加了两个策略:一个是为输入和输出 S3 存储桶提供读取/写入权限(GetObjectPutObject)的自定义策略,一个是 AWS 管理的对 Amazon Translate 进行 API 调用的 TranslateReadOnly 策略。
  5. 对于 LambdaFunctionName,请输入唯一的 AWS Lambda 函数名称;例如 trigger-translation
  6. 对于 InputBucketName,请为堆栈创建的 Amazon S3 存储桶输入一个唯一的名称;例如 raw-input-bucket。输入文档将上传到此存储桶,然后再进行翻译。创建输入存储桶的名称时,仅使用小写字母字符,且不使用空格。此外,此操作将创建新的 S3 存储桶,因此,请勿使用现有存储桶的名称。有关更多信息,请参阅存储桶命名规则
  7. 对于 OutputBucketName,请为您的输出存储桶输入一个唯一名称;例如 translated-output-bucket。此存储桶将在翻译后存储输出文档。遵照与输入存储桶相同的命名规则。
  8. 对于 SourceLanguageCode,请输入您希望翻译的文档所处的语言代码;例如,英语用 en,或者 auto 用于自动检测语言。
  9. 对于 TargetLanguageCode,输入您希望翻译的文档所处的语言代码;例如,德语用 de。有关支持的语言代码的更多信息,请参阅什么是 Amazon Translate?
  10. 选择下一步。
  11. 在配置堆栈选项页面上,选择任何其他可选参数,包括堆栈的标签。
  12. 选择下一步。
  13. 选择我确认 AWS CloudFormation 可以使用自定义名称创建 IAM 资源复选框。
  14. 选择创建堆栈。

堆栈创建最多需要一分钟完成。

使用应用程序

当您创建 AWS CloudFormation 堆栈后,您即已准备好开始使用该解决方案。

您可以将要翻译的文本文档上传到输入 S3 存储桶中。如此一来,工作流程将开始,且翻译好的文档将在完成时自动出现在输出 S3 存储桶中。

翻译好的文档存储在输出 S3 存储桶中,路径如下:

<TargetLanguageCode>/<original path of the source file>. 例如,如果标题为 FinalProposal.txt 的输入文档存储在输入 S3 存储桶内名为 Marketing 的 S3 文件夹中,则其德语翻译文档将存储在输出存储桶内的 de/Marketing/FinalProposal.txt 中。

如果您没有在输出 S3 存储桶中看到该文档,则检查 Amazon CloudWatch Logs 中有无相应的 Lambda 函数并查找导致失败的潜在错误。

此解决方案仅适用于处理 UTF-8 格式的文本文档。您可以修改此博文中的 Python 代码来处理不同的文件格式。此解决方案仅限于 Lambda 函数的最大可执行时间。

结论

在此博文中,我们展示了使用 Amazon Translate 翻译文档的两种不同解决方案的实现,一种是使用异步批量翻译的简单方法,另一种是使用 AWS Lambda 和 Amazon 实时翻译的高级方法。立即在 Amazon Translate 上构建您的第一个翻译作业。

 

© 2020, Amazon Web Services, Inc. 或其附属公司。保留所有权利。

 

本篇作者

Jay Rao

是 AWS 的一位解决方案架构师。他喜欢为客户提供技术指导,及帮助他们在 AWS 上设计和实施解决方案。

Nikiforos Botis

是 AWS 的一位解决方案架构师。他喜欢帮助客户在云之旅中取得成功,尤其是在 Machine Learning 方面。工作之余,他喜欢旅行和打篮球。

Watson G. Srivathsan

是AWS 的自然语言处理服务 Amazon Translate 的高级产品经理。他周末喜欢到太平洋西北地区进行户外探险。