完全匹配(Exact Match)详解

完全匹配(Exact Match,EM)是问答与结构化输出任务中最「硬」的指标之一:规范化后的模型答案与标准答案字符串完全一致才计 1,否则计 0。它简单、可复现,但对表述变体极不宽容。

段末注释:EM 在 SQuAD 等抽取式 QA 基准中为标准指标;生成式 QA 常配合 token-level F1 缓解 paraphrase 惩罚。

系列索引:微调评估指标导读


一、直观含义

对第 (i) 条样本,设规范化函数为 (\text{norm}(\cdot)):

$$
EM_i = \mathbb{1}[\text{norm}(\hat{a}_i) = \text{norm}(a_i^*)]
$$

$$
\text{EM} = \frac{1}{N}\sum_{i=1}^{N} EM_i
$$

人话:100 道题里,有多少道答案和标准答案「一字不差」(在规范化规则下)。


二、使用场景与所需数据

场景 适用性
抽取式 QA(SQuAD)
短事实问答、实体填空
多步推理最终答案 中 — 只评最终 span
长文本摘要 / 对话 — 用 ROUGE/BLEU
分类标签 可用 — 等价于严格 accuracy(需统一大小写等)

数据要求:((\text{question/context}, \text{gold answer})) 与模型 \hat{a};需事先定义 normalization pipeline


三、计算方式

3.1 常见规范化(SQuAD 风格)

1
2
3
4
5
6
7
8
9
10
11
12
13
import re
import string

def normalize_answer(s: str) -> str:
"""Lowercase, remove punctuation, remove articles, whitespace fix."""
s = s.lower()
s = re.sub(rf"[{re.escape(string.punctuation)}]", " ", s)
s = re.sub(r"\b(a|an|the)\b", " ", s)
s = " ".join(s.split())
return s

def exact_match(pred: str, gold: str) -> bool:
return normalize_answer(pred) == normalize_answer(gold)

不同 benchmark 规则不同(是否去冠词、是否 lemmatize),比较实验必须同一套 norm

3.2 Token-level F1(补充 EM)

对预测与参考答案的 token 集合 (P, G):

$$
P_{\text{tok}} = \frac{|P \cap G|}{|P|},\quad R_{\text{tok}} = \frac{|P \cap G|}{|G|},\quad F1_{\text{tok}} = \frac{2 P_{\text{tok}} R_{\text{tok}}}{P_{\text{tok}} + R_{\text{tok}}}
$$

EM ≤ token F1 排序意义:EM 极严;F1 给部分重叠 credit。SQuAD 报告 EM + F1 双指标。

3.3 代码(evaluate 库)

1
2
3
4
5
6
7
import evaluate

squad_metric = evaluate.load("squad")
# predictions: [{"id": "0", "prediction_text": "..."}, ...]
# references: [{"id": "0", "answers": {"text": ["..."], "answer_start": [...]}}, ...]
results = squad_metric.compute(predictions=preds, references=refs)
# results["exact_match"], results["f1"]

四、如何解读

现象 含义
EM 低、token F1 高 语义接近但措辞/冠词不同
EM 与 F1 双升 微调有效且对齐参考答案表述
EM 高但人工判错 参考答案过窄或模型「猜对格式」
生成带多余解释 norm 前需截断(如只取第一行、正则抽 \boxed{}

指令微调中,若要求「只输出一个词」,EM 等价于严格 Accuracy


五、局限性与常见误用

  1. 同义不可接受:「纽约」vs「New York」在中文 norm 下可能 EM=0。
  2. 规范化过度/不足:去冠词可能把 distinct 答案合并;不去则 EM 偏低。
  3. 多参考答案:应「任一匹配即算对」;实现遗漏会导致 EM 虚低。
  4. 生成冗余:模型输出整句需 extract span;extract 规则影响 EM。
  5. 对数值格式敏感3.0 vs 3、日期格式等需统一。
  6. 不能反映推理过程:CoT 中间步骤错、最终答案对仍 EM=1。

六、与其他指标的关系

指标 关系
Accuracy 离散单标签分类时 EM 等价于严格匹配 accuracy
BLEU / ROUGE 长文本重叠指标;EM 用于短答案
mean_token_accuracy 训练 token 级;EM 为推理后字符串级

七、实践建议

  1. QA 微调:EM + token F1 联合报告,注明 normalization 脚本链接或代码。
  2. 生成式答案先 extract(正则、JSON parse、answer: 后缀)再算 EM。
  3. 多参考答案用 any(match(pred, ref) for ref in refs)
  4. 业务允许 paraphrase 时,EM 作下界,另加 BERTScore 或人工判分。
  5. 标签集有限时 EM ≈ 严格 Accuracy,但务必单独统计 Invalid 预测率
-------------本文结束感谢您的阅读-------------