Chuyển đến nội dung chính

Hướng dẫn dành cho Agent: Chiến thắng Đấu trường

MT Eval Arena là một nền tảng đánh giá hiệu năng (benchmarking) mở dành cho các phương pháp dịch máy. Hãy xây dựng một phương pháp dịch tốt hơn những gì hiện có, chứng minh điều đó bằng kết quả chấm điểm có thể tái lập, và phương pháp chiến thắng sẽ được triển khai vào môi trường thực tế (production) — mang lại nguồn doanh thu cho chính cộng đồng ngôn ngữ mà nó phục vụ.

:::tip Vì sao điều này lại quan trọng Các dịch vụ dịch thuật thương mại hỗ trợ khoảng 130 ngôn ngữ. Dự án OMT-1600 của Meta tuyên bố hỗ trợ thêm 1.600 ngôn ngữ khác — nhưng đối với khoảng 1.300 ngôn ngữ ở nhóm tài nguyên thấp nhất, chất lượng dịch thuật vẫn chưa được xác minh bởi các đánh giá độc lập và trọng số mô hình (model weights) cũng không được công bố công khai. Đấu trường (Arena) cung cấp cơ sở hạ tầng kiểm thử độc lập này. Nếu phương pháp của bạn hiệu quả, nó có thể được đưa vào vận hành thực tế cho những ngôn ngữ chưa từng có hệ thống dịch máy (MT) nào được xác minh độc lập. :::


Thiết lập Môi trường

# 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 — harness sử dụng OpenRouter để gọi các mô hình LLM. Hãy thiết lập khóa của bạn:

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

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

Nhận khóa tại openrouter.ai/keys. Các mô hình thuộc gói miễn phí hoàn toàn phù hợp để thử nghiệm.


Chạy Thử nghiệm Đánh giá Đầu tiên

# 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

Harness tạo ra một nhật ký chạy (run log) — một tệp JSON được lưu vào eval/logs/ chứa thông tin của từng bản dịch, điểm số của từng chỉ số (metric), và một dấu vân tay mã hóa (cryptographic fingerprint) liên kết kết quả với cấu hình thử nghiệm chính xác.

Các cờ (flag) hữu ích:

CờChức năng
-m <model>Đường dẫn định danh (slug) của mô hình OpenRouter (phân tách bằng dấu phẩy nếu chạy song song nhiều mô hình)
--condition <name>Nhãn cho phương pháp của bạn (hiển thị trên bảng xếp hạng)
--temperature <float>Nhiệt độ lấy mẫu (sampling temperature) (thấp hơn = mang tính xác định cao hơn)
--batch-size <n>Số lượng mục nhập cho mỗi cuộc gọi API (mặc định: 25)
--dry-runXác thực cấu hình mà không cần thực hiện cuộc gọi API
--ids 0,1,2,3Chỉ chạy các ID mục nhập cụ thể
# 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

Các lệnh khác: mt-eval test <log.json> (chấm điểm một lượt chạy đã hoàn thành), mt-eval compare <log1> <log2> (so sánh các lượt chạy), mt-eval dashboard <logs/*.json> (tạo bảng điều khiển HTML), mt-eval list models --live (duyệt qua các mô hình hiện có).


Xây dựng Phương pháp của Riêng bạn

Harness chấp nhận bất kỳ lớp Python nào triển khai giao thức (protocol) TranslationMethod:

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

Định kiểu cấu trúc (Structural typing) — lớp của bạn không cần phải kế thừa từ bất kỳ lớp nào khác. Chỉ cần nó có đúng chữ ký phương thức (method signature) translate là sẽ hoạt động. Điều này có nghĩa là bạn có thể điều chỉnh các pipeline hiện có bằng một lớp bọc (wrapper) mỏng.

Tích hợp vào 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())

Ý tưởng cho Phương pháp

Mỗi phương pháp dưới đây đều có một tài liệu hướng dẫn (cookbook) đầy đủ kèm theo chỉ dẫn triển khai:

Tiếp cậnMô tảHướng dẫn
Pipeline kiểm soát bằng FSTXác thực hình thái học giúp phát hiện những lỗi mà LLM bỏ sótHướng dẫn
Coached LLMĐưa các quy tắc ngữ pháp và từ điển vào promptHướng dẫn
Tăng cường bằng từ điểnBắt buộc tính nhất quán của thuật ngữHướng dẫn
Few-shot promptingĐưa các bản dịch mẫu vào promptHướng dẫn
Mô hình Fine-tuneHuấn luyện trên dữ liệu song song (nhưng không dùng tập đánh giá)Hướng dẫn
Chuỗi mô hình (Chained)Quy trình nhiều bước: nháp → tinh chỉnh → xác thựcHướng dẫn
Lai ghép dựa trên quy tắcKết hợp các quy tắc xác định với tính linh hoạt của LLMHướng dẫn

Hiểu rõ Điểm số của Bạn

Sau khi chạy thử nghiệm đánh giá, bạn sẽ thấy kết quả đầu ra dạng như:

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

Các chỉ số chính:

Chỉ sốKhía cạnh đo lườngTrọng số
chrF++Độ chính xác của bản dịch ở cấp độ ký tự30%
FST acceptanceTính hợp lệ về mặt hình thái học (đối với các ngôn ngữ có FST)25%
Exact matchKhớp chuỗi hoàn hảo so với bản dịch tham chiếu15%
Morphological accuracyĐộ chính xác của từ căn (lemma) và đặc trưng15%
Semantic scoreKhả năng bảo toàn ý nghĩa không phụ thuộc vào hình thức bề mặt15%

Các phân cấp chất lượng:

Phân cấpKhoảng Composite ScoreÝ nghĩa
Baseline0.00–0.30Thấp hơn mức ngẫu nhiên đối với ngôn ngữ đó
Emerging0.30–0.50Có triển vọng nhưng chưa thể sử dụng
Functional0.50–0.70Có thể sử dụng nếu có hiệu đính (post-editing)
Deployable0.70–0.85Sẵn sàng triển khai thực tế sau khi người bản xứ kiểm duyệt
Fluent0.85–1.00Chất lượng gần như người bản xứ

Chi tiết đầy đủ: Thông số kỹ thuật chấm điểm


Gửi kết quả lên Bảng xếp hạng

Khi bạn đã hài lòng với điểm số của mình:

  1. Chấm điểm lượt chạy của bạnmt-eval test eval/logs/your_run.json sẽ tạo ra một TestReport đã được chấm điểm
  2. Xem lại điểm sốmt-eval dashboard eval/logs/your_run.json sẽ tạo ra một bảng điều khiển trực quan
  3. Gửi kết quả — làm theo hướng dẫn Gửi một Phương pháp

Mỗi lượt gửi đều được gắn dấu vân tay mã hóa tương ứng với một cấu hình và phiên bản tập dữ liệu cụ thể. Không có sự mơ hồ về những gì đã được kiểm thử.


Triển khai vào Môi trường Thực tế

Các phương pháp đã được chứng minh hiệu quả có thể được triển khai thông qua champollion, công cụ CLI dịch thuật trong môi trường thực tế. Chính giao diện mà harness đánh giá sẽ trở thành một plugin để dịch nội dung thực tế.

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

→ Triển khai vào Môi trường Thực tế — đưa phương pháp của bạn từ Đấu trường vào vận hành thực tế.


Khắc phục Sự cố

Sự cốCách khắc phục
OPENROUTER_API_KEY not setXuất (export) khóa hoặc thêm khóa vào .env (xem phần thiết lập ở trên)
Model not foundChạy lệnh mt-eval list models --live để duyệt qua các mô hình hiện có
Tất cả bản dịch đều trốngKiểm tra xem khóa API của bạn còn số dư không. Hãy thử lệnh --dry-run trước
ModuleNotFoundErrorĐảm bảo bạn đã kích hoạt môi trường ảo (venv) và chạy lệnh pip install -e .
Nhật ký chạy không được lưuKiểm tra eval/logs/ — các nhật ký được đặt tên theo mốc thời gian (timestamp)

Xem thêm