Amazon Translate によるテキスト翻訳

ずいぶん昔、2000年前に、音声合成装置に対して、読み上げるための音片コードの組み合わせを送信する制御系プログラム(Pollyに該当する機能)を構築した経験があるが、その頃の技術では、漢字の発声内容の選択は対応表をテーブルとして持たなくては対応できず、さらにコンフィグから音片コードを正確に読み上げ内容通りに組み立てるロジックも難しくって、大変苦労したのを覚えている。私のキャリアの中でも品質的に満足できるものではなく、ある意味挫折感があったのを覚えている。

それに比べると、正確な読み上げをプログラマが気にしなくてもコーディングできてしまうとは何て良い時代でしょう。
たぶん、工数的にもかかる時間を10分の1ぐらい圧縮できる気がする。

という前置きはさておき・・

Amazon Translate は、高速で高品質かつカスタマイズ可能な言語翻訳を手ごろな料金で提供するニューラル機械翻訳サービスです。ニューラル機械翻訳は、深層学習モデルを使用して、従来の統計ベースやルールベースの翻訳アルゴリズムよりも正確で自然な翻訳を提供する言語翻訳自動化の一形態です。

Amazon Translate で、さまざまなユーザー向けにウェブサイトやアプリケーションなどのコンテンツをローカライズしたり、分析用に大量のテキストを簡単に翻訳したり、ユーザー間の言語間のコミュニケーションを効率的に行ったりすることができます。

Amazon Translate の料金

標準翻訳     100 万文字あたり 15.00USD
無料利用枠    1 か月 200 万文字を 12 か月間

Active Custom Translation(並列データを使用して機械翻訳出力をカスタマイズ) 100 万文字あたり 60.00USD
Active Custom Translation の無料利用枠                   1 か月 50 万文字を 2 か月間

会社のウェブサイト:標準翻訳コストActive Custom Translation コスト
– ウェブページの平均的な長さ:
20,000 文字
ウェブサイトあたり 200 万文字30.00 USD120.00 USD
– ウェブサイトあたりのページ数:
100
3300円13200円
参考例

APIリファレンス

boto3 boto3.client関数

機能   デフォルトのセッションを使用して、低レベルのサービスクライアントを作成する
構文   boto3.client(クライアント名)
戻り値  サービスクライアントのオブジェクト

Translate translate_textメソッド

機能    入力テキストをソース言語からターゲット言語に変換します
構文

translate_text{
   "SourceLanguageCode": "string",
   "TargetLanguageCode": "string",
   "TerminologyNames": [ "string" ],
   "Text": "string"
}

戻り値

{
   "AppliedTerminologies": [ 
      { 
         "Name": "string",
         "Terms": [ 
            { 
               "SourceText": "string",
               "TargetText": "string"
            }
         ]
      }
   ],
   "SourceLanguageCode": "string",
   "TargetLanguageCode": "string",
   "TranslatedText": "string"
}

構文説明

[SourceLanguageCode]	
	
	ソーステキストの言語コード。AmazonTranslateでサポートされている言語である必要があります。
	「auto」を指定すると、Amazon Translateがテキストのソース言語を自動的に判断します。
	タイプ:文字列
	長さの制約:最小長=2 最大長=5
	指定は必須
	
[TargetLanguageCode]	
	
	ターゲットテキストの言語コード。言語は、AmazonTranslateでサポートされている言語である必要があります。
	タイプ:文字列
	長さの制約:最小長=2 最大長=5
	指定は必須
	
[TerminologyNames]	
	
	TranslateTextリクエストで使用される用語リストファイルの名前。
	TranslateTextリクエストでは、最大1つの用語リストを使用できます。
	用語リストには、最大256の用語を含めることができます。
	タイプ:文字列の配列
	長さの制約:最小長=1 最大長=256
	パターン: ^([A-Za-z0-9-]_?)+$
	指定は必須ではない
	
[Text]	
	
	翻訳するテキスト。テキスト文字列の長さは最大5,000バイトです。
	タイプ:文字列
	長さの制約:最小長=1 最大長=5000
	パターン: [\P{M}\p{M}]{1,5000}
	指定は必須

戻り値説明

アクションが成功すると、サービスはHTTP200応答を送り返します。	
次のデータが、サービスによってJSON形式で返されます。	
	
[AppliedTerminologies]	
	
	テキスト応答のための用語の名前。
	タイプ:AppliedTerminologyオブジェクトの 配列
	
[SourceLanguageCode]	
	
	ソーステキストの言語コード。
	タイプ:文字列
	長さの制約:最小長=2 最大長=5
	
[TargetLanguageCode]	
	
	ターゲットテキストの言語コード。
	タイプ:文字列
	長さの制約:最小長=2 最大長=5
	
[TranslatedText]	
	
	翻訳されたテキスト。
	タイプ:文字列
	長さの制約:最大長=10000
	パターン: [\P{M}\p{M}]{0,10000}

①テキストを日本語から英語に翻訳するプログラム translate_text_ja.py

import boto3
translate = boto3.client('translate')
text = 'きょう東京都が確認した新型コロナウイルスの新たな感染者は714人だった。直近7日間の平均は500人を超えて、508人となった。'
result = translate.translate_text(
    Text=text, SourceLanguageCode='ja', TargetLanguageCode='en')
print(result['TranslatedText'])
PS C:\Users\mikol\translate> python translate_text_ja.py

Today the Tokyo Metropolitan Government confirmed 714 new coronavirus infections. The average in the last seven days exceeded 500 people, and it was 508.

②テキストを英語から日本語に翻訳するプログラム translate_text_en.py

import boto3
translate = boto3.client('translate')
text = "Today the Tokyo Metropolitan Government confirmed 714 new coronavirus infections. The average in the last seven days exceeded 500 people, and it was 508."
result = translate.translate_text(
    Text=text, SourceLanguageCode='en', TargetLanguageCode='ja')
print(result['TranslatedText'])
PS C:\Users\mikol\translate> python translate_text_en.py

今日、東京都は714の新しいコロナウイルス感染を確認しました。過去7日間の平均は500人を超え、508人でした。

③テキストを日本語から英語に翻訳して、戻りの辞書型オブジェクトを表示するプログラム translate_response.py

import boto3
import pprint
translate = boto3.client('translate')
text = 'きょう東京都が確認した新型コロナウイルスの新たな感染者は714人だった。直近7日間の平均は500人を超えて、508人となった。'
result = translate.translate_text(
    Text=text, SourceLanguageCode='ja', TargetLanguageCode='en')
pprint.pprint(result)
PS C:\Users\mikol\translate> python translate_response.py

{'ResponseMetadata': {'HTTPHeaders': {'cache-control': 'no-cache',
                                      'content-length': '226',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Wed, 30 Jun 2021 09:41:35 GMT',
                                      'x-amzn-requestid': '1439ceff-5c88-4f2d-972b-999999999999'},
                      'HTTPStatusCode': 200,
                      'RequestId': '1439ceff-5c88-4f2d-972b-999999999999',
                      'RetryAttempts': 0},
 'SourceLanguageCode': 'ja',
 'TargetLanguageCode': 'en',
 'TranslatedText': 'Today the Tokyo Metropolitan Government confirmed 714 new '
                   'coronavirus infections. The average in the last seven days '
                   'exceeded 500 people, and it was 508.'}

SourceLanguageCode:ソーステキストの言語コードの言語対応表

言語言語コード
アフリカーンス語af
アルバニア語sq
アムハラ語am
アラビア語ar
アルメニア語hy
アゼルバイジャンaz
ベンガル語bn
ボスニアbs
ブルガリア語bg
カタロニア語ca
中国語(簡体字)zh
中国(伝統的な)zh-TW
クロアチア語hr
チェコ語cs
デンマーク語da
ダリー語fa-AF
オランダnl
英語en
エストニア語et
ペルシア語(ペルシア語)fa
フィリピンのタガログ語tl
フィンランド語fi
フランス語fr
フランス語(カナダ)fr-CA
ジョージア語ka
ドイツ語de
ギリシャ語el
グジャラート語gu
ハイチ語ht
ハウサ語ha
ヘブライ語he
ヒンディー語hi
ハンガリー語hu
アイスランド語is
インドネシア語id
イタリアit
日本語ja
カンナダ語kn
カザフkk
韓国語ko
ラトビア語lv
リトアニア語lt
マケドニアmk
マレー語ms
マラヤーラム語ml
マルタ語mt
モンゴルmn
ノルウェー語no
ペルシア語fa
パシュトゥー語ps
ポーランド語pl
ポルトガル語pt
ルーマニア語ro
ロシアru
セルビア語sr
シンハラ語si
スロバキアsk
スロベニアsl
ソマリアso
スペインes
スペイン語(メキシコ)es-MX
スワヒリ語sw
スウェーデンsv
タガログ語tl
タミル語ta
テルグ語te
タイ語th
トルコ語tr
ウクライナ語uk
ウルドゥー語ur
ウズベク語uz
ベトナム語vi
ウェールズcy
言語名と言語コードの対応表