【免费下载链接】XL-DocBench
XL-DocBench 是一个面向超长文档理解的问答评测基准(Benchmark),收录了 292 份文档、1345 道由 194 位人类专家核验的题目。本文带你彻底看懂它内置的三大评测指标——Accuracy(准确率)、Token F1 与 ANLS:它们各算什么、差在哪、分数该怎么读,并附一条命令的本地打分方法。
📦 XL-DocBench 是什么?
一句话概括:它考察系统能否在数百甚至上千页的长文档中找到证据、拼齐所有支撑、用对规则,并且懂得"该说不知道"。
| 内容 | 文件 | 说明 |
|---|---|---|
| 文档元数据 | data/documents.jsonl | 292 份文档的 URL、页数、领域等信息 |
| 单文档问答 | data/qa_single_doc.jsonl | 1191 题,答案来自同一份文档 |
| 跨文档问答 | data/qa_cross_doc.jsonl | 154 题,需综合多份文档作答 |
| 逐题分数 | results/scores.jsonl | 13 个参考系统 × 1345 题的打分明细 |
| 汇总分数 | results/summary.json | 各系统的 Accuracy / Token F1 / ANLS 总分 |
每道题都带有answer.value(标准答案)、answer.format(Str / Int / Float / None 等)和verification_rule(校验规则),这正是后面三种指标分工的依据。统计口径可在 manifest.json 中查到,例如答案格式分布为:Str 838 题、Int 209 题、Float 110 题、None(不可回答)188 题。
🧮 三大指标速览
| 指标 | 核心问题 | 取值方式 | 特点 |
|---|---|---|---|
| Accuracy | "答对了吗?" | 对/错(1 或 0) | 按答案类型走不同判定规则,带"宽松"容差 |
| Token F1 | "沾边多少?" | 0~1 连续值 | 词元级精确率/召回率调和均值,部分正确也得分 |
| ANLS | "拼写上差多少?" | 0~1 连续值 | 归一化编辑距离相似度,低于 0.5 直接判 0 |
三者都由同一个打分脚本 code/evaluate.py 计算——它是纯 Python 标准库实现、完全确定性(无模型调用、无网络请求),保证任何人重跑结果一致。
🚀 一键运行评测:从 5 道题的样例开始
如果你想亲手验证,先克隆仓库(只读使用):
git clone https://gitcode.com/hf_mirrors/microsoft/XL-DocBench.git cd XL-DocBench仓库内置了 5 道例题的"标准答案 + 完美预测",一条命令即可跑通:
uv run --no-project python code/evaluate.py \ --gold-files code/examples/gold_sample.jsonl \ --predictions code/examples/predictions_sample.jsonl评测样例文件位于 code/examples/gold_sample.jsonl(5 条题目)和 code/examples/predictions_sample.jsonl(5 条完美预测)。完美预测下三项指标都会得到满分 1.0,这也是 code/quickstart.py 冒烟测试的回归断言。
对真实模型输出,则提供"每题一行"的预测文件(字段名支持prediction、model_answer、answer、response、output任意一种):
{"question_id": "adubench_single_000001", "prediction": "the biggest single risk to human health worldwide"} {"question_id": "adubench_cross_000001", "prediction": "macroprudential measures"}uv run --no-project python code/evaluate.py \ --predictions predictions.jsonl \ --output eval_report.json \ --per-question-csv per_question.csv报告除总分外,还会按domain(领域)、difficulty(难度)、reasoning_type(推理类型)、answer_format(答案格式)、evidence_source(证据来源)等维度给出分组细分,方便定位"模型到底弱在哪"。
✅ Accuracy:不只看字面,而是按答案类型"对规则"
Accuracy 是基准的"硬指标",但并非简单的字符串精确匹配。实现见 code/evaluate.py 中的accuracy_score函数。所有文本先经过统一归一化(normalize_answer,见 code/evaluate.py):
- 转小写、去除首尾空白
- 剥掉 "the answer is"、"answer:" 之类的前缀
- 删除标点等特殊字符,去掉冠词 a / an / the,合并多余空格
然后按答案格式分派不同规则:
| 答案格式 | 判定规则 | 例子 |
|---|---|---|
| Str(实体/短语) | 归一化后标准答案包含在预测中,或两者编辑距离相似度 ≥ 0.8,即算对 | 标准答案 14 个词,预测多写了几句但完整包含答案 → 1 分 |
| Int / Float / Percentage | 从文本中提取数字,相对误差 ≤ 5%即算对 | 标准答案 25,预测 "25.3" → 相对误差 1.2% → 1 分 |
| Bool | 识别 yes/no、true/false 等语义并比较 | "Of course not" 与 "no" 同判为否定 → 1 分 |
| 单选题(A–D) | 提取预测和标准答案中的选项字母并比较 | 预测 "B" 与 "选项 B 正确" → 1 分 |
| None(不可回答) | 预测须包含 "not answerable"、"cannot be determined" 等拒答短语 | 188 道 None 题专考"知道何时说不知道" |
数字提取器(code/evaluate.py)相当聪明:能解析10^3幂次、1/2分数、千分位逗号、小数点和科学计数法,所以模型即使输出 "1,250.5" 或 "2.5e2" 也不会被误杀。
💡要点:Accuracy 衡量的是"最终结论是否正确",它对措辞、包装语和数值容差都足够宽容,是排行榜上的第一顺位指标。
🎯 Token F1:没答全,也要给它应得的分数
Token F1 回答的是"答错多少分"的问题。它把预测和标准答案归一化后切分成词元集合(忽略词序、只看重合),计算精确率(预测中有多少词是对的)与召回率(标准答案有多少词被覆盖了):
F1 = 2 × Precision × Recall / (Precision + Recall)实现见 code/evaluate.py。两个关键特性:
- 词序无关:集合比较天然不关心词的排列,"macroprudential measures" 与 "measures macroprudential" 的 F1 都是满分
- 零重合直接归零:两个词元都不重合时,F1 为 0(沿用 SQuAD 的经典约定),防止"文不对题但共享虚词"的投机行为
举个例子:标准答案是 2 个词,你的预测写对了其中 1 个、另多写 1 个词,则 P = R = 0.5,F1 = 0.5——这正是"部分正确"的量化体现。
📏 ANLS:为"拼写小差"专门设计的相似度指标
ANLS(Average Normalized Levenshtein Similarity)专为应对实体名长短不一、拼写轻微偏差的场景,公式分两步(code/evaluate.py):
- 计算归一化 Levenshtein 相似度= 1 − 编辑距离 ÷ 较长串长度
- 设置0.5 阈值:相似度 ≥ 0.5 时取相似度本身作为得分,否则一律记 0
这意味着 ANLS 比 Accuracy 更能给出"细粒度分数":
| 预测 vs 标准答案 | 相似度 | ANLS 得分 |
|---|---|---|
| 完全一致 | 1.0 | 1.0 |
| 多拼了一个字母(长句) | ≈ 0.95 | ≈ 0.95 |
| 只答对一半的短答案 | 0.4 | 0(低于阈值) |
| 完全文不对题 | < 0.5 | 0 |
⚠️ ANLS 对短答案"很苛刻":短串上一个字符的差别就会大幅拉低相似度,可能直接跌破 0.5 阈值归零。这也是它和 Token F1 的分工所在——F1 看词重合,ANLS 看整体拼写接近度。
📊 一个真实例子:同一道题,三个指标三种面孔
打开 results/scores.jsonl 的第一行(题目adubench_single_000001),标准答案是"the biggest single risk to human health worldwide"。各系统得分呈现出非常典型的分层:
| 系统 | Accuracy | Token F1 | ANLS |
|---|---|---|---|
| GPT-5.4(OCR 输入) | 1.0 | 1.0 | 1.0 |
| GPT-5.2(OCR 输入) | 1.0 | 0.737 | 0.613 |
| Kimi-K2.5(OCR 输入) | 1.0 | 1.0 | 1.0 |
| Qwen3.5-4B(图片输入) | 0.0 | 0.364 | 0.0 |
解读:GPT-5.2 的答案覆盖了全部标准词(Accuracy = 1),但预测文本里还多写了不少内容,词元精确率被稀释,Token F1 掉到 0.74,整句拼写相似度 0.61;而 Qwen3.5-4B 走图片输入时词元重合不足 0.5 阈值,ANLS 归零。同一个模型换 OCR 输入后分数普遍更高(GPT-5.4:38.36 vs 26.77),说明输入模态对这个基准影响很大。
汇总视角见 results/summary.json:
| 排名 | 系统 | 输入 | Accuracy ↑ | Token F1 ↑ | ANLS ↑ |
|---|---|---|---|---|---|
| 1 | GPT-5.4 | OCR | 38.36 | 39.70 | 34.17 |
| 2 | SimpleDoc + GPT-5.4 | Agent | 36.21 | 33.62 | 24.30 |
| 3 | Kimi-K2.5 | OCR | 36.06 | 38.24 | 32.64 |
(完整榜单见仓库 README;所有分数文件均为 0~1 标度,README 中已换算成百分数。)
❓ 常见打分细节 FAQ
- 模型漏答/输出解析失败怎么办?缺失、失败或无法解析的预测,三项指标一律记 0;若只想评测"答了的题",加
--ignore-missing参数(见 code/evaluate.py)。 - 分数范围?逐题分数存为 0~1 小数(results/scores.jsonl),系统总分在 results/summary.json 中同样是 0~1 标度。
- 为什么 13 个系统可以互相比较?全部使用同一份"加固版"评测器,且 manifest.json 里记录了评测脚本的 SHA-256 指纹(
score_evaluator_sha256),任何人可用 code/evaluate.py 复现,结果完全一致。 - 如何快速验证数据集完整性?运行
uv run --no-project python code/quickstart.py,它会检查题量、文档引用、证据页元数据与分数覆盖,并跑通 5 题评测样例,全部通过后输出smoke test: PASS。
🧭 总结:三把尺子各量什么?
| 你想回答的问题 | 看哪个指标 |
|---|---|
| 结论对不对(硬考核) | Accuracy |
| 内容沾边多少(软考核) | Token F1 |
| 实体拼写/整体接近度 | ANLS |
对新手最实用的一条建议:以 Accuracy 定排名,用 Token F1 和 ANLS 看差距,再用domain / difficulty / answer_format细分报告找短板。掌握这套"三指标 + 细分"读法,你就能像基准作者一样,一眼看懂任何模型在超长文档理解上的真实水位。
【免费下载链接】XL-DocBench
相关推荐
如何读懂Typed Decisions的评测分数?Accuracy、KL散度、Brier与ECE四大校准指标完整解析
如何读懂Typed Decisions的评测分数?Accuracy、KL散度、Brier与ECE四大校准指标完整解析 Typed Decisions https
数据集模型评测人工智能LoCoMo评测指标教程:F1、EM、BERTScore如何科学评估大模型表现
LoCoMo评测指标教程:F1、EM、BERTScore如何科学评估大模型表现 LoCoMo 是一个面向大模型(LLM)的长程对话记忆评测基准(benchmar
人工智能模型评测AI 评测数据集RAGAI AgentKanagawa.nvim三大主题深度评测:wave、dragon、lotus如何选择
Kanagawa.nvim三大主题深度评测:wave、dragon、lotus如何选择 Kanagawa.nvim是一款备受开发者喜爱的NeoVim深色主题插件
开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考