Lumaktaw sa pangunahing nilalaman

Gabay ng Agent: Pagwawagi sa Arena

Ang MT Eval Arena ay isang bukás na platformang benchmarking para sa mga pamamaraan ng machine translation. Bumuo po kayo ng pamamaraang nagsasalin nang mas mahusay kaysa sa mga kasalukuyan, patunayan ito gamit ang reproducible scoring, at ang nanalong pamamaraan ay ide-deploy sa production — na may revenue na dadaloy sa language community na pinaglilingkuran nito.

:::tip Bakit mahalaga ito Saklaw ng mga komersyal na serbisyo sa pagsasalin ang ~130 wika. Inaangkin ng Meta's OMT-1600 ang 1,600 pa — ngunit para sa ~1,300 sa kanilang pinakamababang resource tiers, hindi pa nabeberipika ang kalidad sa pamamagitan ng independiyenteng ebalwasyon at hindi available ang model weights. Ibinibigay ng Arena ang independiyenteng imprastraktura sa pagsubok. Kung gumagana ang inyong pamamaraan, maaari itong umabot sa production para sa mga wikang walang umiiral na independiyenteng nabeberipikang MT. :::


Pag-set Up ng Environment

# 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 key — ginagamit ng harness ang OpenRouter upang tumawag ng mga LLM model. Itakda po ang inyong key:

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

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

Kumuha ng key sa openrouter.ai/keys. Gumagana ang mga free-tier model para sa eksperimento.


Patakbuhin ang Inyong Unang Benchmark

# 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

Gumagawa ang harness ng run log — isang JSON file na sine-save sa eval/logs/ na naglalaman ng bawat salin, bawat metric score, at isang cryptographic fingerprint na nag-uugnay ng mga resulta sa eksaktong configuration ng eksperimento.

Mga kapaki-pakinabang na flag:

FlagGinagawa nito
-m <model>OpenRouter model slug (paghiwalayin gamit ang kuwit para sa multi-model parallel runs)
--condition <name>Label para sa inyong pamamaraan (lumalabas sa leaderboard)
--temperature <float>Sampling temperature (mas mababa = mas deterministic)
--batch-size <n>Mga entry kada API call (default: 25)
--dry-runI-validate ang config nang hindi gumagawa ng API calls
--ids 0,1,2,3Patakbuhin lamang ang mga partikular na entry 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

Iba pang command: mt-eval test <log.json> (i-score ang nakumpletong run), mt-eval compare <log1> <log2> (ikumpara ang mga run), mt-eval dashboard <logs/*.json> (bumuo ng HTML dashboard), mt-eval list models --live (mag-browse ng mga available na model).


Bumuo ng Sarili Ninyong Pamamaraan

Tumatanggap ang harness ng anumang Python class na nag-iimplement ng TranslationMethod protocol:

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

Structural typing — hindi kailangang mag-inherit ang inyong class mula sa anumang bagay. Kung mayroon itong tamang translate method signature, gagana ito. Ibig sabihin, maaaring i-adapt ang mga umiiral na pipeline gamit ang isang manipis na wrapper.

Ikonekta ito sa harness:

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

Mga Ideya sa Pamamaraan

Bawat isa sa mga ito ay may kumpletong cookbook na may gabay sa implementasyon:

PamamaraanPaglalarawanCookbook
FST-gated pipelineNahuhuli ng morphological validation ang hindi napapansin ng LLMsTutorial
Coached LLMMag-inject ng grammar rules at dictionaries sa mga promptTutorial
Dictionary-augmentedIpilit ang pagkakapare-pareho ng terminologyTutorial
Few-shot promptingIsama ang mga halimbawang salin sa promptTutorial
Fine-tuned modelSanayin gamit ang parallel data (huwag lamang sa eval set)Tutorial
Chained modelsMulti-pass: draft → refine → validateTutorial
Rule-based hybridPagsamahin ang deterministic rules sa flexibility ng LLMTutorial

Pag-unawa sa Inyong mga Score

Pagkatapos ng benchmark run, makakakita po kayo ng output na gaya nito:

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

Mahahalagang metric:

MetricSinusukat nitoTimbang
chrF++Katumpakan ng pagsasalin sa antas ng character30%
FST acceptanceMorphological validity (para sa mga wikang may FSTs)25%
Exact matchPerpektong string matches laban sa reference15%
Morphological accuracyKatumpakan ng lemma + feature15%
Semantic scorePagpapanatili ng kahulugan anuman ang surface form15%

Mga antas ng kalidad:

AntasSaklaw ng composite scoreKahulugan nito
Baseline0.00–0.30Mas mababa sa random chance para sa wika
Emerging0.30–0.50Nagpapakita ng potensyal ngunit hindi pa magagamit
Functional0.50–0.70Magagamit nang may post-editing
Deployable0.70–0.85Handa para sa production na may pagsusuri ng speaker
Fluent0.85–1.00Malapit sa native na kalidad

Buong detalye: Scoring Specification


Magsumite sa Leaderboard

Kapag kuntento na po kayo sa inyong score:

  1. I-score ang inyong run — gumagawa ang mt-eval test eval/logs/your_run.json ng scored TestReport
  2. Suriin ang inyong mga score — bumubuo ang mt-eval dashboard eval/logs/your_run.json ng visual dashboard
  3. Magsumite — sundin ang gabay na Magsumite ng Pamamaraan

Bawat submission ay may fingerprint na tumutukoy sa isang partikular na configuration at bersyon ng dataset. Walang kalabuan tungkol sa kung ano ang sinubok.


I-deploy sa Production

Maaaring i-deploy ang mga napatunayang pamamaraan sa pamamagitan ng champollion, ang production translation CLI. Ang parehong interface na ine-evaluate ng harness ay nagiging plugin na nagsasalin ng tunay na content.

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

→ I-deploy sa Production — dalhin ang inyong pamamaraan mula sa Arena patungo sa production.


Troubleshooting

ProblemaPag-aayos
OPENROUTER_API_KEY not setI-export ang key o idagdag ito sa .env (tingnan ang setup sa itaas)
Model not foundPatakbuhin ang mt-eval list models --live upang mag-browse ng mga available na model
Walang laman ang lahat ng salinTingnan kung may credits ang inyong API key. Subukan muna ang --dry-run
ModuleNotFoundErrorTiyaking na-activate ninyo ang venv at pinatakbo ang pip install -e .
Hindi na-save ang run logTingnan ang eval/logs/ — pinapangalanan ang mga log ayon sa timestamp

Tingnan Din