ゼファーネットのロゴ

サーバーレスパイプラインを作成して、AmazonTranslateで大きなドキュメントを翻訳します

日付:

 以前の投稿、を使用してドキュメントを翻訳する方法を説明しました リアルタイム翻訳API   Amazon翻訳 & AWSラムダ。 ただし、この方法は、大きすぎるファイルでは機能しない場合があります。 時間がかかりすぎて、 15分のタイムアウト制限 ラムダ関数の。 使用できます バッチAPI、ただし、これはXNUMXつのAWSリージョンでのみ利用可能です(このブログの公開時点)。 バッチ翻訳がサポートされていない地域で大きなファイルの翻訳を有効にするために、次のソリューションを作成しました。

この投稿では、大きなドキュメントの翻訳を実行する手順を説明します。

アーキテクチャの概要

投稿で取り上げられているアーキテクチャと比較して Amazon Translate、AWS Lambda、および新しいBatch Translate APIを使用してドキュメントを翻訳する、私たちのアーキテクチャにはXNUMXつの重要な違いがあります。 AWSステップ関数、Lambda関数と複数のサービスをビジネスクリティカルなアプリケーションに簡単にシーケンスできるサーバーレス関数オーケストレーター。 ステップ関数を使用すると、翻訳の実行を追跡し、エラーやタイムアウトが発生した場合の再試行を管理し、イベント駆動型ワークフローを調整できます。

次の図は、ソリューションアーキテクチャを示しています。

このイベント駆動型アーキテクチャは、新しいドキュメントが入力に到達したときのアクションのフローを示しています Amazon シンプル ストレージ サービス (Amazon S3)バケット。 このイベントは、最初のLambda関数をトリガーします。これは、StepFunctionsワークフローの開始点として機能します。

次の図は、ステートマシンとアクションのフローを示しています。

Process Document Lambda関数は、ステートマシンの起動時にトリガーされます。 この関数は、ドキュメントの翻訳に必要なすべてのアクティビティを実行します。 S3バケットからファイルにアクセスし、関数が実行されている環境でローカルにダウンロードし、ファイルの内容を読み取り、リアルタイム翻訳APIを通過できるドキュメントから短いセグメントを抽出し、APIの出力を使用します。翻訳されたドキュメントを作成します。

他のメカニズムは、失敗を回避するためにコード内に実装されています。たとえば、アクションを実行し、関数がタイムアウトする30秒前に進行状況を/ tempフォルダーに保存することで、AmazonTranslateスロットルエラーやLambda関数のタイムアウトを処理します。 これらのメカニズムは、大きなテキストドキュメントを処理するために重要です。

関数が正常に処理を完了すると、翻訳されたテキストドキュメントを、英語の場合はenなどのターゲット言語コードのフォルダー内の出力S3バケットにアップロードします。 ステップ関数ワークフローは、Lambda関数が入力ファイルを/ dropフォルダーから入力S3バケット内の/ processedフォルダーに移動すると終了します。

これで、これを実際に試すためのすべての要素が整いました。

AWSCloudFormationを使用してソリューションをデプロイする

提供されているを起動することで、このソリューションをAWSアカウントにデプロイできます AWS CloudFormation スタック。 CloudFormationテンプレートは、ソリューションに必要なリソースをプロビジョニングします。 テンプレートはus-east-1リージョンのスタックを作成しますが、テンプレートを使用して、AmazonTranslateが利用可能な任意のリージョンにスタックを作成できます。 この記事の執筆時点で、AmazonTranslateは16の商用リージョンとAWSGovCloud(US-West)で利用できます。 地域の最新リストについては、 AWSリージョナルサービスリスト.

アプリケーションをデプロイするには、以下の手順を実行します。

  1. を選択してCloudFormationテンプレートを起動します 発射スタック:

  1. 選択する Next.

または、AWS CloudFormationコンソールで、 新しいリソースでスタックを作成する(標準)、選択する アマゾンS3のURL テンプレートソースとして、次のように入力します https://s3.amazonaws.com/aws-ml-blog/artifacts/create-a-serverless-pipeline-to-translate-large-docs-amazon-translate/translate.yml、選択して Next.

  1. スタック名、このアカウントの一意のスタック名を入力します。 たとえば、serverless-document-translationです。
  2. 入力バケット名、スタックが作成するS3バケットの一意の名前を入力します。 たとえば、serverless-translation-input-bucketです。

ドキュメントは、翻訳される前にこのバケットにアップロードされます。 入力S3バケットの名前を指定するときは、小文字のみを使用し、スペースは使用しないでください。 この操作により新しいバケットが作成されるため、既存のバケットの名前は使用しないでください。 詳細については、を参照してください。 バケットの命名規則.

  1. 出力バケット名、出力S3バケットの一意の名前を入力します。 たとえば、serverless-translation-output-bucketです。

このバケットには、翻訳後にドキュメントが保存されます。 入力バケットと同じ命名規則に従います。

  1. ソース言語コード、入力ドキュメントが含まれている言語コードを入力します。 この投稿では、autoと入力して主要言語を検出します。
  2. ターゲット言語コード、翻訳されたドキュメントを使用する言語コードを入力します。 たとえば、英語の場合はenです。

サポートされている言語コードの詳細については、を参照してください。 サポートされている言語と言語コード.

  1. 選択する Next.

  1. ソフトウェア設定ページで、下図のように スタックオプションを構成する ページで、タグを含むスタックの追加パラメータを設定します。
  2. 選択する Next.
  3. 選択 AWS CloudFormationがカスタム名でIAMリソースを作成する可能性があることを認めます.
  4. 選択する スタックを作成.

スタックの作成は、完了するまでに約XNUMX分かかります。

ドキュメントを翻訳する

これで、入力S3バケットに翻訳するテキストドキュメントをdrop /フォルダーの下にアップロードできます。

次のスクリーンショットは、ギリシャ語の文を含むサンプルドキュメントを示しています。

このアクションによりワークフローが開始され、翻訳されたドキュメントが出力S3バケットのターゲット言語(この例ではen)のフォルダーに自動的に表示されます。 ファイルが表示される時間の長さは、入力ドキュメントのサイズによって異なります。

翻訳されたファイルは次のスクリーンショットのようになります。

ステップ関数コンソールで、または関連するAPI呼び出しを使用して、ステートマシンの進行状況を追跡することもできます。

より大きなファイルで解決策を試してみましょう。 test_large.txtファイルには、複数のAWSブログ投稿のコンテンツとドイツ語で書かれたその他のコンテンツが含まれています(たとえば、投稿のすべてのテキストを使用します) AWS DeepLens(バージョン2019)kommt nach DeutschlandundinweitereLänder).

このファイルは、前のテストのファイルよりもはるかに大きくなっています。 入力バケットのdrop /フォルダーにファイルをアップロードします。

ステップ関数コンソールで、ステートマシンのステータスを確認することにより、パイプラインが実行されていることを確認できます。

ソフトウェア設定ページで、下図のように グラフインスペクター このページでは、任意の時点でのステートマシンのステータスに関するより多くの洞察を得ることができます。 ステップを選択すると、 ステップ出力 タブには完了率が表示されます。

ステートマシンが完成したら、翻訳されたファイルを出力バケットから取得できます。

次のスクリーンショットは、ファイルが英語に翻訳されていることを示しています。

トラブルシューティング

翻訳されたドキュメントが出力S3バケットに表示されない場合は、チェックしてください Amazon CloudWatchログ 対応するLambda関数を探し、潜在的なエラーを探します。 コストを最適化するために、デフォルトでは、ソリューションはProcess DocumentLambda関数に256MBのメモリを使用します。 大きなドキュメントの処理中に、CloudWatch Logsに関数のRuntime.ExitErrorが表示された場合は、関数のメモリを増やしてください。

その他の考慮事項

の力を強調する価値があります 自動言語検出機能 CloudFormationスタックをデプロイするときに指定したSourceLanguageCodeフィールドでautoとしてキャプチャされたAmazonTranslateの。 前の例では、ギリシャ語のテキストを含むファイルとドイツ語の別のファイルを送信しましたが、どちらも英語に正常に翻訳されました。 私たちのソリューションでは、別の言語でソースファイルをアップロードするたびに、スタックを再デプロイする(またはLambda関数でソース言語コードを手動で変更する)必要はありません。 Amazon Translateはソース言語を検出し、翻訳プロセスを開始します。 デプロイ後、ターゲット言語コードを変更する必要がある場合は、新しいCloudFormationスタックをデプロイするか、既存のスタックを更新できます。

このソリューションは、AmazonTranslate同期リアルタイムAPIを使用します。 ドキュメントを段落(改行文字で終わる)に分割することにより、ドキュメントの最大サイズ制限(5,000バイト)を処理します。 必要に応じて、各段落をさらに文に分割します(ピリオドで終わります)。 これらの区切り文字は、ソーステキストに基づいて変更できます。 このソリューションは、5,000つの文で最大8バイトをサポートでき、.txtまたは.textファイル拡張子を持つUTF-XNUMX形式のテキストドキュメントのみを処理します。 Process Document Lambda関数のPythonコードを変更して、さまざまなファイル形式を処理できます。

このソリューションでは、Amazon S3のコストに加えて、Amazon Translate、Lambda、およびStepFunctionsからの使用コストが発生します。 詳細については、を参照してください。 Amazon翻訳の価格, AmazonS3の価格, AWSLambdaの価格, AWS StepFunctionsの価格.

まとめ

この投稿では、を使用してドキュメントをリアルタイムで翻訳できるサーバーレスパイプラインの実装を示しました。 リアルタイム翻訳 Amazon Translateの機能と、個々のLambda関数のオーケストレーターとしてのStepFunctionsの機能。 このソリューションにより、より詳細な制御が可能になり、アプリケーションに高度な機能を追加できます。 Amazon Translateを使用して、高度なドキュメント翻訳パイプラインを構築してください。

詳細については、以下を参照してください Amazon翻訳開発者ガイド & Amazon翻訳リソース。 Amazon Translateを初めて使用する場合は、最初の翻訳リクエストから最初の2か月間、月額12万文字を無料で提供する無料利用枠を使用して試してみてください。


著者について

ジェイ・ラオ AWSのシニアソリューションアーキテクトです。 彼は、お客様に技術的なガイダンスを提供し、お客様がAWSでソリューションを設計および実装するのを支援することを楽しんでいます。

 セブ・カスプルザク AWSのソリューションアーキテクトです。 彼はAmazonで日々を過ごし、Amazonテクノロジーを使用して顧客が複雑なビジネス上の問題を解決するのを支援しています。

ニキフォロスボティス AWSのソリューションアーキテクトです。 彼は、顧客がクラウドジャーニーで成功するのを支援することを楽しんでおり、特にAI / MLテクノロジーに興味を持っています。

ボビー・クーボール AWSのデジタルイノベーションのシニアソリューションアーキテクトであり、機械学習、ロボット工学、IoTなどの新しいテクノロジーに関する困難な問題の解決を支援しています。

コインスマート。 BesteBitcoin-ヨーロッパのBörse
ソース:https://aws.amazon.com/blogs/machine-learning/create-a-serverless-pipeline-to-translate-large-documents-with-amazon-translate/

スポット画像

最新のインテリジェンス

スポット画像