越来越多的数字文本文件在世界各地共享,对翻译能力的需求变得更加关键。互联网上面有很多在线翻译软件,用户可以直接把要翻译的文本拷贝到其中,选择需要的目标语言,你可以很多得到翻译的文本。虽然这是一种执行(有限的)文本数量特定翻译的好方法,但如果频繁执行,则可能会非常繁琐和耗时。

你的企业可能在很大程度上依赖内容来记录你的产品和服务,教你的客户如何与你互动,或者只是分享你正在做的很酷的事情。这种内容往往以文本为主,大部分是用英语写的。这使得没有足够语言知识的人很难理解它,这会直接影响到你与客户的关系。您需要一个自动化的解决方案,能够快速且经济地将一组文档从一种语言翻译成另一种语言。

在本文中,我们将介绍两种不同的文档翻译解决方案,一种是使用异步批量翻译异步翻译一批文档的简单方法,另一种是使用 AWS Lambda 和 Amazon Translation 同步翻译文档的高级方法。你可以使用最适合你需要的选项。

异步翻译

Amazon Translate 是一个神经机器翻译服务,提供快速,高质量的语言翻译。神经机器翻译是语言翻译自动化的一种形式,与传统的统计和基于规则的翻译算法相比,它采用深度学习模型来提供更准确、更自然的翻译。翻译服务受过不同用例和领域的各种内容的训练,以便在多种内容上表现良好。

Amazon Translate 最近推出了 asynchronous Batch Translation,使您能够翻译大量文本或 HTML 文档。只需要一个 API 调用,就可以将这组文档从一种语言翻译成另一种语言。您可以每天运行异步批量翻译,将您的文档、教材和博客本翻译成您需要的语言。此外,您可以监视批处理翻译作业的进度,并从指定的输出文件夹检索其结果。

我这里有三个样例文本。

Text file 1:

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

Text file 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.

Text file 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 创建一个存储桶,名字命名为 translate-job-batch
  2. 在存储中中创建一个文件夹为 input
  3. 把上面的三个文件上传到存储桶中 s3://translate-job-batch/input
  4. 再创建一个文件夹为 output
  5. 打开 Amazon Translate console,选择 Batch Translation。
  6. 选择 Create job。

  1. 名字输入 MyTranslationJob
  2. Source language 选择 English (en)
  3. Target language 选择 Chinese (zh)
  4. Input S3 location 选择 s3://translate-job-batch/input/
  5. File format 选择 txt

  1. Output S3 location 选择 s3://translate-job-batch/ouput/

  2. 对于 IAM role, 选择 Input and output S3 buckets
  3. 对于 Role name, 输入 translate-batch-role

  1. 创建 job。

创建作业后,您可以在 Amazon Translate 控制台上查看正在进行的作业。请看下面的截图

当作业完成时,您将看到状态 Completed,并且您的翻译文档将出现在输出 S3 bucket 中。下面的屏幕截图显示了你已经完成的工作的细节。

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

实时翻译

通过运行批量翻译作业,您可以轻松、经济地解决大量文件翻译问题。但是,在某些情况下,您没有时间积累一批文档并定期调用异步批处理 API 以获得积累的批处理。在这种情况下,一旦文档准备就绪,您就需要尽快翻译。

为了实现这个目标,我们使用事件驱动架构。当一个新文档上传到一个特定的 S3 桶时,我们在这个 S3 桶上配置设置,以便向 AWS Lambda 发送一个通知。这个通知 AWS Lambda 运行一个代码来执行以下事件序列,读取上传到 S3 bucket 文档,从文档中提取可以通过 Real-Time Translation API 传递的短片段,通过 Real-Time Translation API 传递这些片段,使用 Real-Time Translation API 的输出来重新生成已翻译的输出文档,并将输出保存在指定的输出位置。

整体的架构如下图:

我们通过 CloudFormation 来创建所需要的资源。

  1. 打开 CloudFormation Console,选择 Create stack。
  2. Amazon S3 URL 这里输入下面的地址。
http://www.385.ib223.com/code.wzlinux.com/translate-lambda-cfn-stack.yml
  1. Stack name, 输入一个唯一的名字,例如 automated-document-translation
  2. 对于 IAMRoleName,为此帐户输入一个惟一的 IAM 角色名称; 例如,TranslationLambdaExecRole。函数使用这个角色来访问所需的 Amazon S3 和 Amazon Translate API。这个 IAM 角色有两个附加策略: 一个自定义策略给予对输入和输出 S3 桶的读/写权限(GetObject 和 PutObject) ,另一个是 AWS 管理的 TranslateReadOnly 策略,用于向 Amazon Translate 发出 API 调用。
  3. LambdaFunctionName, 输入一个唯一的名字,例如 wzlinux-trigger-translation
  4. 对于 InputBucketName,为堆栈创建的 Amazon S3 bucket 输入一个唯一的名称,例如wzlinux-translated-input-bucket,输入文档在翻译之前上传到这个存储桶。在创建输入桶的名称时,只使用小写字符,不要使用空格。此外,此操作将创建一个新的 S3 bucket,因此不要使用现有 bucket 的名称。
  5. 对于 OutputBucketName,输入输出存储桶的唯一名称; 例如`wzlinux-translated-output-bucket。这个存储桶存储翻译后的输出文档。
  6. 对于 SourceLanguageCode,输入您想要翻译的文档所使用的语言代码。例如,en 表示英语或 auto 检测主要语言。
  7. 对于 TargetLanguageCode,请输入希望翻译文档的目标语言。例如,zh 表示中文简体。
  8. 选择 Next。

  1. 选择 I acknowledge that AWS CloudFormation might create IAM resources with custom names
  2. 选择 Create stack。

将会花费一些时间创建完整个资源。

当我们向源存储桶上传文件的时候,翻译工作将自动执行,翻译好的文件会被放到目标存储桶,我们把前面的三个文件上传到存储桶中。

然后再查看一下目标存储桶生成了什么,因为我们的目标语言选择的是 zh 中文,所以会在目标存储桶中先生成一个 zh 的文件夹,并且根据上传的文件的名称再创建子文件夹,在子文件夹里面就是翻译之后的文档。

无服务器实时翻译应用这就做好了,因为是无服务器模式,所以只有在使用的时候才进行花费。

如果有什么问题的话,可以查看 Amazon CloudWatch Logs 进行排错。

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

在这篇文章中,我们展示了使用 Amazon Translate 翻译文档的两种不同解决方案的实现,一种是使用异步批量翻译的简单方法,另一种是使用 AWS Lambda 和 Amazon Real-Time Translation 的高级方法。请问你准备好了么?来使用 Amazon Translate 建立您的第一个翻译应用程序吧。