Zum Hauptinhalt springen

Agent-Leitfaden: Die Arena gewinnen

Die MT Eval Arena ist eine offene Benchmarking-Plattform für maschinelle Übersetzungsmethoden. Entwickeln Sie eine Methode, die besser übersetzt als alles Bestehende, belegen Sie dies mit reproduzierbarer Bewertung, und die siegreiche Methode wird in Produktion überführt — wobei die Einnahmen an die Sprachgemeinschaft fließen, der sie dient.

:::tip Warum das wichtig ist Kommerzielle Übersetzungsdienste decken ~130 Sprachen ab. Metas OMT-1600 beansprucht 1.600 weitere — doch für die ~1.300 Sprachen in den niedrigsten Ressourcenstufen ist die Qualität durch keine unabhängige Evaluierung verifiziert, und die Modellgewichte sind nicht verfügbar. Die Arena stellt die unabhängige Testinfrastruktur bereit. Wenn Ihre Methode funktioniert, kann sie für Sprachen, für die keine unabhängig verifizierte MT existiert, in Produktion gelangen. :::


Einrichtung der Umgebung

# 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-Schlüssel — das Harness verwendet OpenRouter, um LLM-Modelle aufzurufen. Legen Sie Ihren Schlüssel fest:

# Option 1: export (session only)
export OPENROUTER_API_KEY="sk-or-..."

# Option 2: .env file (persistent, gitignored)
echo 'OPENROUTER_API_KEY=sk-or-...' > .env

Einen Schlüssel erhalten Sie unter openrouter.ai/keys. Modelle der kostenlosen Stufe eignen sich für Experimente.


Führen Sie Ihren ersten Benchmark aus

# 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

Das Harness erzeugt ein Lauf-Protokoll — eine JSON-Datei, die unter eval/logs/ gespeichert wird und jede Übersetzung, jeden Metrikwert sowie einen kryptografischen Fingerabdruck enthält, der die Ergebnisse mit der exakten Experimentkonfiguration verknüpft.

Nützliche Flags:

FlagFunktion
-m <model>OpenRouter-Modell-Slug (kommagetrennt für parallele Läufe mit mehreren Modellen)
--condition <name>Bezeichnung für Ihre Methode (erscheint im Leaderboard)
--temperature <float>Sampling-Temperatur (niedriger = deterministischer)
--batch-size <n>Einträge pro API-Aufruf (Standard: 25)
--dry-runKonfiguration validieren, ohne API-Aufrufe durchzuführen
--ids 0,1,2,3Nur bestimmte Eintrags-IDs ausführen
# 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

Weitere Befehle: mt-eval test <log.json> (einen abgeschlossenen Lauf bewerten), mt-eval compare <log1> <log2> (Läufe vergleichen), mt-eval dashboard <logs/*.json> (HTML-Dashboard erzeugen), mt-eval list models --live (verfügbare Modelle durchsuchen).


Entwickeln Sie Ihre eigene Methode

Das Harness akzeptiert jede Python-Klasse, die das Protokoll TranslationMethod implementiert:

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

Strukturelle Typisierung — Ihre Klasse muss von nichts erben. Wenn sie die korrekte Signatur der Methode translate besitzt, funktioniert sie. Das bedeutet, dass bestehende Pipelines mit einem schlanken Wrapper angepasst werden können.

Binden Sie sie in das Harness ein:

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())

Methodenideen

Zu jeder dieser Ideen gibt es ein vollständiges Cookbook mit Implementierungsanleitung:

AnsatzBeschreibungCookbook
FST-gesteuerte PipelineMorphologische Validierung erfasst, was LLMs übersehenTutorial
Gecoachtes LLMGrammatikregeln und Wörterbücher in Prompts einbindenTutorial
Wörterbuch-gestütztTerminologische Konsistenz erzwingenTutorial
Few-shot-PromptingBeispielübersetzungen in den Prompt aufnehmenTutorial
Feinabgestimmtes ModellAuf Paralleldaten trainieren (nur nicht auf dem Eval-Set)Tutorial
Verkettete ModelleMehrstufig: Entwurf → Verfeinerung → ValidierungTutorial
Regelbasierter HybridDeterministische Regeln mit LLM-Flexibilität kombinierenTutorial

Ihre Bewertungen verstehen

Nach einem Benchmark-Lauf sehen Sie eine Ausgabe wie diese:

══════════════════════════════════════════════════
Composite Score: 0.67 (Functional)
──────────────────────────────────────────────────
chrF++: 0.72
FST acceptance: 0.82
Exact match: 0.31
Morphological acc.: 0.88
Semantic score: 0.64
══════════════════════════════════════════════════

Zentrale Metriken:

MetrikWas sie misstGewichtung
chrF++Übersetzungsgenauigkeit auf Zeichenebene30 %
FST acceptanceMorphologische Validität (für Sprachen mit FSTs)25 %
Exact matchPerfekte String-Übereinstimmungen mit der Referenz15 %
Morphologische GenauigkeitKorrektheit von Lemma + Merkmalen15 %
Semantischer WertBedeutungserhalt unabhängig von der Oberflächenform15 %

Qualitätsstufen:

StufeComposite-BereichBedeutung
Baseline0,00–0,30Unter dem Zufallsniveau für die Sprache
Emerging0,30–0,50Vielversprechend, aber nicht nutzbar
Functional0,50–0,70Mit Nachbearbeitung nutzbar
Deployable0,70–0,85Produktionsreif mit Sprecherprüfung
Fluent0,85–1,00Nahezu muttersprachliche Qualität

Vollständige Details: Bewertungsspezifikation


Im Leaderboard einreichen

Wenn Sie mit Ihrer Bewertung zufrieden sind:

  1. Bewerten Sie Ihren Laufmt-eval test eval/logs/your_run.json erzeugt einen bewerteten TestReport
  2. Prüfen Sie Ihre Bewertungenmt-eval dashboard eval/logs/your_run.json erzeugt ein visuelles Dashboard
  3. Einreichen — folgen Sie dem Leitfaden Eine Methode einreichen

Jede Einreichung wird mit einem Fingerabdruck einer bestimmten Konfiguration und Datensatzversion versehen. Keine Mehrdeutigkeit darüber, was getestet wurde.


In Produktion überführen

Bewährte Methoden können über champollion, das Produktions-Übersetzungs-CLI, in Produktion überführt werden. Dieselbe Schnittstelle, die das Harness evaluiert, wird zu einem Plugin, das reale Inhalte übersetzt.

# Export your benchmark as a champollion plugin
mt-eval export --report eval/logs/report.json --name crk-v1 --type llm-coached --locales crk

→ In Produktion überführen — bringen Sie Ihre Methode von der Arena in die Produktion.


Fehlerbehebung

ProblemLösung
OPENROUTER_API_KEY not setExportieren Sie den Schlüssel oder fügen Sie ihn in .env ein (siehe Einrichtung oben)
Model not foundFühren Sie mt-eval list models --live aus, um verfügbare Modelle zu durchsuchen
Alle Übersetzungen sind leerPrüfen Sie, ob Ihr API-Schlüssel über Guthaben verfügt. Versuchen Sie zunächst --dry-run
ModuleNotFoundErrorStellen Sie sicher, dass Sie die venv aktiviert und pip install -e . ausgeführt haben
Lauf-Protokoll nicht gespeichertPrüfen Sie eval/logs/ — Protokolle werden nach Zeitstempel benannt

Siehe auch