通过战略性缓存层最大化您的 Amazon Translate 架构 机器学习博客
优化您的 Amazon Translate 架构,利用战略缓存层
作者 Praneeth Reddy Tekula 和 Reagan Rosario 发表于 2024 年 6 月 19 日
关键要点
Amazon Translate 是一种快速、高质量且可定制的神经机器翻译服务,支持 75 种语言和 5550 种语言对。通过实现写穿缓存层,企业可以优化成本,尤其是在内容中有重复短语时。使用 Amazon DynamoDB 作为缓存层,当请求翻译时,首先检查缓存,以提高效率。文章介绍了如何使用 AWS CDK 部署这一解决方案,并提供了实践中需要考虑的一些要点。Amazon Translate 是一项神经机器翻译服务,提供快速、高质量、经济实惠且可定制的语言翻译。它支持 75 种语言和 5550 种语言对,详细信息请参见 Amazon Translate 开发者指南。Amazon Translate 的一个关键优势是其速度和可扩展性,能够以批处理模式翻译大量内容或通过 API 调用实时翻译内容。这使得企业能够在包括产品清单、支持文档、市场宣传材料和技术文档等大量内容中,快速准确地获得翻译。
当内容集中有很多重复的短语或句子时,可以通过实施数据写入缓存层来优化成本。以产品描述为例,往往会包含许多重复的术语和规格。这时,实施翻译缓存可以显著降低成本。缓存层存储源内容及其翻译文本,当相同的源内容需要再次翻译时,可以简单地重用缓存翻译,而无需支付全新的翻译费用。
在本文中,我们将解释如何为频繁访问的翻译设置缓存,以便需要可扩展多语言翻译的大量内容的组织受益。您将学习如何为 Amazon Translate 构建一个简单的缓存机制,以加速周转时间。
解决方案概述
该缓存解决方案使用 Amazon DynamoDB 存储来自 Amazon Translate 的翻译。DynamoDB 作为缓存层,应用程序代码在需要翻译时,首先会检查缓存DynamoDB 表,以查看翻译是否已经被缓存。如果缓存命中,则从 DynamoDB 读取存储的翻译,而无需再次调用 Amazon Translate。
如果在 DynamoDB 中没有缓存的翻译即缓存未命中,则会调用 Amazon Translate API 来进行翻译。源文本会传递给 Amazon Translate,然后返回翻译结果,并将翻译存储在 DynamoDB 中,为下一次该翻译请求填充缓存。
在本博客中,我们将使用 Amazon API Gateway 作为翻译的 REST API,集成 AWS Lambda 执行后台逻辑。使用 Amazon Cognito 用户池 来控制谁可以访问您的翻译 REST API。您还可以根据用例使用其他机制来控制对 API Gateway 的身份验证和授权。
Amazon Translate 缓存架构
当需要新的翻译时,用户或应用程序向翻译 REST API 发送请求。Amazon Cognito 验证请求中的身份令牌,以允许访问翻译 REST API。当新的内容需要翻译时,Amazon API Gateway 调用 Lambda 函数,该函数检查 Amazon DynamoDB 表中是否已有现有翻译。如果找到匹配项,则从 DynamoDB 检索翻译。如果未找到匹配项,则将内容发送到 Amazon Translate 进行自定义翻译,使用并行数据。翻译后的内容将与命中率百分比的新条目一起存储在 DynamoDB 中。这些高价值翻译会定期由人工翻译进行后期编辑,然后作为并行数据添加,以改善未来由 Amazon Translate 执行的翻译质量。
我们将在 DynamoDB 中使用简单的架构存储缓存项。每个条目将包含以下属性:
srctext 原始源文本targetlocale 目标翻译语言translatedtext 翻译文本srclocale 原始源语言hash 表的主键主键将由 srclocale、targetlocale 和 srctext 构成,以唯一标识缓存项。检索翻译时,将根据其主键查找项目。
部署解决方案的先决条件
要部署该解决方案,您需要:
一个 AWS 账户。如果您还没有 AWS 账户,可以创建一个。您对 AWS 账户的访问权限必须具备 AWS 身份和访问管理IAM 权限,以启动创建 IAM 角色的 AWS CloudFormation 模板。安装 AWS CLI。安装 jq 工具。AWS 云开发工具包AWS CDK。请参见 AWS CDK 入门指南。安装并配置 Postman。使用 AWS CDK 部署解决方案
我们将使用 AWS CDK 部署用于缓存翻译的 DynamoDB 表。CDK 允许通过熟悉的编程语言如 Python定义基础设施。
从 GitHub 克隆代码库。bash git clone https//githubcom/awssamples/maximizetranslatearchitecturestrategiccaching
运行 requirementstxt 来安装 Python 依赖。bash python3 m pip install r requirementstxt
打开 apppy 文件,将 AWS 账户号码和 AWS 区域替换为您自己的信息。为验证 AWS CDK 是否已启动,请从代码库的根目录运行以下命令:bash cdk bootstrap
提示信息将显示环境是否已成功启动。
定义您的 CDK 堆栈,以添加 DynamoDB 和 Lambda 资源。以下是 DynamoDB 和 Lambda 函数的定义:python table = ddbTable( self TRANSLATIONCACHE tablename=TRANSLATIONCACHE partitionkey={name hash type ddbAttributeTypeSTRING} removalpolicy=RemovalPolicyDESTROY )
selfhandler = lambdaFunction( self GetTranslationHandler runtime=lambdaRuntimePYTHON310 handler=gettranslationhandler code=lambdaCodefromasset(lambda) environment={ TRANSLATIONCACHETABLENAME tabletablename } )
Lambda 函数的定义要求如下:
解析请求体的 JSON 为 Python 字典。
鲨鱼机场从请求中提取源语言、目标语言和输入文本。从环境变量中获取用于翻译缓存的 DynamoDB 表名称。调用 generatetranslationswithcache() 来翻译文本,传递语言、文本和 DynamoDB 表名称。返回带有翻译和处理时间的 200 响应。python def handler(event context) print(request {}format(jsondumps(event))) request = jsonloads(event[body]) print(request request)
srclocale = request[srclocale] targetlocale = request[targetlocale] inputtext = request[inputtext] tablename = osenviron[TRANSLATIONCACHETABLENAME] if tablename == print(Defaulting table name) tablename = TRANSLATIONCACHE try start = timeperfcounter() translations = generatetranslationswithcache(srclocale targetlocale inputtext tablename) end = timeperfcounter() timediff = (end start) translations[processingseconds] = timediff return { statusCode 200 headers { ContentType application/json } body jsondumps(translations) } except ClientError as error error = {errortext errorresponse[Error][Code]} return { statusCode 500 headers { ContentType application/json } body jsondumps(error) }generatetranslationswithcache 函数将输入文本分割成独立句子,以句号“”作为分隔符。它将每个句子作为单独条目存储在 DynamoDB 表中及其翻译。这样的句子分割使缓存翻译可以用于重复句子。总而言之,这是一个接受翻译请求的 Lambda 函数,通过缓存翻译文本并返回结果及时间信息。它使用 DynamoDB 来缓存翻译,以提高性能。
您可以通过切换到代码库根目录并运行以下命令来部署堆栈。bash cdk deploy
注意事项
在实现翻译缓存时,还需考虑以下几点:
驱逐策略 可以定义一个额外的列来指示缓存条目过期的时间。然后,可以通过定义一个单独的流程将缓存条目驱逐。缓存大小 确定预期的缓存大小,并相应地配置 DynamoDB 的吞吐量。如果使用量不可预测,从按需容量开始。成本优化 平衡缓存成本和减少 Amazon Translate 使用的节省。使用较短的 DynamoDB 生存时间TTL并限制缓存大小以最小化开销。敏感信息 DynamoDB 默认加密所有静态数据,如果缓存的翻译包含敏感数据,可以仅授予授权用户访问权限。您也可以选择不缓存包含敏感信息的数据。使用并行数据自定义翻译
在翻译表中生成的翻译可以由人工审核并用作并行数据,以自定义翻译。并行数据由示例构成,展示您希望文本片段如何翻译。它包括源语言的文本示例集合;对于每个示例,它包含在一个或多个目标语言中的期望翻译输出。
这是针对大多数用例的绝佳方法,但某些特殊情况可能需要人工团队进行轻微的后期编辑。后期编辑过程可以帮您更好地理解客户的需求,捕捉翻译中可能会丧失的地方。对于希望通过人类智慧增强 Amazon Translate和其他 Amazon 人工智能服务输出的企业和组织, Amazon 增强人工智能Amazon A2I 提供了一种受管道的处理方式,可以阅读 使用 Amazon Translate 和 Amazon A2I 设计人类审查工作流 获取更多信息。
当您将并行数据添加到批量翻译作业中时,会创建一个 活动自定义翻译 作业。运行这些作业时,Amazon Translate 使用您的并行数据在运行时生成自定义机器翻译输出。它调整翻译以反映并行数据中的风格、语气和措辞。通过并行数据,您可以针对特定域内特有的术语或短语量身定制翻译,例如生命科学、法律或财务领域。有关更多信息,请参见 使用并行数据自定义翻译。
测试缓存设置
这是一个测试解决方案的操作视频。
测试缓存设置的方法有很多。在此示例中,您将使用 Postman 通过发送请求进行测试。由于 REST API 受到 Amazon Cognito 授权者的保护,因此您需要配置 Postman 以便在 API 请求中发送授权令牌。
在上一步中,AWS CDK 部署会创建一个带有应用客户端集成的 Cognito 用户池。在您的 AWS CloudFormation 控制台中,您可以在 CDK 堆栈输出部分找到 BaseURL、translateCacheEndpoint、UserPoolID 和 ClientID。将这些复制到文本编辑器以备后用。
要从 Cognito 生成授权令牌,下一步是创建一个 Cognito 用户。
转到 Amazon Cognito 控制台。选择 由 AWS CDK 堆栈创建的用户池。选择 用户 选项卡,然后选择 创建用户。输入以下值,然后选择 创建用户。 在 邀请消息 中,验证选择 不发送邀请。对于 电子邮件地址,输入 test@testcom。在 临时密码 中,验证选择 设置密码。在 密码 中输入 testUser123!。用户创建后,您将使用 AWS 命令行界面CLI 模拟用户登录。转到 AWS CloudShell 控制台。在 CloudShell 终端中输入以下命令,用 UserPoolID 和 ClientID 替换 AWS CDK 堆栈的 CloudFormation 输出。bash export YOURPOOLID= export YOURCLIENTID= export SessionID=(aws cognitoidp admininitiateauth userpoolid {YOURPOOLID} clientid {YOURCLIENTID} authflow ADMINNOSRPAUTH authparameters USERNAME=test@testcomPASSWORD=testUser123! jq Session r)
aws cognitoidp adminrespondtoauthchallenge userpoolid {YOURPOOLID} clientid {YOURCLIENTID} challengename NEWPASSWORDREQUIRED challengeresponses USERNAME= test@testcomNEWPASSWORD=testUser456! session {SessionID}
此调用的输出应该是一个有效的会话,格式如下。其中 IdToken 是我们将在 Postman 配置的授权头中传递给 APIs 的 Open ID Connect 兼容身份令牌。将其复制到文本编辑器以备后用。json { ChallengeParameters {} AuthenticationResult { AccessTokenYOUWILLSEEVALIDACCESSTOKENVALUEHERE ExpiresIn 3600 TokenType Bearer RefreshToken YOUWILLSEEVALIDREFRESHTOKENVALUEHERE IdToken YOUWILLSEEVALIDIDTOKENVALUEHERE } }
现在您获得了授权令牌,可以与 REST API 请求一起使用。转到 Postman 网站。登录 Postman 网站或下载 Postman 桌面客户端,并创建名为 dev 的工作区。
选择工作区 dev,然后选择 新建请求。将请求类型更改为 POST 。将 CloudFormation 输出中的 ltTranslateCacheEndpointgt URL 粘贴到请求 URL 文本框中,附加 API 路径 /translate,如下所示。现在在 Postman 上设置授权配置,使对翻译 API 的请求得到 Amazon Cognito 用户池的授权。
选择请求 URL 下的 授权 选项卡。选择 OAuth20 作为 类型。在 当前令牌 下,复制并粘贴之前获得的 IdToken,放入 令牌 字段。
发表评论