このサイトは小柳耕平が開発したソフトウェアで自動翻訳されています。正確な内容は元の 英語版 をご確認ください。

このブログが42言語に翻訳される方法

Splyncブログは42言語対応

これは、カップル、友人、家族向けの共有家計管理アプリSplyncのブログにおける23番目の記事です。ソロエンジニアでありながら、どのようにして42言語で記事を公開しているのか疑問に思うかもしれません。各記事の冒頭にある免責事項にあるように、このウェブサイトは私が独自に開発したソフトウェアで自動的に多言語に翻訳されています。はっきり言って、私は英語以外の言語で手書きすることは一切ありません。そのため、意味の正確さが重要な場合、読者には元の英語版を参照するようお願いしています。それでも、翻訳プロセスの数々の試行錯誤を経て、翻訳の質はかなり良いと考えています。この記事では、Splyncブログを多言語化するための私のソフトウェアの動作について紹介します。

PythonとOpenAI APIの連携

私は常に、SEO関連のメタデータを含めて、記事をプレーンな英語で書き始めます。その後、私のPythonスクリプトは英語のテキストをOpenAI APIに送り、プロンプトと小さな参照ファイルを添付します。OpenAIのサーバーでChatGPT-4oがリクエストを読み、例えばアラビア語版のように、翻訳された記事をJSON形式で返します。MacBookがその翻訳を受け取ると、スクリプトは即座に別のリクエストを送り、今度はベンガル語を要求します。スクリプトは42のターゲット言語を自動的に繰り返します。プロセス終了時には、コンピュータには42の翻訳済みJSONファイルがあります。別のPythonスクリプトが各翻訳をHTMLテンプレートに埋め込み、1秒以内に42のHTMLファイルを生成します。すべてのファイルはこのブログがホストされているサーバーにアップロードされ、各言語バージョンは各ディレクトリに配置されます。最後に、サーバーサイドのPythonスクリプトが記事インデックスと「次の投稿」リンクを更新し、各言語のナビゲーションが一貫していることを保証します。元の英語記事をプレーンテキストで書くと、全プロセスは通常5分以内で完了します。変更が必要な場合、サーバーサイドのPythonスクリプトを使って複数のHTMLファイルを同時に更新します。

APIとは

技術用語に不慣れな方は、そもそも私のコンピュータがどのようにOpenAIのサーバーと「話す」のか疑問に思うかもしれません。その答えはAPI(アプリケーションプログラミングインターフェース)です。APIは2つのプログラム間のメッセンジャーウィンドウのようなものと考えることができます。1つのプログラムがリクエストを送り、もう1つが応答を返します。例えば、私のPythonスクリプトが「この記事をドイツ語に翻訳してください」といったメッセージを送ります。OpenAIはそのメッセージをAPIを通じて受け取り、翻訳を準備して結果を返します。これは、レストランでの注文のように機能します。ウェイターに注文すると、キッチンが準備し、ウェイターがテーブルに持ってきます。なぜウェイターが必要なのかというと、キッチンに直接入ったりシェフに直接話したりしないからです。キッチンの仕組みを知らなくても、知る必要もありません。 APIは同じ役割を果たします。2つの異なるシステムをつなぎ、それぞれの内部言語やワークフローを理解する必要をなくします。

OpenAI APIが必要な理由

APIが何かを理解したところで、このブログにおいてそれを利用する理由を説明します。実際には、自分でChatGPTと「話す」こともできますが、42の言語を処理する必要があります。ウェイターを42回呼ぶのは面倒です(プログラムは英語から英語への翻訳をスキップしますが、それでもテキストをJSONに変換します)。OpenAI APIを使用すると、私のPythonスクリプトがすべてのリクエストを自動的に送信できるため、反復作業から解放され、他のことに集中できます。私はソロ開発者なので、時間をできるだけ効率的に使う必要があります。繰り返しが多く、明確なルールがあるタスクを見るときは、いつもそれを自動化します。その結果、通常はプロセスが何倍も速く、完全にエラーがなくなります。だからこそ、APIを通じた自動化は重要です。私のスクリプトが42の「注文」を瞬時に確実に行えるようにします。

なぜ42言語なのか

技術的にはもっと多くの言語を追加することも可能ですが、その間に皿洗いをしている間に数分かかるだけです。でも私は個人的に42という数字が好きなのです。これはダグラス・アダムスの本に出てくる「人生、宇宙、そして万物に対する究極の質問の答え」です。42という数字への愛着を超えて、非常にマイナーな言語を追加することはリスクがあります。トレーニングデータが限られている言語に対して、AI翻訳の信頼性が低下する可能性があるからです。

ChatGPT 4oの温度設定

この多言語翻訳アプローチを最初に試したとき、結果はまずまずでしたが完璧ではありませんでした。いくつかの文が誤訳されたり、過度に直訳されたり、特定の言語では微妙に誤解を招くものでした。また、特定の文化的背景で不適切または無神経に思われる表現が生成されることを心配しました。そしてもちろん、翻訳が機械的でロボットのように聞こえるのは避けたいと思いました。翻訳の質の鍵となる要素の1つは、温度設定です。これはAIの「創造性」や「厳格さ」を制御するパラメータです。高い温度はAIをより想像力豊かにしますが、同時に予測不可能にもします。低い温度は元の意味に忠実に保ちますが、時には硬く感じられることもあります。試行錯誤を繰り返して、正確さを確保しつつ、テキストが生気を失わないようにするための適切なバランスを見つけるのは大変でした。多くの実験の結果、このブログのニーズに最も適した温度=0.8が見つかりました。英語の原文に忠実でありつつ、他の言語でも自然に聞こえる柔軟性を持っています。

ChatGPT 5.xは温度をサポートしていない

ChatGPT 5や5.1のような新しいモデルは、温度設定をまったくサポートしていません。このパラメータは削除され、モデルが「創造的」になるのではなく、「推論」や「努力」といった概念に置き換わりました。つまり、ChatGPT 4oは翻訳スタイルを微調整するための物理的なダイヤルを私に与えてくれましたが、5.xファミリーは全く異なる哲学を持っています。もし最新モデルに「温度=0.8で翻訳して」と気軽に頼むと、そのような設定がまだ存在するかのように振る舞うかもしれませんが、内部的にはそのパラメータはなくなっています。モデルは単に意図を近似します。OpenAIがモデルを更新し続ける中で、私はいつか翻訳パイプラインを調整するかもしれません。今のところ、ChatGPT 4oは私の多言語翻訳の選択肢であり続けています。その理由は、複数の言語でコンテキストをよく理解するだけでなく、APIの価格もソロ開発者の私には手頃だからです。実際、4oはOpenAIの歴史の中でも最も愛されるモデルの1つとして記憶されるかもしれません。

OpenAI APIのワーカー

OpenAI APIの驚くべき点は、ブラウザでChatGPTを直接使用するのと比べて、複数のChatGPT「ワーカー」を同時に使用できることです。42の言語に翻訳リクエストを送信する際、1つずつ順番に送っているわけではありません。 APIでは、まるで大量の翻訳者を雇ったかのように、複数のリクエストを並行して処理できます。私のPythonスクリプトは、小さな生産ラインのようにワークフローを管理します。英語の記事を準備し、リクエストを送り、応答を待ち、結果をJSONファイルに処理します。一方、OpenAIのサーバーは複数のモデルインスタンスを同時に実行し、それぞれ異なる言語を並行して翻訳します。これはChatGPTのウェブサイトやアプリではできないことです。これらのインターフェースは1つのモデル、1つの会話、1つのタスクを一度に提供します。しかしAPIを使用すれば、スクリプトの許す限り、作業量を拡大できます。ソロ開発者である私にとって、これは最も賢くてエゴのないアシスタントの小さなチームを持っているような感覚です。インターネットの速度にも部分的に依存しますが、私は通常ワーカー=12に設定しています。

ブログを多言語化するためにしているのは皿洗い

私は京都大学で数学を学んでいた時、学生食堂で皿洗いをしていました。時給は約5ドルでしたが、数時間あるいは数日間の深い知的集中の後には、繰り返しの手作業が好きでした。その後、北海道のにんにく工場で働いた時も、何千もの白いにんにく球根をコンベヤーベルト上でより明るく見せるために磨くという仕事をしていました。1日8時間—完全な集中、一定のリズム。それは不思議な満足感がありました。今、そうした思い出から離れて、私は現在、知的な作業—ソフトウェアを書く、システムを設計する、これらの記事を作成する—をしています。しかし、バランスは変わりません。どうやって自分で42言語でブログ記事を公開しているのかと聞かれたら、正直な答えは:皿洗いをしながらやっているのです。