メインコンテンツへスキップ

エージェントガイド: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-runAPIコールを行わずに設定を検証する
--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 スコア範囲意味
Baseline0.00–0.30当該言語のランダム確率以下
Emerging0.30–0.50可能性を示すが実用には至らない
Functional0.50–0.70ポストエディットにより実用可能
Deployable0.70–0.85話者によるレビューを経て本番環境に対応
Fluent0.85–1.00ネイティブに近い品質

詳細:スコアリング仕様


リーダーボードに提出する

スコアに満足したら:

  1. ランをスコアリングするmt-eval test eval/logs/your_run.json でスコア付きTestReportを生成する
  2. スコアを確認するmt-eval dashboard eval/logs/your_run.json でビジュアルダッシュボードを生成する
  3. 提出するメソッドの提出ガイドに従う

すべての提出は特定の設定とデータセットバージョンにフィンガープリントされます。何がテストされたかについて曖昧さはありません。


本番環境にデプロイする

実証済みのメソッドは、本番翻訳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 foundmt-eval list models --live を実行して利用可能なモデルを参照してください
すべての翻訳が空になるAPIキーにクレジットがあるか確認してください。まず --dry-run を試してください
ModuleNotFoundErrorvenvを有効化し、pip install -e . を実行したことを確認してください
ランログが保存されないeval/logs/ を確認してください — ログはタイムスタンプで命名されます

関連情報