DeepL APIを使ってみる

Posted on 2020/08/16

ToC

DeepL翻訳

日本からのお客様だけでなく、世界各国のお客様からのお問い合わせをうけるサービスを運営していると いろいろな言語での問い合わせがあります。
AI翻訳で話題になったDeepL翻訳でAPIが利用可能になっていたので少し試してみました。

利用登録

DeepLは、ブラウザ上で文字数等の一定の制限範囲内で無料で利用できるサービスと 各種の機能制限がないDeepL Pro、APIアクセスが可能なDeepL APIの有償サービスがあります。

今回は、APIでの利用を想定しているため、DeepL APIの機能を利用します。 DeepL APIは、月額630円 + 100万文字ごとに2500円 (2020/8現在)という価格体系です。
100万文字の翻訳がどの程度の量にあたるのかがあまりイメージが付きませんが、日本語でいうと 400字詰の原稿用紙が2500ページという量になるので、途方もない量ではあります。 (ちなみに一般的な翻訳者は1日2000〜4000文字程度の翻訳を行うらしいです。)

DeepL APIを利用するためには、利用契約が必要なため各種の内容を登録します。 利用者の名前やクレジットカード情報の登録を行った後、利用規約を確認して購入すると あっという間に契約は完了して利用可能な状態になります。

/posts/2020/08/img/35b1b3b7_hu3d40e965af0894bb0485748f96b00ca5_184790_700x0_resize_lanczos_3.png

翻訳データは、一時的にサーバーにアップロードされるものの処理後には即座に削除するとの記載もあり、 データ機密性の確保についてもしっかりしているようなので、安心感があります。 また、使いすぎる不安があるので(あるような、ないようなですが)、料金の上限設定も可能です。
今回は、あくまで検証のレベルなので100万文字を上限として設定しました。

/posts/2020/08/img/961c3abf_huf10b9a375e85fade6d9974ce9b3df859_125315_700x0_resize_lanczos_3.png

DeepL APIで翻訳

利用登録が完了すると DeepL APIで使用する認証キー という項目がアカウントの画面で 確認できるようになります。逆に言うと、認証キーが全てです。 あとは、API 技術資料があるのでこれを見ながらすすめることになります。

細かい話は色々あると思いますが、結論からいうと下記のようなソースコードで翻訳処理が 簡単にできました。

import os
import json
from urllib import parse, request, error

DEFAULT_TARGET_LANG = 'ja'
DEEPL_API_KEY = os.environ.get('DEEPL_API_KEY')
DEEPL_ENDPOINT = 'https://api.deepl.com/v2/translate'

def translate_text_deepl(message: str, target_language_code=DEFAULT_TARGET_LANG):
    headers = {'Content-Type': 'application/x-www-form-urlencoded; utf-8'}
    params = {
        'auth_key': DEEPL_API_KEY,
        'text': message,
        'target_lang': target_language_code
    }
    req = request.Request(url=DEEPL_ENDPOINT, method='POST',
                          data=parse.urlencode(params).encode('utf-8'),
                          headers=headers)
    try:
        with request.urlopen(req) as response:
            response_json = json.loads(response.read().decode('utf-8'))
            translated_result = response_json.get('translations', {})[0]
            return translated_result.get('text', None)
    except error.HTTPError as e:
        print(e)
        return None

翻訳処理の速度もかなり速いように感じます。
同じ翻訳内容でAmazon Transcribe + Amazon Translateを使った翻訳翻訳をしてみましたが、 処理スピードはAWSのマネージドサービスと同等レベルのレスポンスで利用できました。 そもそもリアルタイム翻訳処理が必要でなければ、あまり問題になるレベルではないと考えられます。

処理1回目2回目3回目
Deep L1704.44 ms2215.28 ms3234.91 ms
Amazon Transcribe + Translate1889.43 ms1184.24 ms2083.89 ms

翻訳精度は…

気になる翻訳精度ですが、日→英、英→日をいくつか試してみましたが、DeepLの翻訳は いくつかの機械翻訳の中で最も自然な文章になっているなと感じました。
あえて、AWSの技術資料DeepLAmazonの両方に翻訳させてみたりもしましたが、 流石にAmazonの翻訳の学習データとして組み込まれていると思われ、Amazon Translateの 翻訳結果が完璧でした。(そりゃそうだ)

いずれにしても、世界各国のお客様からの問い合わせ業務を複数の言語スキルの異なるメンバーが対応するような 業務環境においては、AI翻訳を利用して得意とする言語でお問い合わせ内容を把握できるようになるため 業務品質を向上させる一つのツールとして十分に活用できる翻訳精度レベルであると思います。

参照