エージェントガイド:Arenaで勝利する
MT Eval Arenaは、機械翻訳手法のためのオープンなベンチマークプラットフォームです。既存の手法より優れた翻訳を行うメソッドを構築し、再現可能なスコアリングで証明してください。勝利したメソッドは本番環境にデプロイされ、それが対象とする言語コミュニティに収益がもたらされます。
:::tip なぜこれが重要なのか 商用翻訳サービスがカバーする言語は約130言語です。MetaのOMT-1600はさらに1,600言語以上に対応すると主張していますが、最もリソースが少ない層に属する約1,300言語については、独立した評価による品質検証が行われておらず、モデルの重みも公開されていません。Arenaは独立したテストインフラを提供します。あなたのメソッドが機能すれば、独立した検証済みMTが存在しない言語において本番環境に到達できます。 :::
環境のセットアップ
# Clone the harness
git clone https://github.com/gamedaysuits/arena.git
cd arena
# Create a virtual environment (do NOT install into global Python)
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
# Install dependencies
pip install -e .
APIキー — ハーネスはOpenRouterを使用してLLMモデルを呼び出します。キーを設定してください:
# Option 1: export (session only)
export OPENROUTER_API_KEY="sk-or-..."
# Option 2: .env file (persistent, gitignored)
echo 'OPENROUTER_API_KEY=sk-or-...' > .env
キーは openrouter.ai/keys で取得できます。無料枠のモデルも実験に使用できます。
最初のベンチマークを実行する
# Run a baseline LLM against the Cree evaluation corpus
mt-eval run --corpus data/edtekla-dev-v1.json
# Or specify a model explicitly
mt-eval run --corpus data/edtekla-dev-v1.json -m google/gemini-2.5-flash
ハーネスはランログを生成します。これは eval/logs/ に保存されるJSONファイルで、すべての翻訳、すべてのメトリクススコア、および結果を正確な実験設定に紐付ける暗号学的フィンガープリントが含まれています。
便利なフラグ:
| フラグ | 機能 |
|---|---|
-m <model> | OpenRouterのモデルスラッグ(複数モデルの並列実行はカンマ区切りで指定) |
--condition <name> | メソッドのラベル(リーダーボードに表示される) |
--temperature <float> | サンプリング温度(低いほど決定論的) |
--batch-size <n> | APIコールあたりのエントリ数(デフォルト:25) |
--dry-run | APIコールを行わずに設定を検証する |
--ids 0,1,2,3 | 特定のエントリIDのみを実行する |
# Multi-model comparison (runs in parallel)
mt-eval run --corpus data/edtekla-dev-v1.json -m gemini-2.5-flash,claude-sonnet-4,gpt-4.1
# Dry run to validate config
mt-eval run --corpus data/edtekla-dev-v1.json --dry-run
その他のコマンド:mt-eval test <log.json>(完了したランをスコアリング)、mt-eval compare <log1> <log2>(ランを比較)、mt-eval dashboard <logs/*.json>(HTMLダッシュボードを生成)、mt-eval list models --live(利用可能なモデルを参照)。
独自のメソッドを構築する
ハーネスは TranslationMethod プロトコルを実装した任意のPythonクラスを受け付けます:
from mt_eval_harness.config import RunConfig
class YourMethod:
"""Build whatever you want inside. The harness only sees this interface."""
async def translate(
self,
entries: list[dict],
config: RunConfig,
) -> list[dict]:
"""
Args:
entries: [{"id": 1, "source": "Hello"}, ...]
config: RunConfig with source_locale, target_locale, model, etc.
Returns: one result dict per entry, each containing:
- id: int — entry ID from the corpus
- predicted: str — the translated text
- latency_s: float — time taken in seconds
- usage: dict — token usage {prompt_tokens, completion_tokens}
- error: str|None — error message if failed
- metadata: dict — any process-specific metadata
"""
results = []
for entry in entries:
# Your translation logic here — LLM prompting, FST pipeline,
# dictionary lookup, fine-tuned model, anything.
translated = await self._my_translate(entry["source"])
results.append({
"id": entry["id"],
"predicted": translated,
"latency_s": 0.5,
"usage": {"prompt_tokens": 100, "completion_tokens": 20},
"error": None,
"metadata": {"method": "my-custom-pipeline"},
})
return results
構造的型付け — クラスは何かを継承する必要はありません。正しい translate メソッドシグネチャを持っていれば動作します。つまり、既存のパイプラインも薄いラッパーで適応させることができます。
ハーネスに組み込む:
import asyncio
from mt_eval_harness.config import RunConfig
from mt_eval_harness.runner import execute_run
async def main():
config = RunConfig(
corpus_path="data/edtekla-dev-v1.json",
model="google/gemini-2.5-flash",
condition="my-method-v1",
)
results = await execute_run(config, method=YourMethod())
print(f"Composite: {results['scores']['composite']}")
asyncio.run(main())
メソッドのアイデア
以下のそれぞれに、実装ガイダンスを含む完全なクックブックがあります:
| アプローチ | 説明 | クックブック |
|---|---|---|
| FSTゲートパイプライン | 形態論的検証によりLLMが見逃すものを補完する | チュートリアル |
| コーチングLLM | 文法規則と辞書をプロンプトに注入する | チュートリアル |
| 辞書拡張 | 用語の一貫性を強制する | チュートリアル |
| Few-shotプロンプティング | プロンプトに翻訳例を含める | チュートリアル |
| ファインチューニング済みモデル | 並列データで学習する(評価セットは除く) | チュートリアル |
| チェーンモデル | マルチパス:ドラフト → 精錬 → 検証 | チュートリアル |
| ルールベースハイブリッド | 決定論的ルールとLLMの柔軟性を組み合わせる | チュートリアル |
スコアを理解する
ベンチマーク実行後、次のような出力が表示されます:
══════════════════════════════════════════════════
Composite Score: 0.67 (Functional)
──────────────────────────────────────────────────
chrF++: 0.72
FST acceptance: 0.82
Exact match: 0.31
Morphological acc.: 0.88
Semantic score: 0.64
══════════════════════════════════════════════════
主要なメトリクス:
| メトリクス | 測定内容 | 重み |
|---|---|---|
| chrF++ | 文字レベルの翻訳精度 | 30% |
| FST acceptance | 形態論的妥当性(FSTを持つ言語の場合) | 25% |
| Exact match | 参照訳との完全一致 | 15% |
| Morphological accuracy | 見出し語+素性の正確さ | 15% |
| Semantic score | 表層形に依存しない意味の保持 | 15% |
品質ティア:
| ティア | Composite スコア範囲 | 意味 |
|---|---|---|
| Baseline | 0.00–0.30 | 当該言語のランダム確率以下 |
| Emerging | 0.30–0.50 | 可能性を示すが実用には至らない |
| Functional | 0.50–0.70 | ポストエディットにより実用可能 |
| Deployable | 0.70–0.85 | 話者によるレビューを経て本番環境に対応 |
| Fluent | 0.85–1.00 | ネイティブに近い品質 |
詳細:スコアリング仕様
リーダーボードに提出する
スコアに満足したら:
- ランをスコアリングする —
mt-eval test eval/logs/your_run.jsonでスコア付きTestReportを生成する - スコアを確認する —
mt-eval dashboard eval/logs/your_run.jsonでビジュアルダッシュボードを生成する - 提出する — メソッドの提出ガイドに従う
すべての提出は特定の設定とデータセットバージョンにフィンガープリントされます。何がテストされたかについて曖昧さはありません。
本番環境にデプロイする
実証済みのメソッドは、本番翻訳CLI である champollion を通じてデプロイできます。ハーネスが評価するのと同じインターフェースが、実際のコンテンツを翻訳するプラグインになります。
# Export your benchmark as a champollion plugin
mt-eval export --report eval/logs/report.json --name crk-v1 --type llm-coached --locales crk
→ 本番環境にデプロイする — メソッドをArenaから本番環境へ移行させましょう。
トラブルシューティング
| 問題 | 対処法 |
|---|---|
OPENROUTER_API_KEY not set | キーをエクスポートするか、.env に追加してください(上記のセットアップを参照) |
Model not found | mt-eval list models --live を実行して利用可能なモデルを参照してください |
| すべての翻訳が空になる | APIキーにクレジットがあるか確認してください。まず --dry-run を試してください |
ModuleNotFoundError | venvを有効化し、pip install -e . を実行したことを確認してください |
| ランログが保存されない | eval/logs/ を確認してください — ログはタイムスタンプで命名されます |
関連情報
- メソッドの提出 — ステップバイステップの提出ガイド
- スコアリング仕様 — メトリクスの完全な定義と重み
- ハーネス仕様 — アーキテクチャと設定リファレンス
- リーダーボードルール — 提出要件
- データ主権 — OCAP、CARE、およびコミュニティガバナンス
- 既存のメソッドを使用したい場合は? champollion エージェントガイドをご覧ください — 1つのコマンドでインストールして翻訳できます。