Amazon TranslateのActive Custom Translationを使用して、マルチリンガル自動翻訳パイプラインを構築します
Build a multilingual automatic translation pipeline using Amazon Translate's Active Custom Translation.
Dive into Deep Learning ( D2L.ai )は、深層学習を誰にでもアクセス可能にするオープンソースのテキストブックです。PyTorch、JAX、TensorFlow、およびMXNetで自己完結型のコードを備えたインタラクティブなJupyterノートブック、実世界の例、説明図、および数学を特徴としています。これまでに、D2Lは、ケンブリッジ大学、スタンフォード大学、マサチューセッツ工科大学、カーネギーメロン大学、清華大学など、世界中の400以上の大学で採用されています。この作品は、中国語、日本語、韓国語、ポルトガル語、トルコ語、ベトナム語でも利用可能であり、スペイン語などの他の言語も展開予定です。
複数の著者によって書かれ、複数の言語で利用可能であるオンライン書籍を常に最新の状態に保つことは、大きな課題です。この記事では、Amazon TranslateのActive Custom Translation(ACT)機能を使用して、D2L.aiがこの課題に対処するために使用したソリューションを紹介し、多言語自動翻訳パイプラインを構築する方法を説明します。
AWS Management ConsoleとAmazon TranslateパブリックAPIを使用して、自動機械バッチ翻訳を提供し、英語と中国語、英語とスペイン語の2つの言語ペア間の翻訳を分析する方法、およびこの自動翻訳パイプラインでAmazon Translateを使用する際の最適な方法を推奨します。
ソリューションの概要
Amazon TranslateのACT機能を使用して、複数の言語に対して自動翻訳パイプラインを構築しました。ACTにより、並列データの形式で調整された翻訳例を提供することで、翻訳出力をリアルタイムでカスタマイズできます。並列データは、ソース言語のテキスト例のコレクションと1つ以上の目的言語の翻訳で構成されます。翻訳時に、ACTは並列データから最も関連性の高いセグメントを自動的に選択し、そのセグメントペアに基づいて翻訳モデルをリアルタイムで更新します。これにより、並列データのスタイルとコンテンツにより適合した翻訳が得られます。
アーキテクチャには、複数のサブパイプラインが含まれており、各サブパイプラインは英語から中国語、英語からスペイン語などの1つの言語翻訳を処理します。複数の翻訳サブパイプラインを並列に処理できます。各サブパイプラインでは、人間によって翻訳されたD2L書籍の高品質なデータセットを使用して、Amazon Translateで並列データを構築します。次に、実行時にカスタマイズされた機械翻訳出力を生成し、品質と精度を向上させます。
次のセクションでは、Amazon TranslateとACTを使用して各翻訳パイプラインを構築する方法、およびAmazon SageMakerとAmazon Simple Storage Service(Amazon S3)を使用して翻訳プロセスを実行するJupyterノートブックを作成する方法を示します。
前提条件
この記事の手順に従うには、次の内容が含まれたAWSアカウントが必要です。
- ロールとポリシー構成のためのAWS Identity and Access Management(IAM)へのアクセス
- Amazon Translate、SageMaker、およびAmazon S3へのアクセス
- ソースドキュメント、参照ドキュメント、並列データトレーニングセット、および翻訳されたドキュメントが含まれる出力S3バケットとフォルダへの読み取り/書き込みアクセス権限が付与されたS3バケット
Amazon Translate用のIAMロールとポリシーの作成
Amazon Translateのカスタム信頼ポリシーを含むIAMロールが必要です:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"Service": "translate.amazonaws.com"
},
"Action": "sts:AssumeRole"
}]
}
このロールには、Amazon TranslateがAmazon S3の入力フォルダとそのサブフォルダに対して読み取りアクセス権限を持ち、翻訳されたドキュメントを含む出力S3バケットとフォルダに対して読み取り/書き込みアクセス権限を持つ許可ポリシーが必要です。
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
“s3:DeleteObject”
]
"Resource": [
"arn:aws:s3:::YOUR-S3_BUCKET-NAME"
]
}]
}
JupyterノートブックをSageMakerで翻訳ジョブに実行するためには、SageMaker実行ロールにインラインの許可ポリシーを付与する必要があります。このロールはAmazon TranslateサービスロールをSageMakerに渡し、SageMakerノートブックが指定されたS3バケット内のソースおよび翻訳されたドキュメントにアクセスできるようにします。
{
"Version": "2012-10-17",
"Statement": [{
"Action": ["iam:PassRole"],
"Effect": "Allow",
"Resource": [
"arn:aws:iam::YOUR-AWS-ACCOUNT-ID:role/batch-translate-api-role"
]
}]
}
並列データトレーニングサンプルを用意する
ACTの並列データは、テキスト例のペアのリストからなる入力ファイルでトレーニングする必要があります。例えば、ソース言語(英語)とターゲット言語(中国語)のペアです。入力ファイルは、TMX、CSV、またはTSV形式で指定できます。以下のスクリーンショットは、CSV入力ファイルの例を示しています。最初の列はソース言語データ(英語)で、2番目の列はターゲット言語データ(中国語)です。以下の例は、D2L-en書籍とD2L-zh書籍から抜粋されたものです。
Amazon Translateでカスタム並列データトレーニングを実行する
まず、次のスクリーンショットに示すように、S3バケットとフォルダを設定します。 source_data
フォルダには、翻訳前のソースドキュメントがあります。一括翻訳後に生成されたドキュメントは、出力フォルダに配置されます。 ParallelData
フォルダには、前のステップで準備した並列データ入力ファイルが格納されます。
入力ファイルを source_data
フォルダにアップロードした後、CreateParallelData APIを使用してAmazon Translateで並列データ作成ジョブを実行できます。
S3_BUCKET = “YOUR-S3_BUCKET-NAME”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
pd_description = “Parallel Data for English to Chinese”
pd_fn = “d2l_short_test_sentence_enzh_all.csv”
response_t = translate_client.create_parallel_data(
Name=pd_name, # pd_name is the parallel data name
Description=pd_description, # pd_description is the parallel data description
ParallelDataConfig={
'S3Uri': 's3://'+S3_BUCKET+'/Paralleldata/'+pd_fn, # S3_BUCKET is the S3 bucket name defined in the previous step
'Format': 'CSV'
},
)
print(pd_name, ": ", response_t['Status'], " created.")
新しいトレーニングデータセットで既存の並列データを更新するには、UpdateParallelData APIを使用できます。
S3_BUCKET = “YOUR-S3_BUCKET-NAME”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
pd_description = “Parallel Data for English to Chinese”
pd_fn = “d2l_short_test_sentence_enzh_all.csv”
response_t = translate_client.update_parallel_data(
Name=pd_name, # pd_name is the parallel data name
Description=pd_description, # pd_description is the parallel data description
ParallelDataConfig={
'S3Uri': 's3://'+S3_BUCKET+'/Paralleldata/'+pd_fn, # S3_BUCKET is the S3 bucket name defined in the previous step
'Format': 'CSV'
},
)
print(pd_name, ": ", response_t['Status'], " updated.")
Amazon Translateコンソールでトレーニングジョブの進捗状況を確認できます。ジョブが完了すると、並列データのステータスがActiveに表示され、使用できるようになります。
並列データを使用した非同期バッチ翻訳の実行
複数のソースドキュメントを自動的にターゲット言語のドキュメントに変換するバッチ翻訳を実行できます。このプロセスには、ソースドキュメントをS3バケットの入力フォルダにアップロードし、Amazon TranslateのStartTextTranslationJob APIを適用して非同期翻訳ジョブを開始することが含まれます:
S3_BUCKET = “YOUR-S3_BUCKET-NAME”
ROLE_ARN = “THE_ROLE_DEFINED_IN_STEP_1”
src_fdr = “source_data”
output_fdr = “output”
src_lang = “en”
tgt_lang = “zh”
pd_name = “pd-d2l-short_test_sentence_enzh_all”
response = translate_client.start_text_translation_job (
JobName='D2L_job',
InputDataConfig={
'S3Uri': 's3://'+S3_BUCKET+'/'+src_fdr+'/', # S3_BUCKETは、前のステップで定義されたS3バケット名です。
# src_fdrは、ソースファイルを含むS3バケットのフォルダです。
'ContentType': 'text/html'
},
OutputDataConfig={
'S3Uri': 's3://'+S3_BUCKET+'/’+output_fdr+’/', # S3_BUCKETは、前のステップで定義されたS3バケット名です。
# output_fdrは、翻訳されたファイルを含むS3バケットのフォルダです。
},
DataAccessRoleArn=ROLE_ARN, # ROLE_ARNは、前のステップで定義されたロールです。
SourceLanguageCode=src_lang, # src_langは、ソース言語(例:en)です。
TargetLanguageCodes=[tgt_lang,], # tgt_langは、ターゲット言語(例:zh)です。
ParallelDataNames=pd_name # pd_nameは、前のステップで定義された並列データ名です。
)
私たちは、D2Lの本(D2L-en)から5つの英語のソースドキュメントを選択して一括翻訳を行いました。Amazon Translateコンソールで翻訳ジョブの進捗状況を監視できます。ジョブのステータスが完了に変わると、S3バケットの出力フォルダに中国語の翻訳ドキュメント(D2L-zh)が見つかります。
翻訳品質を評価する
Amazon TranslateのACT機能の効果を示すために、並列データを使用しないAmazon Translateの従来のリアルタイム翻訳方式も同じドキュメントを処理して出力を比較しました。両方の方法の翻訳品質をベンチマークするために、BLEU(BiLingual Evaluation Understudy)スコアを使用しました。機械翻訳の出力の品質を正確に測定する唯一の方法は、専門家による品質のレビューとグレードを行うことです。しかし、BLEUは2つの出力の相対品質改善の見積もりを提供します。BLEUスコアは通常、0〜1の数字です。機械翻訳と参照人間翻訳の類似度を計算します。スコアが高いほど、自然言語理解(NLU)の品質が向上します。
私たちは、4つのパイプラインでドキュメントのセットをテストしました。英語から中国語(en to zh)、中国語から英語(zh to en)、英語からスペイン語(en to es)、およびスペイン語から英語(es to en)。以下の図は、ACTを使用した翻訳がすべての翻訳パイプラインでより高い平均BLEUスコアを生成したことを示しています。
また、並列データペアが細かいほど、翻訳性能が向上することも観察しました。たとえば、以下の並列データ入力ファイルを使用しました。これには、段落のペアが10個含まれています。
同じコンテンツの場合、以下の並列データ入力ファイルを使用しました。これには、文のペアが16個含まれています。
Amazon Translateでは、並列データの入力ファイルを両方使用して2つの並列データエンティティを構築し、同じソースドキュメントで2つのバッチ翻訳ジョブを作成しました。次の図は、出力翻訳を比較しています。文の対となる並列データを使用した出力は、段落の対を使用した出力よりも、英語から中国語への翻訳と中国語から英語への翻訳の両方で優れていることを示しています。
これらのベンチマーク分析について詳しく学びたい場合は、「Dive into Deep Learning」のAuto Machine Translation and Synchronizationを参照してください。
クリーンアップ
今後の再発生コストを避けるために、作成したリソースをクリーンアップすることをお勧めします:
- Amazon Translateコンソールで、作成した並列データを選択し、削除を選択します。代わりに、DeleteParallelData APIまたはAWSコマンドラインインターフェイス(AWS CLI)のdelete-parallel-dataコマンドを使用して、並列データを削除できます。
- ソースおよび参照ドキュメント、翻訳ドキュメント、および並列データ入力ファイルをホストするために使用されたS3バケットを削除します。
- IAMロールおよびポリシーを削除します。手順については、「ロールまたはインスタンスプロファイルの削除」と「IAMポリシーの削除」を参照してください。
結論
このソリューションにより、人間の翻訳者の作業量を80%削減し、翻訳品質を維持し、複数の言語をサポートします。このソリューションを使用して、翻訳品質と効率を向上させることができます。私たちは、他の言語に対するソリューションアーキテクチャと翻訳品質のさらなる改善に取り組んでいます。
ご意見やご質問がある場合は、コメント欄にお書きください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful