Noh | エンジニア向け情報共有コミュニティ
Signup / Login

翻訳APIはOpenAI APIがおすすめ (ChatGPTでも使えるプロンプト紹介あり)

投稿日: 2024/07/02

先日、DeepL API と OpenAI API と Google Cloud Translation API を使った翻訳にかかる費用の比較をしました。
最終的にNohでは OpenAI API を使用しているのでその知見のご紹介です。

Nohでは最終的に翻訳機能でGPT-3.5-Turboを用いたOpenAI APIを使用しています。使用してるプロンプトはマークダウンを翻訳するのに使っており、リポジトリのドキュメントを翻訳する役にも立つのではないかと思います。

OpenAI APIを翻訳に使用するメリット

OpenAI APIを翻訳に使う最も大きなメリットは料金の安さです。
詳しくはDeepL API vs OpenAI API vs Google Cloud Translation API 翻訳料金比較編を読んでほしいですが、DeepL APIと比べてGPT-3.5-Turboを使った翻訳は10分の1以下のコストです。GPT 4o を使ったとしてもDeepL APIより安いです。

また、Nohのようにマークダウン文章を翻訳させたりできる柔軟性も素晴らしいです。DeepL翻訳はXML等の翻訳に対応していますが、マークダウンは理解してくれません。柔軟に翻訳に指示を出すことができます。使ってみると本当に素晴らしいことに気づきます。

例えば、あなたは優秀なエンジニアですのようなプロンプトを追加することで、翻訳をより自然にできる気もします(詳しく検証はしていませんが)。技術的な単語を不自然に訳されることは少ないと感じています。

翻訳の制度もかなり高いと感じます。良くも悪くも自然な文章が多いです。個人的な経験ではGPT-3.5-Turboでも十分な翻訳能力があります。

OpenAI APIを翻訳に使用するデメリット

もちろんデメリットもあります。

自然言語処理であるため、プロンプトを無視して自由度の高い回答をされるのは困ります。プロンプトを工夫することである程度防ぐことができますが、完全に防ぐのは技術的に難しいです。
実際に試してみると「入力した文章の説明を始める」「翻訳元と同じ言語で出力する」「マークダウンの要素を勝手に変更する」みたいな挙動を定期的に起こします。

問題のあるレスポンスをしないようにプロンプトを追加しても、プロンプト自体を無視したりするので技術的な限界を感じます。

レスポンスの形式を指定するのが難しい問題点もあります。DeepL APIでは配列で値を返したりできますが、OpenAI APIはJsonで安定して値を返すことも難しいです。様々な解決アプローチはありますが、個人的な最適解は1つの翻訳のみを返すこと(つまりそもそもJsonで返さない)が最も安定すると思います。

実行にかかる時間もやはり大きいです。

Usage Limit(使用制限)にも注意が必要です。
ユーザーのレベルによって細かい制限があります(とはいえ実用上問題になりにくい程度には寛容だと個人的に感じます)。

以上のようなデメリットを許容できないのであればDeepL APIを使う方がよいでしょう。

おすすめのマークダウン文章翻訳プロンプト

You are an engineer and are only allowed to translate. Translate user input markdown text into English. Maintain the markdown structure exactly as it is in the input. Do not change header levels or other markdown formatting. Only translate the text content.

おすすめのプロンプトです。
解説していきます。

You are an engineer and are only allowed to translate.
エンジニアとして翻訳するように伝えています。技術的な単語に強くなっている気がします。
また、翻訳しかできないと指定しています。これは個人的にかなり有効なプロンプトでした。逆に翻訳以外をしないでくださいというプロンプトは役に立ちませんでした。

Translate user input markdown text into English.
翻訳させるプロンプトです。

Maintain the markdown structure exactly as it is in the input. Do not change header levels or other markdown formatting.
マークダウンの構造を壊さないように注意しています。あなたがマークダウン文章を翻訳する場合、最も大事な私事です。このプロンプトが無いと、H1をH2に変更されるなど勝手にマークダウンの構造を変えられました。

Only translate the text content.
これは必要かあまりわかってませんが、余計な出力を抑えるために試験的に追加しています。なくても変わらないかもしれません。

OpenAI APIを使用するうえでの注意点・工夫

言うまでもないことですが、OpenAI APIやDeepL APIを使用する際はクライアントから直接APIをたたいてはいけません。各APIをラップしたAPIを作成して、APIトークンはサーバーサイドの環境変数やシークレットマネージャーで管理します。
これも言うまでもないことですが、APIトークンはソースコードに直接書いてGit pushしてはいけません。

DeepL APIを使用するときも同じですがOpenAI APIを使用して翻訳機能を作る場合、ユーザーが無限に翻訳を実行できないように制限を掛ける必要があります。攻撃されたり、実装ミスにより高額請求が来るのを防げます。

プロンプトインジェクションへの対策も必要です。先ほどのように制限を掛けることが対策の1つになります。また、翻訳元の文章量によって出力トークン数の制限を掛けるのも有効だと考えます。翻訳元の文章量と翻訳後の文章量にはある程度相関があるので、例えば10トークンの英語を日本語に翻訳するときは20~30トークンくらいの出力トークン数に制限してもいいはずです。
これによって意図せぬ出力を抑えられます。

入力文章の長さによって使用モデルを変更することも有用です。
長い文章はgpt-3.5-turbo-16k、短い文章はgpt-3.5-turboを使って翻訳するとよりコストを抑えられます。

実行時間がかかることへの対策も必要です。NohではNohの翻訳APIが複数の文章を受け取り、Promise.allなどを用いて並列に複数リクエストをOpenAI APIに送っています。これによって多くの文章を翻訳する速度を飛躍的に速めています。また、OpenAI APIがJsonをシリアライズするのが苦手なので、その対処にもなっています。

そして最後のコツですが、広い心を持ちましょう。細かくプロンプトを書きましたが、定期的にプロンプトを忘れた挙動をします。それを許容できない要件であれば他の選択肢を考えるべきです。

まとめ

OpenAI APIのGPT-3.5-Turboを使った翻訳は非常に安価で、ある程度翻訳ミスを許容できるなら精度的にも実用に耐えるレベルだと思います。逆に言えば、突拍子のない翻訳を返すことが許容できないシステムを作っているのであれば、 DeepL API や Google Cloud Translation API の方がよいです。DeepL API や Google Cloud Translation API は翻訳に特化しているだけあり、翻訳以外の返答をしません。
ただ、OpenAI APIの翻訳はプロンプトを工夫することで翻訳以外の挙動をかなり抑えることができました。

OpenAI APIを使った翻訳はマークダウン文章を翻訳させたり柔軟に翻訳を行えて非常に便利です。

yosi

Noh を作ってるエンジニア。

目次