初めてのAmazon TranslateとAWS CLIでの利用方法

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon Translateとは

AWSが提供する機械学習により高品質の翻訳を提供するサービスです。2018年10月現在、13言語(英語と他12言語)に対応しています。

  • 英語
  • アラビア語
  • 簡体字中国語
  • 繁体字中国語
  • チェコ語
  • フランス語
  • ドイツ語
  • イタリア語
  • 日本語
  • ポルトガル語
  • ロシア語
  • スペイン語
  • トルコ語

Amazon Translateのニューラルネットワークは英語を各言語に翻訳、あるいは各言語を英語に翻訳するようにトレーニングされています。つまりソースとなる言語は一度英語に翻訳され、その英語をターゲット言語に翻訳と、2回翻訳処理が発生します...だったのですが、10月29日の以下のアップデートで、英語を介さずに直接翻訳される言語ペアが増えました。

ソースとなるテキストはUTF-8形式で、出力されるテキストもUTF-8です。

ソース言語は指定することも出来ますし、自動で検出させることも出来ます。自動検出はAmazon Comprehendによって実現しています。それぞれの言語を指定するためのコードは以下の通りです。

Language Code
アラビア語 ar
簡体字中国語 zh
繁体字中国語 zh-TW
チェコ語 cs
英語 en
フランス語 fr
ドイツ語 de
イタリア語 it
日本語 ja
ポルトガル語 pt
ロシア語 ru
スペイン語 es
トルコ語 tr

Amazon TranslateはAPIで提供されており、AWS CLIまたはAWS SDKを使うことで簡単に利用出来ます。2018年10月現在、Amazon Translateが利用出来るリージョンはバージニア(us-east-1)、オハイオ(us-east-2)、オレゴン(us-west-2)、アイルランド(eu-west-1)、GovCloudの5つです。

AWS CLIでAmazon Translateを使ってみる

今回はバージニアリージョンを使ってみます。ソース言語は日本語、ターゲット言語は英語を指定しています。

$ aws translate translate-text \
            --region us-east-1 \
            --source-language-code "ja" \
            --target-language-code "en" \
            --text "オラわくわくしてきたぞ"

結果は以下の通り。

{
    "TargetLanguageCode": "en",
    "TranslatedText": "I'm so excited about this.",
    "SourceLanguageCode": "ja"
}

ターゲットを英語以外にしてみます。ドイツ語を指定してみました。

$ aws translate translate-text \
            --region us-east-1 \
            --source-language-code "ja" \
            --target-language-code "de" \
            --text "オラわくわくしてきたぞ"

結果は以下の通り。

{
    "TargetLanguageCode": "de",
    "TranslatedText": "Ich bin so aufgeregt.",
    "SourceLanguageCode": "ja"
}

ソース言語を自動検出させてみます。この場合、--source-language-codeにautoを指定します。

$ aws translate translate-text \
            --region us-east-1 \
            --source-language-code "auto" \
            --target-language-code "ja" \
            --text "Ich bin so aufgeregt."

結果。SourceLanguageCodeがdeとなっていますので、自動検出に成功しています。

{
    "TargetLanguageCode": "ja",
    "TranslatedText": "興奮してる",
    "SourceLanguageCode": "de"
}

対応していない言語を使ってみます。今回は韓国語にしてみました。

$ aws translate translate-text \
            --region us-east-1 \
            --source-language-code "auto" \
            --target-language-code "ja" \
            --text "나는 이것에 너무 흥분한다."

結果は以下の通り。韓国語(ko)であることは検出した上で、サポートされていないソース言語である、という例外(UnsupportedLanguagePairException)が返りました。

An error occurred (UnsupportedLanguagePairException) when calling the TranslateText operation: Unsupported language pair: ko to ja Autodetected source language code 'ko' is not supported. Use a supported source language code if you believe the input text is in that language.

ソース言語を自動検出にして、複数の言語を混ぜてみます。

$ aws translate translate-text \
            --region us-east-1 \
            --source-language-code "auto" \
            --target-language-code "ja" \
            --text "I'm so aufgeregt about これ."

結果は以下の通り。ソース言語は日本語(ja)ではないかと自動検出しましたが、信頼性が低い、という例外(DetectedLanguageLowConfidenceException)が返りました。

An error occurred (DetectedLanguageLowConfidenceException) when calling the TranslateText operation: Translate request rejected due to low confidence of auto detected source language 'ja'. Specify a valid source language code to force translation.

さて、ここまではコマンドラインに文字列を追加していましたが、今度はjsonファイルを使って翻訳してみます。以下のようなjsonファイルを用意します。

{
    "Text": "吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。吾輩はここで始めて人間というものを見た。", 
    "SourceLanguageCode": "ja", 
    "TargetLanguageCode": "en"
}

AWS CLIで--cli-input-jsonを指定して実行します。

$ aws translate translate-text \
            --region us-east-1 \
            --cli-input-json file://translate.json > translated.json

結果は以下の通り。

$ cat translated.json
{
    "TargetLanguageCode": "en",
    "TranslatedText": "I am a cat. I have no name yet. I have no idea where I was born. I only remembered that I was crying meow in a dim and bully place.",
    "SourceLanguageCode": "ja"
}

まとめ

以下のことがわかりました。

  • ソース言語は指定することも自動検出させることも可能。
  • ソース言語がサポート対象外言語だと例外が発生する。
  • ソース言語が自動検出出来ない、あるいは自動検出結果の精度が低いと、例外が発生する。
  • 文字列を指定することもjsonファイルを指定することも可能。

次回はもっと複雑な使い方をしてみたいと思います。