MQM Machine Translation Error Annotation
Expert MQM (Multidimensional Quality Metrics) error annotation for machine translation based on Freitag, Foster, Grangier, Ratnakar, Tan, and Macherey (TACL 2021). Professional translators mark error spans in MT output with document context, assigning each error a category/sub-category from a broad-coverage MQM hierarchy (Accuracy, Fluency, Terminology, Style, Locale convention, plus Other, Source error, and Non-translation) and a severity (Major, Minor, or Neutral). This is the full-taxonomy expert protocol; it complements evaluation/esa-mt-error-spans, the lighter-weight ESA protocol (Kocmi et al., WMT 2024) in which annotators mark untyped minor/major spans plus a scalar score.
About this dataset
Freitag et al. carried out the largest MQM study to date, re-evaluating the top submissions to the WMT 2020 news translation task with professional translators instead of the crowd workers used in the official campaign. Their central argument is that any scoring of translations is implicitly based on identifying errors, so an explicit error listing — the MQM approach developed in the EU QTLaunchPad/QT21 projects — serves as a platinum standard for human evaluation.
Annotators work at the segment level with full document context, marking up to five error spans per segment (the five most severe, if more exist) and labeling each with a category from a broad-coverage hierarchy — Accuracy (Addition, Omission, Mistranslation, Untranslated text), Fluency (Punctuation, Spelling, Grammar, Register, Inconsistency, Character encoding), Terminology, Style, and Locale convention — plus special categories for Source error and Non-translation. Severities are Major, Minor, or Neutral; the paper's scoring weights Major errors 5, Minor errors 1, Minor Fluency/Punctuation 0.1, and Non-translation 25.
The resulting ratings sharply revised the official WMT 2020 ranking, showing a clear preference for human translation over MT and demonstrating that crowd-worker evaluations correlate poorly with expert MQM — and that several pretrained-embedding automatic metrics outperform human crowd workers. The corpus of MQM and pSQM annotations for over 100k segments in English-German and Chinese-English was released publicly.
The Potato config reproduces the protocol with the error_span scheme: annotators highlight spans in the displayed translation, pick a category/sub-category and severity from the paper's Table 2 hierarchy, and a running quality score is shown. Simplifications: spans cannot be placed in the source segment (affecting Source error and Omission marking), and the running score uses flat per-severity penalties rather than the paper's category-sensitive weighting.
- Released
- 2021 (TACL 9)
- Language pairs
- English-German, Chinese-English (WMT 2020)
- Segments rated
- 1,418 EnDe (130 docs); 2,000 ZhEn (155 docs)
- Systems
- 10 top WMT 2020 systems plus human references
- Ratings per segment
- 3 (professional translators)
- Released corpus
- MQM + pSQM annotations for over 100k segments
- Severity weights
- Major 5; Minor 1; Minor Fluency/Punctuation 0.1; Non-translation 25
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# MQM: Expert Error Annotation for Machine Translation
# Based on: Markus Freitag, George Foster, David Grangier, Viresh Ratnakar,
# Qijun Tan, and Wolfgang Macherey (2021), "Experts, Errors, and Context:
# A Large-Scale Study of Human Evaluation for Machine Translation."
# Transactions of the Association for Computational Linguistics, 9,
# pp. 1460-1474. DOI: 10.1162/tacl_a_00437
# Paper: https://aclanthology.org/2021.tacl-1.87/
# Dataset: https://github.com/google/wmt-mqm-human-evaluation
#
# Task: professional translators mark error spans in machine translation
# output, assigning each error a category/sub-category from the paper's
# broad-coverage MQM hierarchy (Table 2: Accuracy, Fluency, Terminology,
# Style, Locale convention, Other, Source error, Non-translation) and a
# severity (Major / Minor / Neutral). The source segment and document context
# are displayed alongside the translation. This is the full-taxonomy expert
# protocol; see evaluation/esa-mt-error-spans for the lighter-weight ESA
# protocol (Kocmi et al., WMT 2024) derived from it.
# Deliberate simplifications: spans can only be marked in the displayed
# translation, so Source error / Omission spans cannot be highlighted in the
# source segment as the guidelines permit; and the running quality score uses
# flat per-severity penalties (Major -5, Minor -1, Neutral 0) rather than the
# paper's scoring-time weighting, which discounts Minor Fluency/Punctuation
# errors to 0.1 and charges Non-translation 25 points.
#
# Annotation instructions reproduced verbatim from Table 1 (MQM annotator
# guidelines) of the paper. The severity gloss is quoted verbatim from the
# paper's Section 3 prose; the paper has no separate severity-definition
# table, so no such table is quoted here.
annotation_task_name: "MQM Machine Translation Error Annotation"
task_dir: "."
data_files:
- sample-data.json
item_properties:
id_key: "id"
text_key: "target"
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"
port: 8000
server_name: localhost
annotation_instructions: |
You will be assessing translations at the segment level, where a segment may
contain one or more sentences. Each segment is aligned with a corresponding
source segment, and both segments are displayed within their respective
documents. Annotate segments in natural order, as if you were reading the
document. You may return to revise previous segments.
Please identify all errors within each translated segment, up to a maximum
of five. If there are more than five errors, identify only the five most
severe. If it is not possible to reliably identify distinct errors because
the translation is too badly garbled or is unrelated to the source, then
mark a single *Non-translation* error that spans the entire segment.
To identify an error, highlight the relevant span of text, and select a
category/sub-category and severity level from the available options. (The
span of text may be in the source segment if the error is a source error or
an omission.) When identifying errors, please be as fine-grained as
possible. For example, if a sentence contains two words that are each
mistranslated, two separate mistranslation errors should be recorded. If a
single stretch of text contains multiple errors, you only need to indicate
the one that is most severe. If all have the same severity, choose the first
matching category listed in the error typology (eg, *Accuracy*, then
*Fluency*, then *Terminology*, etc).
Please pay particular attention to document context when annotating. If a
translation might be questionable on its own but is fine in the context of
the document, it should not be considered erroneous; conversely, if a
translation might be acceptable in some context, but not within the current
document, it should be marked as wrong.
There are two special error categories: *Source error* and *Non-translation*.
Source errors should be annotated separately, highlighting the relevant span
in the source segment. They do not count against the five-error limit for
target errors, which should be handled in the usual way, whether or not they
resulted from a source error. There can be at most one *Non-translation*
error per segment, and it should span the entire segment. No other errors
should be identified if *Non-Translation* is selected.
**Severity levels** (the paper's definition, Section 3, verbatim):
"Error severities are assigned independent of category, and consist of
Major, Minor, and Neutral levels, corresponding, respectively, to actual
translation or grammatical errors, smaller imperfections, and purely
subjective opinions about the translation."
The paper notes that many MQM schemes add a Critical severity above Major,
which the authors dropped because its definition is often context-specific.
annotation_schemes:
- annotation_type: error_span
name: mqm_errors
description: "Highlight each error span in the translation and assign an MQM category/sub-category and severity"
error_types:
- name: Accuracy
subtypes: ["Addition", "Omission", "Mistranslation", "Untranslated text"]
- name: Fluency
subtypes: ["Punctuation", "Spelling", "Grammar", "Register", "Inconsistency", "Character encoding"]
- name: Terminology
subtypes: ["Inappropriate for context", "Inconsistent use"]
- name: Style
subtypes: ["Awkward"]
- name: Locale convention
subtypes: ["Address format", "Currency format", "Date format", "Name format", "Telephone format", "Time format"]
- name: Other
- name: Source error
- name: Non-translation
severities:
- name: Major
weight: -5
- name: Minor
weight: -1
- name: Neutral
weight: 0
show_score: true
max_score: 100
html_layout: |
<div style="padding: 15px; max-width: 860px; margin: auto;">
<div style="background: #f1f5f9; border: 1px solid #cbd5e1; border-radius: 8px; padding: 6px 12px; margin-bottom: 8px; font-size: 13px; color: #475569;">
<strong>Language pair:</strong> {{lang_pair}} · <strong>System:</strong> {{system}}
</div>
<div style="background: #ecfdf5; border: 1px solid #a7f3d0; border-radius: 8px; padding: 14px; margin-bottom: 8px;">
<strong style="color: #065f46;">Source segment:</strong>
<p style="font-size: 16px; line-height: 1.7; margin: 6px 0 0 0;">{{source}}</p>
</div>
<div style="background: #eff6ff; border: 2px solid #93c5fd; border-radius: 8px; padding: 14px; margin-bottom: 8px;">
<strong style="color: #1e40af;">Translation (mark error spans below):</strong>
<p style="font-size: 16px; line-height: 1.7; margin: 6px 0 0 0;">{{target}}</p>
</div>
<div style="color: #6b7280; font-size: 14px; line-height: 1.6;">
<strong>Document context:</strong> {{context}}
</div>
</div>
allow_all_users: true
instances_per_annotator: 30
annotation_per_instance: 3
allow_skip: true
Sample Datasample-data.json
[
{
"id": "mqm_001",
"lang_pair": "Chinese - English (ZhEn)",
"system": "System A",
"source": "市政府宣布,新的地铁线路将于明年三月正式开通。",
"target": "The city government announced that the new subway line will officially opens in March next year.",
"context": "From a news article about the expansion of the city's public transport network."
},
{
"id": "mqm_002",
"lang_pair": "Chinese - English (ZhEn)",
"system": "System B",
"source": "由于台风影响,所有航班已被取消,旅客可申请全额退款。",
"target": "Due to the typhoon, all flights have been cancelled and passengers may apply for a 50% refund.",
"context": "From an airline's travel advisory issued during typhoon season."
}
]
// ... and 8 more itemsGet This Design
Clone or download from the repository
Quick start:
git clone https://github.com/davidjurgens/potato-showcase.git cd potato-showcase/evaluation/mqm-mt-error-annotation potato start config.yaml
Dataset & paper
Markus Freitag, George Foster, David Grangier, Viresh Ratnakar, Qijun Tan, and Wolfgang Macherey. 2021. Experts, Errors, and Context: A Large-Scale Study of Human Evaluation for Machine Translation. Transactions of the Association for Computational Linguistics, 9:1460-1474.
Citation (BibTeX)
@article{freitag-etal-2021-experts,
title = "Experts, Errors, and Context: A Large-Scale Study of Human Evaluation for Machine Translation",
author = "Freitag, Markus and
Foster, George and
Grangier, David and
Ratnakar, Viresh and
Tan, Qijun and
Macherey, Wolfgang",
editor = "Roark, Brian and
Nenkova, Ani",
journal = "Transactions of the Association for Computational Linguistics",
volume = "9",
year = "2021",
address = "Cambridge, MA",
publisher = "MIT Press",
url = "https://aclanthology.org/2021.tacl-1.87/",
doi = "10.1162/tacl_a_00437",
pages = "1460--1474"
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
ESA: Error Span Annotation for Machine Translation
Error span annotation for machine translation output. Annotators identify error spans in translations, classify error types (accuracy, fluency, terminology, style), and rate severity.
Do-Not-Answer: LLM Safety Refusal Dataset
Do-Not-Answer is a dataset of 939 prompts a responsible LLM should decline, organized by a risk taxonomy of 5 areas and 12 harm types. This Potato config reproduces the response refusal-evaluation task.
EA-MT - Entity-Aware Machine Translation
Entity-aware machine translation evaluation requiring annotators to identify entity spans, classify translation errors, and provide corrected translations. Based on SemEval-2025 Task 2.