你将做出什么
新模型发布时,最先流传的往往是一句“同规模最强”和一张加粗的评测表。本课教你在一小时内把一份模型技术报告拆开:它想解决什么、做了什么、怎么测的、哪里还没证明。
完成后你会得到一页读书卡:四问法的答案、评测表审读结果、数据污染风险判断、你能复用的做法,以及每条结论在原文中的位置。先用一份原创的虚构报告摘录练习,因为它的“坑”是已知的,你能核对自己有没有看出来;再把同一套流程用到一份真实报告上。
准备什么
- 一份要读的报告。真实报告常见的入口:arXiv 论文页(可以看提交历史和各版本日期)、模型发布方的技术报告页面或 PDF、模型卡(常写训练数据截止时间、许可证和评测设置)、配套代码仓库里的评测脚本。
- Python 3.12,用来运行两段标准库脚本,不联网。
- 一个笔记文件,用来写读书卡。
先定一个规矩:读书卡里的每条结论都要标出处(第几节、表几、第几页)。没有出处的判断写成“我的推测”,与报告原文分开。
第一步:别从头读到尾
技术报告往往几十页,按顺序读很容易在方法细节里耗光时间。建议的顺序是:
- 摘要和结论:记下作者声称的最强结论,原样抄一句关键数字。
- 评测主表和主要图:看结论对应的是哪个表、哪几行。
- 实验设置:示例数、是否用思维链、解码方式、基线分数从哪来。
- 方法:只读到能说清“和以前相比改了什么”为止。
- 局限与附录:作者自己承认了什么,附录里有没有消融实验和去污染说明。
带着摘要里的主张去找证据,而不是被动地接收信息。
第二步:读这份虚构摘录
下面是本课自编的报告摘录,模型、基准和数字都是虚构的:
《X-7B 技术报告》摘录(教学虚构)
摘要:我们发布 X-7B,一个面向中文数学与代码任务的 70 亿参数模型。
通过“合成解题数据 + 两阶段训练”,X-7B 在多个基准上取得同规模最佳成绩,
在数学基准 M-Bench 上比 B-8B 高出 6.1 分。
方法:第一阶段在 1.2T token 通用语料上预训练;第二阶段加入由更大模型生成的
30B token 分步解题数据。训练数据截止于 2026 年 3 月。
评测(表 2):X-7B 的结果由我们自行测得;M-Bench 与 M-Bench-New 使用 4 个示例
和思维链提示。A-7B 的 C-Code 分数和 B-8B 的 M-Bench-New 分数由我们按相同设置
测得,其余基线结果取自各自的原始报告。
局限:模型在长文本任务上表现一般,将在后续版本改进。
表 2 的内容整理如下(“来源”一列来自正文说明,原报告表格里往往不会单独列出,需要你自己补):
| 模型 | 基准 | 分数 | 示例数 | 思维链 | 来源 | 题数 |
|---|---|---|---|---|---|---|
| X-7B | M-Bench | 71.3 | 4 | 是 | 自测 | 1000 |
| A-7B | M-Bench | 63.0 | 4 | 否 | 引用原报告 | 1000 |
| B-8B | M-Bench | 65.2 | 0 | 否 | 引用原报告 | 1000 |
| X-7B | C-Code | 48.2 | 0 | 否 | 自测 | 164 |
| A-7B | C-Code | 47.6 | 0 | 否 | 自测 | 164 |
| B-8B | C-Code | 45.1 | 0 | 否 | 引用原报告 | 164 |
| X-7B | M-Bench-New | 52.0 | 4 | 是 | 自测 | 300 |
| B-8B | M-Bench-New | 51.5 | 4 | 是 | 自测 | 300 |
第三步:用四问法写答案
每一问先写你的答案,再对照下面的参考答案。
问一:解决什么问题? 参考:让 7B 规模的模型在中文数学和代码任务上更强。摘录没有说明为什么要限制在 7B(例如部署成本),这一点不要替作者补。
问二:方法是什么,关键变量是哪个? 参考:两阶段训练,第二阶段加入 30B token 由更大模型生成的分步解题数据。关键变量是合成数据。要追问的是:有没有“不加第二阶段”的对照(消融实验)?摘录里没有,所以“提升来自合成数据”目前只是作者的解释,还没有被证明。
问三:实验与评测怎么设置? 参考:X-7B 自测,M-Bench 用 4 个示例加思维链;基线分数大多引自各自的报告,B-8B 在 M-Bench 上是 0 个示例、不用思维链。题数从 164 到 1000 不等,报告没有给出多次运行的波动。摘要中“高出 6.1 分”的那一组比较,两边的设置并不相同。
问四:局限是什么? 作者写了长文本表现一般。你还应补上作者没写的:基线设置不一致;合成数据由更大模型生成,可能混入与评测题相似的题目;没有消融实验;只在作者自选的基准上测试。补充的这些要标成“我的判断”。
第四步:审读评测表
审读表格要回答两个问题:两边的条件是否一样?差距是否大于随机波动?一个 1000 题的基准,模型的真实水平不变,换一批同难度的题,分数也会上下浮动几分;题数越少,波动越大。
下面的脚本对每个基准,把 X-7B 与每个基线逐一比较,标出设置差异,并用二项分布估算差值的 95% 区间半宽。保存为 audit_table.py,运行 python audit_table.py:
import csv
import io
import math
TABLE = """model,benchmark,score,shots,cot,source,n_items
X-7B,M-Bench,71.3,4,是,自测,1000
A-7B,M-Bench,63.0,4,否,引用原报告,1000
B-8B,M-Bench,65.2,0,否,引用原报告,1000
X-7B,C-Code,48.2,0,否,自测,164
A-7B,C-Code,47.6,0,否,自测,164
B-8B,C-Code,45.1,0,否,引用原报告,164
X-7B,M-Bench-New,52.0,4,是,自测,300
B-8B,M-Bench-New,51.5,4,是,自测,300
"""
OURS = "X-7B"
SETTINGS = {"shots": "示例数", "cot": "思维链"}
def margin(p1, p2, n):
# 两个比例之差的 95% 区间半宽(不配对的粗略近似),单位:百分点
return 196 * math.sqrt((p1 * (1 - p1) + p2 * (1 - p2)) / n)
rows = list(csv.DictReader(io.StringIO(TABLE)))
for bench in dict.fromkeys(r["benchmark"] for r in rows):
group = [r for r in rows if r["benchmark"] == bench]
ours = next(r for r in group if r["model"] == OURS)
for other in (r for r in group if r["model"] != OURS):
diff = float(ours["score"]) - float(other["score"])
half = margin(float(ours["score"]) / 100, float(other["score"]) / 100, int(ours["n_items"]))
notes = [label for key, label in SETTINGS.items() if ours[key] != other[key]]
if other["source"] != "自测":
notes.append("基线分数引自他处")
verdict = "差距在噪声范围内" if abs(diff) < half else "差距超过噪声"
flag = ";不可直接比:" + "、".join(notes) if notes else ";条件可比"
print(f"{bench:<12}{OURS} 对 {other['model']}:{diff:+.1f} 分(±{half:.1f}),{verdict}{flag}")
本站实际运行输出:
M-Bench X-7B 对 A-7B:+8.3 分(±4.1),差距超过噪声;不可直接比:思维链、基线分数引自他处
M-Bench X-7B 对 B-8B:+6.1 分(±4.1),差距超过噪声;不可直接比:示例数、思维链、基线分数引自他处
C-Code X-7B 对 A-7B:+0.6 分(±10.8),差距在噪声范围内;条件可比
C-Code X-7B 对 B-8B:+3.1 分(±10.8),差距在噪声范围内;不可直接比:基线分数引自他处
M-Bench-New X-7B 对 B-8B:+0.5 分(±8.0),差距在噪声范围内;条件可比
逐行解读:
- M-Bench 上的两个领先都超过了噪声范围,但条件都不可比。X-7B 用了思维链,B-8B 连示例都没有,而且基线分数是别人在别的环境下测的。“高出 6.1 分”里有多少来自模型、多少来自提示方式,这张表回答不了。
- C-Code 上,X-7B 对 A-7B 条件可比,但只有 164 道题,两个模型分差的波动范围约 ±10.8 分,0.6 分的差距说明不了谁更强。“同规模最佳”至少在这个基准上得不到支持。
- M-Bench-New 条件可比,领先只有 0.5 分,也在噪声范围内。
这个区间是粗略估计:它假设两次评测互相独立。两个模型做的是同一批题,如果报告提供逐题结果,用配对比较会更准确,区间通常也更窄。没有逐题结果时,这个粗估足以提醒你:几十到一百多道题的基准上,一两分的差距不能当作结论。
第五步:判断数据污染风险
数据污染是指评测题(或答案)在训练时已经被模型见过。公开多年的基准题目常被转载到解题网站和论坛,网页语料里就可能包含它们。读者通常拿不到训练数据,但仍然能做三件事:
- 比较基准的公开时间与训练数据截止时间。
- 比较新旧基准上的领先幅度:旧基准领先很多、新基准几乎打平,是一个需要解释的信号。
- 抽几道题去网上原文搜索,看是否连同答案一起公开。
下面的脚本把第 1 条和第 3 条做成可以重复的检查。网页内容是虚构的,模拟你搜到的某个解题页面。保存为 contamination.py 运行:
CUTOFF = "2026-03" # 报告写明的训练数据截止月份
RELEASED = {"M-Bench": "2023-11", "C-Code": "2024-05", "M-Bench-New": "2026-06"}
for bench, month in RELEASED.items():
if month <= CUTOFF:
print(f"{bench:<12}{month} 公开,早于数据截止:题目可能已在训练语料中")
else:
print(f"{bench:<12}{month} 公开,晚于数据截止:受污染的可能较小")
def grams(text, n=8):
text = "".join(text.split())
return {text[i:i + n] for i in range(len(text) - n + 1)}
def containment(question, page, n=8):
# 题目中的 n 字片段,有多大比例原样出现在网页里
q = grams(question, n)
return len(q & grams(page, n)) / len(q) if q else 0.0
QUESTIONS = {
"M-Bench 第17题": ("一个水池有甲乙两根进水管,甲管单独注满需要6小时,"
"乙管单独注满需要9小时,两管同时打开需要几小时注满?"),
"M-Bench 第42题": "小明把一根长2.4米的绳子剪成相等的5段,每段长多少厘米?",
"M-Bench-New 第8题": "某课程第一周有120人报名,此后每周比前一周多15%,第四周约有多少人报名?",
}
PAGE = """某解题网站 2025-08 的页面(教学虚构):
例题:一个水池有甲乙两根进水管,甲管单独注满需要6小时,乙管单独注满需要9小时,两管同时打开需要几小时注满?
答案:3.6小时。
练习:把2.4米长的绳子平均剪成5段,每段多长?答案:48厘米。"""
print()
for name, question in QUESTIONS.items():
ratio = containment(question, PAGE)
level = "高度重合,按已泄漏处理" if ratio >= 0.5 else "未发现原样重合"
print(f"{name}:{ratio:.0%} 的 8 字片段出现在网页中,{level}")
本站实际运行输出:
M-Bench 2023-11 公开,早于数据截止:题目可能已在训练语料中
C-Code 2024-05 公开,早于数据截止:题目可能已在训练语料中
M-Bench-New 2026-06 公开,晚于数据截止:受污染的可能较小
M-Bench 第17题:100% 的 8 字片段出现在网页中,高度重合,按已泄漏处理
M-Bench 第42题:0% 的 8 字片段出现在网页中,未发现原样重合
M-Bench-New 第8题:0% 的 8 字片段出现在网页中,未发现原样重合
注意第 42 题:网页上其实有它的改写版(“平均剪成 5 段”),答案也在,但 8 字片段一个都没对上。原样比对只能抓到照抄,抓不到改写,所以“未发现原样重合”不等于“没有污染”。这也是为什么第 2 条信号重要:X-7B 在 2023 年公开的 M-Bench 上领先 B-8B 6.1 分,在训练截止后才公开的 M-Bench-New 上只领先 0.5 分。差距缩小可能来自污染,也可能来自两边评测设置不同,读书卡里两种解释都要写,不替作者下定论。
第六步:填一页读书卡
模板如下,复制到笔记里填写:
报告:<标题>|版本与日期:<如 arXiv v2,以页面提交记录为准>|阅读日期:<今天>
一句话主张:<作者最强的结论,含关键数字>(出处:<节/表/页>)
四问
1. 解决什么问题:
2. 方法与关键变量: 有无消融:
3. 评测设置(示例数/思维链/解码/基线来源/题数):
4. 局限——作者写的: 我补充的:
评测表审读
- 条件可比的比较:
- 条件不可比的比较:
- 在噪声范围内的差距:
污染风险:基准公开时间 vs 数据截止;新旧基准领先幅度;抽查结果
可信度:<高/中/低>,理由:
我能复用的做法:
还想验证的问题:
虚构摘录的参考填法(节选):一句话主张写“M-Bench 比 B-8B 高 6.1 分(摘要、表 2)”;不可比的比较写“M-Bench 两项:示例数、思维链不同,基线引用他处”;在噪声范围内的写“C-Code 两项、M-Bench-New”;可信度写“中偏低:主结论的比较条件不一致,缺消融,新基准优势不明显”;还想验证的问题写“统一用 4 示例加思维链重测 B-8B 后差距还剩多少”。
常见失败与修订
只读摘要,转述成“全面超越”。 修订:回到摘要里的每个数字,找到它在表中的那一行,用 audit_table.py 的方法标出条件是否可比;条件不可比的,在读书卡里改写成“在不同提示设置下高出 6.1 分”。
把引用来的基线数字和自测数字放在一起比。 不同团队的评测脚本、提示模板、答案抽取规则都可能不同。修订:在表格上补“来源”列;可比性存疑的比较,结论降一级,写“报告声称”。
把一两分的差距当成显著进步。 修订:先查题数,用区间估算看差距是否超出波动;报告给了多次运行的标准差时,以报告数据为准,并记录运行次数。
把作者写的局限当成全部局限。 作者写的局限通常是他们愿意承认的部分。修订:每份报告至少从“基线设置、数据来源、污染、未覆盖的任务”这四个方向各检查一次,没有问题也写“已检查,未发现”。
读书卡变成大段摘抄。 修订:每条结论用自己的话写,最多引用一句关键原文并标出处;报告受版权保护,读书卡用于学习和讨论,不要整段转载。
保存和使用结果
每份报告一张卡,文件名用“日期_模型名_版本”,和 audit_table.py 中整理的表格放在一起。报告更新版本(例如 arXiv 出了 v2)时,新开一张卡并注明差异,不覆盖旧卡。
在学习小组分享时,先说一句话主张,再说可信度和理由,最后说还想验证的问题。别人能顺着你的出处找到原文核对,这张卡才有价值。
自测与答案
- 摘要说“高出 6.1 分”,你首先要查什么?这组比较两边的示例数、思维链、分数来源和题数是否一致。
- 164 道题的基准上领先 3 分,能说明更强吗?不能单独说明,按本课的粗估方法,分差的波动范围约 ±10 分,需要更多题或配对比较。
- 原样比对没发现重合,能否断定没有污染?不能,改写过的题目逃得过字符片段比对。
- 作者没写消融实验时,方法部分的因果解释应该怎么记录?记为“作者的解释,未被实验证明”。
加练:找一份你感兴趣的真实模型技术报告,在一小时内完成读书卡。要求:至少审读主表的三组比较,至少抽查两道公开题,并写出一个你认为报告没有回答的问题。
来源与内容说明
AIScope 中文手册 · AIScope 编辑
本篇为本站原创学习内容,引用资料保留参考来源。
收录:2026年10月19日
适用范围:尚未标注,请结合原文与实际环境核对
人工核验:尚无核验记录