プログラミング

自動翻訳APIの選定

auto-translate-api

運用しているサービスにて、自動翻訳APIを実装しました。

すでに世の中には、自動翻訳に対応するAPIがいくつかあります。

導入するにあたって、どのAPIを使用すべきか比較検討を行い、AWSが提供する「Amazon Translate」を実装しました。

今回の記事では、選定の検討内容を記載します。

2020年10月の検討内容ですので、各APIが諸々アップデートされている可能性があります。

自動翻訳APIサービスの洗い出し

検討したサービスは以下の3つです。

  • DeepL API
  • Google Translation API
  • Amazon Translate

DeepL API

deepl

公式サイト: https://www.deepl.com/ja/translator

ご存じの方も多いと思いますが、DeepLは今流行りの翻訳サービスです。なんと行っても、翻訳の精度(といいますか翻訳のニュアンス)が良く、オンラインやでデスクトップアプリとして大活躍しています。

私自身、iOSやAndroidの翻訳単語を作成するのに使用したり、ストアのローカライズでの文章を翻訳するのに使用しており、DeepLの翻訳の質にとても満足しています。

DeepLを調査したところAPIを提供しているので、こちらが第一候補となりました。ニーズにマッチしていればそのままDeepLでいきたかった。。

比較検討ポイントは以下の5点です。

  • 翻訳精度
  • 料金
  • カスタム辞書
  • APIの仕様
  • 対応言語

DeepL APIの翻訳精度

こちらは文句なしです。普段から使用しているので翻訳精度には満足しています。今回の自動翻訳の導入で翻訳対象となる文章をいくつか翻訳してみましたが、翻訳文章がとても自然で読みやすいです。文句なしです。

DeepL APIの料金

確認してみたところ、DeepL Proに登録し、DeepL APIプランに登録するとAPIが使用できると。料金は、月額630円に加えて、2,500円/100万文字とのこと。

この時点では、他APIを見ていないので、料金に関してはなんとも言えず、というところです。格段高いというわけではなさそうでした。

DeepL APIのカスタム辞書機能

翻訳するにあたり、サービスによっては特殊な単語をどう翻訳するのか、という点が問題になってきます。

一般的な単語や文章のみが翻訳対象となるのであれば、この点は無視しても良いのですが、今回のケースでは、多くの特殊な単語や文章を翻訳する必要がありましたので、DeepLでその対応が可能かどうか検討しました。

検討結果としては、「DeepL APIではカスタム辞書的な機能は使用出来ない」と判明しました。

オンラインやオフラインでのDeepLアプリでは、「用語集」機能を使用することで、カスタム辞書的に翻訳精度を高めることが可能です。ただし、この「用語集」機能は、2020年10月時点ではAPIで使用できないことが判明しました。

DeepL APIの仕様

それでもDeepL APIの調査を継続します。実際にDeepL Proに登録して少しAPIを使ってみました。

公式ドキュメントに詳細が記載されています。

APIリクエストはPOST形式、そこにいくつかのパラメータを含める、というもの、簡潔です。

必須なparameterは以下の2つです。

  • text
  • target_lang

まあ当たり前ですよね、どんな文章をどの言語に翻訳するのか、この2点です。翻訳元の言語はパラメーターに含めなくても自動で判別してくれるようです。

翻訳元の言語はパラメータに含めることも可能です。含めると精度や速度に差があるのかもしれません。おそらく内部的には、翻訳元の言語がパラーメターに含まれていると、翻訳処理のみ、含まれていなければ 判別 -> 翻訳処理 となるのでしょうか。。料金に差があるわけではないので、まあ良しとします。

ただし、POSTで送るのですがパラメータはbody parameterではなく、query parameterに含める必要があります。https通信とはいえ、少し引っかかります。。

DeepL APIの翻訳対応言語

翻訳元言語

German, English, French, Italian, Japanese, Spanish, Dutch, Polish, Portuguese (all Portuguese varieties mixed), Russian, Chinese

翻訳対象言語

German, English (British), English (American), English (unspecified variant for backward compatibility; please select EN-GB or EN-US instead), French, Italian, Japanese, Spanish, Dutch, Polish, Portuguese (all Portuguese varieties excluding Brazilian Portuguese), Portuguese (Brazilian), Portuguese (unspecified variant for backward compatibility; please select PT-PT or PT-BR instead), Russian, Chinese

ドイツの企業だけあって、ヨーロッパ系言語は割と対応している印象。今回導入するサービスには、韓国語ユーザーも多く含まれているので、韓国語が無いのが残念。(日本語が対応されたのも割と最近ここ1年くらいかな?いずれ対応言語は広がっていくと思われますが、現時点では対応言語は多くはないようです。また中国語は簡体字のみです。)

いくつかニーズにマッチしなかったので、他のAPIも見ることにしました。

Google Translation API

gcp

次に見たのはGoogle Translation APIです。昔からグーグル翻訳は多くのユーザーに使われているので、知らない人はいないんじゃないでしょうか。

Google Translation APIを使うには、GCPが必要なようです。。GCPなんか苦手意識ある。。(AWSほど使っていないだけですが。。)

DeepL APIと同様の「翻訳精度」「料金」「カスタム辞書」「APIの仕様」「対応言語」という観点で精査していきました。

Google Translation APIの翻訳精度

精査すると行っておきながら、していません。オンラインで使用できる翻訳の精度と変わらないだろうとあたりを付け、まあ許容範囲と考えました。ニュアンスなどはまだまだ問題があり、DeepLには精度で劣るぐらいだろうと暫定的に判断しました。

Google Translation APIの料金

Cloud Translation

公式サイトに以下のようにあります。

  • 最初の 500,000 文字:無料($10 のクレジットとして適用)
  • 500,000 から 10 億文字:$20/100万文字
  • 10 億文字以上:割引料金についてのご相談は、営業担当者にお問い合わせください。

DeepL APIよりは少し安いですね。

Google Translation APIのカスタム辞書

こちらは対応しているようです。Translation API Advancedでできるようです。

Google Translation APIの仕様

専用のSDKが用意されており、公式ドキュメントに沿ってスムーズに実装出来そうですね。
公式ドキュメント

問題なさそうです。GCP使うのが面倒だなというぐらいです。

Google Translation APIの対応言語

ウェブでも200以上の言語が翻訳できるのでAPIでも問題ないだろうと判断。

Google Translation APIの結論として、実現したいことは出来そう、料金も無難、といった判断になりそうです。

次はAmazon Translateを見ていきます。

Amazon Translate

eyecatch-aws

AWSも翻訳APIを提供しており、そのサービス名は、「Amazon Translate」です。

Amazon Translate

DeepL APIと同様の「翻訳精度」「料金」「カスタム辞書」「APIの仕様」「対応言語」という観点で精査していきました。

Amazon Translateの翻訳精度

正直翻訳精度が良いのか悪いのか判断が難しいです、というかほぼ出来ない。やってみて違和感がどれぐらいあるかどうかという定性的な判断しか出来ない。

いくつか文章を翻訳してみて、問題はなさそうだなと感じたので、よしとします。

Amazon Translateの料金

Amazon Translateの料金は検討した中で一番安かったです。

まず無料利用枠があり、200万文字/月が12ヶ月無料になります。
無料利用枠以外では、$15/100万文字です。

とりあえず無料で試せるというのが魅力的ですね。

料金 – Amazon Translate

Amazon Translateのカスタム辞書機能

Amazon Translateではカスタム辞書も登録が可能です。

公式ドキュメント

ひとまずカスタム辞書使えるということがわかったので、次のポイントを検討します。

Amazon TranslateのAPIの仕様

SDKが提供されています。公式ドキュメントには、Java, Python, Mobileの記載がありますが、今回使用するRubyでも提供されているようなので、一安心です。

Amazon Translateの対応言語

55の言語に対応しており、メインな言語に加えて、DeepLになかった、韓国語や中国語繁体字も含まれるので、良さげです。

公式ドキュメント

自動翻訳APIの選定結果

検討ポイントを表にまとめると以下のようになりました。

DeepL APIGoogle Translation APIAmazon Translate
翻訳精度かなり良い。ニュアンスもいい感じに翻訳される。許容範囲内許容範囲内
料金月額600円 + 2,500円/100万文字20$/100万文字 (月で10億文字未満の場合)15$/100万文字 (最初の12ヶ月は毎月200万文字無料)
用語集なしありあり
APIの仕様parameterをquery parameterに含めないといけないという懸念ありSDKでいい感じに対応可能SDKでいい感じに対応可能
対応言語主要10言語程度(例えば韓国語はなし)かなり豊富55の言語

精度の観点ではDeepL APIが良さげ。
料金の観点では、Amazon Translateが一番安い。
その他の観点では、DeepL APIがニーズにマッチせず、残念ながらGoogle Translation APIかAmazon Translateに絞られました。

最終的には、サーバーなどすべてAWSで運用しているのもあって、Amazon Translateで実装することにしました。

DeepL APIを使いたいという思いが強かったのですが、現時点ではニーズをカバーしきれず、今後のアップデートに期待したいと思います。

Google Translation APIもいいと思うのですが、個人的にGCPに苦手意識を持ってしまっているので、今回は見送りとなりました。GCPはAndroidアプリのためのいくつかの設定やPubSubを使ったサブスクリプションの連携等を行なっていますが、まだまだ使いこなしきれていません。もし、サーバーの運用もすべてGCPで行なっていたら、翻訳機能もGCPで実装していただろうなと思います。なので、Google Translation APIにマイナス点があるというわけではありませんので、選定する際には、ご自身のアーキテクチャも考えて、Google Translation APIにすることも十分可能性として考えられると思います。

今回は以上です。