0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon TranslateでUnsupported target languageとエラーが出たときはカスタム用語を疑う

Posted at

はじめに

私は都内のWeb系企業で、自然言語処理をメインに機械学習について研究をしています。
そこで、最近AWSのAI系のサービスも調査をしています。

そこで、使って分かったAWSのAIという本でサービスを一通り触れています。
この本では、各サービスをとりあえず動かしてどのようなものかを紹介する内容になっています。

その中でAmazon Translateを利用する箇所でエラーが出ましたので、そちらについてまとめます。

問題

英語から日本語に翻訳する際に、カスタム用語を設定しました。
csvで以下のようなファイルを作成して、モデルに読み込ませます。

my_terminology.csv
en,jp
Sukiyaki,上を向いて歩こう

これはSukiyakiスキヤキと翻訳せず、上を向いて歩こうに翻訳するように設定しています。
読み込ませるためのコードは以下のようになっています。

translate.py
import boto3
import json

client = boto3.client('translate', region_name='us-east-1')

with open('my_terminology.csv', 'rb') as mt:
    bytes_data = mt.read()
    response = client.import_terminology(
        Name='my_terminology',
        MergeStrategy='OVERWRITE',
        TerminologyData={
            'File': bytes_data,
            'Format': 'CSV',
	    }
    )
    
    print(response)

すると、以下のエラーが発生しました。

---------------------------------------------------------------------------
InvalidParameterValueException            Traceback (most recent call last)
<ipython-input-17-8cd1f28f9f90> in <module>()
     11         TerminologyData={
     12             'File': bytes_data,
---> 13             'Format': 'CSV',
     14 	    }
     15     )

/opt/conda/lib/python3.6/site-packages/botocore/client.py in _api_call(self, *args, **kwargs)
    355                     "%s() only accepts keyword arguments." % py_operation_name)
    356             # The "self" in this scope is referring to the BaseClient.
--> 357             return self._make_api_call(operation_name, kwargs)
    358 
    359         _api_call.__name__ = str(py_operation_name)

/opt/conda/lib/python3.6/site-packages/botocore/client.py in _make_api_call(self, operation_name, api_params)
    659             error_code = parsed_response.get("Error", {}).get("Code")
    660             error_class = self.exceptions.from_code(error_code)
--> 661             raise error_class(parsed_response, operation_name)
    662         else:
    663             return parsed_response

InvalidParameterValueException: An error occurred (InvalidParameterValueException) when calling the ImportTerminology operation: Unsupported target language. (line 1)

調べたところ該当するものがなく、ターゲットがサポート外とのことでよくわからず困りました。

解決方法

結論から言うと、これはcsvに問題がありました。

my_terminology.csv
en,jp
Sukiyaki,上を向いて歩こう

ですが、en,jpとなっていますが、本当はen,jaでした。
こちらが正しいです。

my_terminology.csv
en,ja
Sukiyaki,上を向いて歩こう

エラーがcsvで起きているとは思わず、読み込むほうのコードを疑って時間を使ってしまいました。

ですので、このエラーが出た場合言語の指定をしている箇所が間違っていないか確認するとよいかもしれません。

おわりに

エラーがら原因がわかりづらいと感じたものは記事にするようにしています。
同じミスをする人はかなり少ないと思いますが、誰かの参考になればと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?