Tailwind Logo

API を利用して機械翻訳を実施する - DeepL

関連技術

公開日: 2024-08-30

最近は AI エンジンでも翻訳ができるようになってきました。サービスとしては、アプリやチャット形式ではなく API を通じて翻訳も可能になっています。今回は DeepL の API を利用して翻訳サービスがどう動くのかを確認していきます。

DeepL の翻訳

このブログでも利用している機械翻訳サービスの DeepL では API を利用して翻訳をすることが出来ます。実際にこのサービスを利用して API 経由で翻訳をする手順を確認していきます。

DeepL API は月間 500,000 文字まで無料版で翻訳をすることが出来ます。登録にはクレジットカードの情報などを登録をする必要はありますが、プランを自分で変更しない限りは課金されることはありません。

アカウントの作成

アカウントを作成するにあたって、まずは Web サイトにアクセスをして、右上にある無料で体験するをクリックすると申し込みページに移動します。3つほどサービスがありますが、今回は DeepL API を選択してください。このブログを書いている時の URL は以下の通りです。

deepl01ja.png

DeepL API Free をクリックすることで、API サービスの申し込みが可能となります。

アカウント作成には住所やクレジットカードの登録が必要ですが、クレジットカードに関しては有料版に切り替えた時に利用できるようにすること、また本人確認という意味合いで登録することになっており、注意が必要ですが勝手に有料版になることはないと記載されているので、気にせず進めていきましょう。

実際にアカウントの作成が完了したあと、アカウントの画面から API キーの確認をするとキーを取得することができるようになっています。これでアカウントの準備ができました。

deepl02ja.png

Postman Collection を取得する

API 経由での動作の確認をするには Postman が便利です。そして、DeepL の開発者向け文書において、Postman を利用するためのページも公開されています。

このページに記載されている Run in Postman のボタンをクリックすると、以下のような画面に切り替わります。

deepl03.png

今回は Copy ではなく Fork Collection のボタンをクリックして、Postman のアカウントでログインをします。ログインをすると Collection の名前を指定することができます。今回は以下のように設定をしました。

deepl04.png

完了すると、以下のように Postman からアクセスすることが可能となります。

deepl05.png

Postman から翻訳を実行する

基本設定

今回は基本的な翻訳を Postman で実行していきます。まず、API キーを設定するにあたって、ルートにある DeepL API を選択して、Variables の項目を確認してください。初回は以下のようになっています。

deepl06.png

今回は無料版となるため API の連携先の URL はことなり、https://api-free.deepl.com/v2 を選択する必要があります。また API キーを DeepL の管理画面から取得して、設定をしてください。これで準備が完了です。

サンプルを実行する

上記の設定が完了したところで、サンプルの翻訳を実行してみます。値が正しければ、サンプルは以下のように結果を返します。

deepl07.png

翻訳リクエストを変更する

サンプルの翻訳に関しては、application/x-www-form-urlencoded を利用しており、項目に対して値を Postman で設定することで翻訳結果を取得していました。Translate text のページを確認しにいくと、データとして JSON 形式で渡して結果を取得するサンプルがあるため、この形のサンプルを作成します。

まず、既存の Request Translation のサンプルを Duplicate でコピーをして、Request Translation JSON とします。Header の項目は空欄として、Body には以下の JSON を設定します。

JSON
{
  "text": [
    "Hello, world!"
  ],
  "target_lang": "JA"
}

Body のデータ形式に関しても JSON この状況で実行すると、結果を取得できました。

deepl08.png

HTML のデータを翻訳する

テキストのデータではなく HTML のタグが入っているデータの翻訳はどうなるでしょうか?サンプルのデータとして、Sitecore のサンプルの HTML を Json 形式で渡します。元の言語とターゲットの言語、という形で指定しています。

JSON
{
    "text": [
        "<p style=\"line-height: 22px;\">From a single connected platform that also integrates with other customer-facing platforms, to a single view of the customer in a big data marketing repository, to completely eliminating much of the complexity that has previously held marketers back, the latest version of Sitecore makes customer experience highly achievable. Learn how the latest version of Sitecore gives marketers the complete data, integrated tools, and automation capabilities to engage customers throughout an iterative lifecycle &ndash; the technology foundation absolutely necessary to win customers for life.</p><p>For further information, please go to the <a href=\"https://doc.sitecore.net/\" target=\"_blank\" title=\"Sitecore Documentation site\">Sitecore Documentation site</a></p>"
    ],
    "source_lang": "EN",
    "target_lang": "JA"
}

この結果は以下のように返ってきます。

JSON
{
    "translations": [
        {
            "detected_source_language": "EN",
            "text": "<p style=\"line-height: 22px;\">他の顧客対応プラットフォームとも統合できる単一の接続プラットフォームから、ビッグデータ マーケティング リポジトリにおける顧客の単一ビューまで、これまでマーケティング担当者の足かせとなっていた複雑性の多くを完全に排除したSitecoreの最新バージョンは、カスタマーエクスペリエンスを実現します。</p><p>詳細については、<a href=\"https://doc.sitecore.net/\" target=\"_blank\" title=\"Sitecoreドキュメンテーションサイト\">Sitecoreドキュメンテーションサイト</a></p>をご覧ください。"
        }
    ]
}

上記の結果でもそのまま使える形ですが、DeepL の翻訳の際に HTML として扱うことができるパラメータとして tag_handling が用意されているため、こちらを利用してみます。

JSON
{
  "text": [
    "<p style=\"line-height: 22px;\">From a single connected platform that also integrates with other customer-facing platforms, to a single view of the customer in a big data marketing repository, to completely eliminating much of the complexity that has previously held marketers back, the latest version of Sitecore makes customer experience highly achievable. Learn how the latest version of Sitecore gives marketers the complete data, integrated tools, and automation capabilities to engage customers throughout an iterative lifecycle &ndash; the technology foundation absolutely necessary to win customers for life.</p><p>For further information, please go to the <a href=\"https://doc.sitecore.net/\" target=\"_blank\" title=\"Sitecore Documentation site\">Sitecore Documentation site</a></p>"
  ],
  "tag_handling": "html",
  "source_lang": "EN",
  "target_lang": "JA"
}

結果は以下のように若干異なる形で帰ってきました。タグの中の文章が翻訳されずの維持されている形です。

JSON
{
    "translations": [
        {
            "detected_source_language": "EN",
            "text": "<p style=\"line-height: 22px;\">他の顧客対応プラットフォームとも統合できる単一の接続プラットフォームから、ビッグデータ マーケティング リポジトリにおける顧客の単一ビューまで、これまでマーケティング担当者の足かせとなっていた複雑性の多くを完全に排除したSitecoreの最新バージョンは、カスタマーエクスペリエンスを高度に実現します。Sitecoreの最新バージョンにより、マーケティング担当者が反復的なライフサイクルを通じて顧客をエンゲージするための完全なデータ、統合ツール、自動化機能、つまり生涯顧客を獲得するために絶対に必要なテクノロジー基盤がどのように提供されるかをご覧ください。</p><p>詳細については、<a href=\"https://doc.sitecore.net/\" target=\"_blank\" title=\"Sitecore Documentation site\">Sitecoreドキュメントサイトを</a>ご覧ください。</p>"
        }
    ]
}

タグの値が変更されると困るケースもあるため、HTML として扱う方が良さそうです。

まとめ

今回は DeepL に対して JSON のデータを渡して HTML の翻訳がどのように動いているのかを確認しました。タグが入っていても正しく翻訳されていることを確認できたので、これを利用して CMS と連携するデモに取り掛かっていきます。

関連タグ