【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

越来越多的数字文本文件在世界各地共享,对翻译能力的需求变得更加关键。互联网上面有很多在线翻译软件,用户可以直接把要翻译的文本拷贝到其中,选择需要的目标语言,你可以很多得到翻译的文本。虽然这是一种执(有限的)文本数量特定翻译的好方法,但如果频繁执c 5 ? H Z * v,则l 0 N i可能会非 H ( 8 L Q常繁琐和E 1 s - l : & g =耗时。

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

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

异步翻译

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

Amazon Translate 最近推出了 asyf F W V d y h jnchronous Batch Translation,使您能够翻译大量文本或 HT: * 8 | M [ h WML 文档。只需要一个 API 调用,就可以将这组文档从I g 8 T一种语言翻译成另一种语言。您可以每天运行异步批量翻译,将您的文档、教材和o f g {博客本翻译成您需要的语言C w W $ a z n k F。此外,您可以监视批处理p m 3 D v = P } R翻译作业的进度,并从指定的输出文件夹检索其结果。

我这里有三个样例文本。

Text file 1:

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

Text file 2:

Neur] T I Aal machine translation is a form of^ R - language translation automation that uses deep learning models to deliver more accurate and more natural sounding translation than traditional statistical andR 2 { ~ ~ ! s 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 ofL C ` z w j h $ D teM n 8 o 1xt efficiently.

下面是我们创建批量翻译任务:

  1. 在 us-east-1 创建一@ . }个存w C N 8 r r储桶,名字命名为 translate-job-baj # Q [ a : 8 vtch
  2. 在存储中中创建一个文件夹为 input
  3. 把上面的三个文件上传到存储桶中 s3://translate-job-R W V Cbatch/input
  4. 再创建一个文件夹为 output
  5. 打开 Amazon Translate cons Q - = @ Tsole,选择 Batch Translation。
  6. 选择 Create job

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

  1. 名字输入 MyTranslaq t 4 D ?tionJob
  2. Sourc% w T 5 n a *e language2 A F } 选择 EnglU H 8 - p H o e 3ish (en)
  3. Target language 选择 Chinese (zh)
  4. Input S3 location 选择 s3://translate-job-batch/input/
  5. File format 选择 txt

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

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

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

  1. 创建 job。

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

实时翻译

通过运行批量翻译作业,您可以轻松、经济地解决大量文件翻译问题。但是,在某些情况下,您- - Q f a N R e E没有时间U C ~ o J . l b 6积累一批文档并定期调用异步批处理 API 以获得积累的批处理。在这种情况下,一旦文档准备就绪,您就需要尽K 0 n M ~ i o快翻译。

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

整体的架构如下图:

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

我们通过 Clou_ P t R W / PdFormation 来创y l O 0 8 l建所需要的资源。

  1. 打开y t # J CloudFormation Consolen j / z h,选择 Create stack。
  2. Amazon S3 URL 这里输入下面的地址。
https://m _ 3 is3.amah [ @ lzol Y 0 N ) Mnaws.com/code.wzlinux.com/translate-lambda-cfn-stack.yml
  1. Stack name, 输入一个唯一的名字,例如 automated-u z V ^ w ` : Sdocument-translation
  2. 对于 IAMRoleName,为此帐户输入一个惟一的 IAM 角色名称; 例如,TranslationLambdaExecRole。函数使用这个角色来访问所需的 Amazon S3 和 Amazon Translate API。这个 IAM 角色有两个附加策略: 一个自定义策略给予对输入和输出 S3 桶的读/写权限(GetObject 和 PutObject) ,另一个是 AWS 管理的 Tranr 7 e Q v +slateReadOnly 策略,用于向 Amazon Translate 发出 API 调用。
  3. LambdaFunctionName, 输入一个唯一的名字,例如 wzlinux-trigger-translation
  4. 对于 InputBucketName,为堆栈创建的 Amazon S3 buckW m *et 输入一个唯3 S J 1 4 ) #一的名称,例如wzlin[ L Wux-translated-input5 Z B-bucket,输入文档在翻译之前上传到这个存储桶。在创建输入桶的名5 8 - v j H 称时,Q ( ` C | v :只使用小写字符,不要使用空格。此外,此操作将创建一个新的 S3 buH & ^ D v ` Bcket,因此不要使用现有 bucket 的名称。
  5. 对于 OutputBucketName,输入输出存储桶的唯一名称; 例如`wzlinux-translat4 I | M 9 # GeK 5 Ud-output-bucket。这个存储桶存储翻译后的输出文档。
  6. 对于 SourceLanguageY 8 j 4 5Code,输入您想要翻译的文档G c U {所使用的语言G U l代码。例如,en 表示英语或 auto 检测主要语言。
  7. 对于 TargetLanguageCode,请输U Q I U u w } r入希望翻译文档的目标语言。例如,zh 表示中文简体。
  8. 选择 Next。

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

  1. 选择 I acknowledge that AWS CloudFormation might create IAM resources with custom namesA X y [
  2. 选择 Create stj T v U # 8 6ack。

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

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

【AWS征文】利用无服务架构 Lambda + Amazon Translate 实时翻译文档

无服务器实时翻译应用这就做好了,因为是无u b I A B ? F U /服务器模M W s ( K C式,所以只有在使用的时候才进行花费。

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

此解决w [ 7 ( U Z x方案只处理 UTF-8格式的文本文档。您可以在本文中修改 Python 代码来处理不同的文件格式。此解决? z ) & z I ;方案仅限于 Lambda 函数的最大执行时间I x E E d + N(超时)。

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