「0.3 のほうがしっくりくる」は出発点としては悪くないのですが、本番のパラメータ決定にはやはり数値が欲しくなります。新しい翻訳機能で temperature を選ぶときに私が使っている、軽量な評価ハーネスを共有します。
考え方はシンプルです。プロダクトの代表的な原文を 20〜30 文ほど用意し、各 temperature で翻訳させて、自分が大事にしている3つの軸 — 意味の正確さ・日本語としての自然さ・固有名詞の一貫性 — でスコアをつけます。30 文あれば、傾向をつかむには十分なサンプル数になります。
import google.generativeai as genaifrom collections import defaultdictgenai.configure(api_key=os.environ["GEMINI_API_KEY"])model = genai.GenerativeModel("gemini-2.5-flash")# 「保持されるべき固有名詞」を一緒に持たせて一貫性を測定するtest_set = [ ("Apple announced a new iPhone today.", ["Apple", "iPhone"]), ("Use the Gemini API to integrate AI into your app.", ["Gemini", "API"]), # 自分のプロダクト領域に合わせて 20〜30 文追加してください]results = defaultdict(list)for temp in [0.0, 0.3, 0.5, 0.7]: for source, must_keep in test_set: translations = [] for _ in range(3): # 3回サンプリングしてブレを測定 r = model.generate_content( f"次の英文を日本語に翻訳してください: {source}", generation_config=genai.types.GenerationConfig(temperature=temp), ) translations.append(r.text) unique = len(set(translations)) kept = all(token in t for t in translations for token in must_keep) results[temp].append((unique, kept))for temp, rows in results.items(): drift = sum(u for u, _ in rows) / len(rows) consistency = sum(1 for _, k in rows if k) / len(rows) print(f"temp={temp}: 平均ブレ={drift:.2f}, 固有名詞保持率={consistency:.0%}")
import google.generativeai as genaimodel = genai.GenerativeModel("gemini-2.5-flash")def back_translate_gate(source_en, translated_ja, must_keep): # 1) 用語集違反のチェック(モデル不要・確実・速い一次フィルタ) missing = [w for w in must_keep if w not in translated_ja] if missing: return ("FAIL", f"用語が欠落: {missing}") # 2) 逆翻訳して意味のズレを確認する back = model.generate_content( f"次の日本語を英語に訳し戻してください(説明は不要):\n{translated_ja}", generation_config=genai.types.GenerationConfig(temperature=0.0), ).text verdict = model.generate_content( "次の2つの英文が同じ意味かを yes/no だけで答えてください。\n" f"A: {source_en}\nB: {back}", generation_config=genai.types.GenerationConfig(temperature=0.0), ).text.strip().lower() return ("PASS", back) if verdict.startswith("yes") else ("FAIL", f"意味のズレ: {back}")
用語集違反はモデルを使わず文字列の有無だけで判定し、確実で速い一次フィルタにしています。意味のズレの確認だけ、逆翻訳と yes/no 判定にモデルを1回ずつ使います。ゲート自体の判定がぶれないよう、検証側の temperature は 0.0 で固定しておきます。
App Store と Google Play に出しているアプリのストア説明文や課金まわりのヘルプ文を多言語化する際、このゲートで「固有名詞まで訳し込まれてしまった訳」を本番前に何度も止められました。手元の運用では、ゲートに引っかかるのは全体の数パーセント程度ですが、その数パーセントがちょうどレビューでの指摘や問い合わせにつながる箇所だったので、費用対効果は高いと感じています。
temperature チューニングは翻訳品質を底上げする入口ですが、本番運用ではバッチ処理・用語集管理・品質チェック・コスト最適化まで一貫した設計が求められます。基礎から積み上げたい方には、Gemini API で多言語翻訳・ローカライゼーションを自動化する実践ガイド が体系的にまとまっていて参考になります。