進化的/探索ベースの翻訳
アイデア: 複数の候補翻訳を生成し、適応度関数(chrF++、FST受理、ラウンドトリップ一貫性)でスコアリングし、上位の候補を変異させて繰り返す。翻訳における自然選択 — 最も適したものが生き残る。
:::info これはクックブックであり、完成した実装ではありません これはクックブックシリーズの中で最も実験的なアプローチです。大規模なMTでの有効性はまだ実証されていませんが、アーキテクチャは堅実であり、ハーネスは生成されたものを問題なくスコアリングします。 :::
使用すべき場面
- 優れたスコアリング関数はあるが、単一のモデルでは一貫した結果が得られない場合
- 単一の貪欲な生成よりも広く解空間を探索したい場合
- 多数の並列生成(入力ごとに数十の候補)のための計算リソースがある場合
- 新しい研究に関心がある場合 — このアプローチは低リソースMTにおいてまだ十分に探索されていません
仕組み
[Generation 0] Generate N candidates (different models, temperatures, prompts)
│
▼
[Score] Evaluate each candidate: chrF++, FST acceptance, fluency
│
▼
[Select] Keep top K performers
│
▼
[Mutate] Prompt an LLM: "improve this translation, fix these issues"
│
▼
[Generation 1] Score again. Repeat for G generations.
│
▼
[Output] Best-scoring candidate from final generation
スケルトン
async def evolutionary_translate(source, reference=None, generations=3, pop_size=8):
# Generation 0: diverse candidates
population = []
for model in ["gemini-2.5-pro", "gpt-4o", "claude-sonnet-4-6"]:
for temp in [0.3, 0.7, 1.0]:
candidate = await translate(source, model=model, temperature=temp)
population.append(candidate)
for gen in range(generations):
# Score each candidate
scored = [(c, score(c, reference)) for c in population]
scored.sort(key=lambda x: x[1], reverse=True)
# Select top K
survivors = [c for c, s in scored[:pop_size // 2]]
# Mutate: ask LLM to improve each survivor
mutants = []
for survivor in survivors:
mutant = await improve(source, survivor, feedback=scored[0])
mutants.append(mutant)
population = survivors + mutants
return max(population, key=lambda c: score(c, reference))
適応度関数の設計
適応度関数がすべてです。選択肢:
| メトリクス | 測定対象 | 自動化可能? |
|---|---|---|
| 参照訳に対するchrF++ | ゴールドとの文字レベルの類似度 | ✅ 可能 |
| FST受理率 | 形態論的妥当性 | ✅ 可能(FSTが利用可能な場合) |
| ラウンドトリップ一貫性 | 逆翻訳でソースを復元できるか? | ✅ 可能 |
| LLM-as-judge | 別のLLMが流暢さ/正確さを評価 | ✅ 可能(ただしノイズあり) |
| 辞書用語の存在 | 既知の用語が正しく出現しているか? | ✅ 可能 |
:::tip 複数のシグナルを組み合わせる メトリクスの重み付き組み合わせは、単一のメトリクスよりも堅牢な適応度関数を構成します。これはハーネス自身の複合スコアの考え方と同様です。 :::
メリットとデメリット
| ✅ 多様な解を探索できる | ❌ 計算コストが高い(N × G回のAPIコール) |
| ✅ 単一モデルでは発見できないアプローチを見つけられる | ❌ 優れた適応度関数が必要 |
| ✅ 並列化可能 | ❌ 低速 — 翻訳ごとに複数世代が必要 |
| ✅ モデル非依存 | ❌ 数世代後は収穫逓減が生じる |
組み合わせに適したアプローチ
- Chained Models — 変異ステップはチェーニングの一形態
- FST-Gated Pipeline — 適応度シグナルとしてのFST受理
- Dictionary-Augmented LLM — 適応度シグナルとしての辞書用語の存在
関連情報
- Run Card仕様 — コストとレイテンシはエントリごとに記録されます
- Eval Harness — ハーネスはプロセスではなく最終出力をスコアリングします
- 低リソース言語のサポート