Files
ely-eye/bench/ANNOTATION_SCHEMA.md
ZacharyZhang-NY 77219c930b Add third-party benchmark suite frozen at 50,789 sources / 5,308 queries
Ground truth comes only from third-party annotations (MMLongBench-Doc
evidence_page_ids, VisRAG qrels, ScreenSpot-v2 bboxes, Video-MME QA,
LongMemEval answer_session_ids, CodeSearchNet func_path+func_name) and
from document structure; no model judgement is used anywhere.

- bench/corpus/manifest.jsonl: 28 sources with url, retrieved_at, sha256,
  annotation_source, license, files[]; verified by bench.manifest_check
- bench/sets/{pdf,image,ui_screenshot,video,code,conversation}.{jsonl} plus
  corpus indexes and a manifest that freezes every file's sha256
- 2,928 answerable + 2,380 unanswerable queries over 854 holders; every
  query carries scope {holder, scenario, as_of} for transactive routing
- bench/validate_sets.py fails on missing gold, holder mismatch between
  gold and query, gold observed after as_of, and manifest digest drift
2026-10-06 12:05:43 -04:00

64 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 标注集 Schema(b-2)
评测的真相来源。所有 `bench/sets/*.jsonl` 必须满足本文件;`bench/validate_sets.py` 拒绝任何违规。
## 1. 一条标注的字段
```json
{
"query_id": "mmlongbench:PH_2016.06.08_Economy-Final.pdf:0",
"modality": "pdf | image | ui_screenshot | video | code | conversation",
"question": "原文问题,逐字保留",
"answer": "标准答案原文;不可回答时为 null",
"answer_format": "str | int | float | list | none",
"gold": [{ "source_id": "mmlongbench:PH_2016.06.08_Economy-Final.pdf", "region": { "page": 5 } }],
"scope": { "holder": "owner", "session": null, "scenario": "document-qa" },
"as_of": "2024-01-01T00:00:00+00:00",
"unanswerable": false,
"origin": { "dataset": "yubo2333/MMLongBench-Doc", "revision": "2ff6aa...", "item": "row:0", "license": "see dataset card" },
"split": "dev | test"
}
```
## 2. 硬约束
1. **gold 必须来自第三方人工标注**,不得由被测系统或本仓库生成。每个来源在 `bench/corpus_sources.py` 里登记 `annotation_source`。
2. **gold 表达为「源 + 区域」,不是 atom id**。atom id 依赖切分策略,而切分策略正是 P0 要改的东西;runner 在运行时把区域解析成当时重叠的 atom id 集合。这样换切分不用重标。
3. `unanswerable=true` 的条目 `gold` 必须为空数组,且计入误召回率。目标占比 ≥15%。
4. `as_of` 是查询发生的时间点;记忆条目的 `observed_at` 晚于 `as_of` 时不得作为 gold 命中(时间正确性指标)。
5. `scope.holder` 决定可见性;跨 holder 泄漏即判错(transactive 指标)。
6. `split` 冻结:`test` 只在最终验收用,调参期间不得读取。
7. `origin.revision` 必须能在 `bench/corpus/manifest.jsonl` 中找到对应文件,否则该条目标本失效。
## 3. 区域表达
| modality | region |
|---|---|
| pdf | `{"page": int}` 或 `{"page": int, "block": int}` |
| image | `{}`(整图) |
| ui_screenshot | `{"bbox": [x0,y0,x1,y1]}` |
| video | `{"t_start": float, "t_end": float}` |
| code | `{"path": str, "symbol": str}` 或 `{"path": str, "line": int}` |
| conversation | `{"turn": int}` |
## 4. 指标映射
| 指标 | 定义 | 门槛 |
|---|---|---|
| recall@10 | gold atom 集合进入前 10 的比例(按 gold 覆盖) | ≥0.90 |
| MRR | 首个 gold 命中排名倒数均值 | 报告 |
| nDCG@10 | 二值相关 | 报告 |
| 误召回率 | unanswerable 条目里返回了 gold 之外强证据的比例 | ≤0.10 |
| 时间正确性 | 含 `as_of` 的条目里,命中项未泄漏未来证据的比例 | ≥0.95 |
| holder 正确性 | 跨 holder 查询未泄漏他人记忆的比例 | ≥0.95 |
| 编译延迟 | 从提问到 cartridge 就绪的墙钟 p50/p95 | 报告 |
分母一律是「该模态的标注条目数」,不得用命中数。
## 5. 反自欺条款
- 禁止用被测系统自己抽取的文本当 gold(例如「OCR 出来的就是答案」)。
- 禁止把 gold 文件整文件当 gold atom:gold 必须落到区域,否则整文件切分也能满分。
- 任何指标变化必须同时报告 n 与分母。
- 报告必须引用 `bench/corpus/manifest.jsonl` 的 sha256 与 `bench/sets/*.jsonl` 的 sha256。