信息速览
自动指标与真实临床能力之间的落差,在中文语境下有一个特殊表现:考试分数可以很高,但换个说法就答不上。CMB 是在这个背景下做出来的——它把中文医疗能力拆成两条互不替代的考线,一条是多选题的知识覆盖,另一条是复杂病例的问诊推理。前者可以刷,后者不容易刷。理解这个拆分,是用好这份基准的前提。
它的公开程度在这类工作里算高的:数据直接放在 HuggingFace,许可为 Apache 2.0,题目结构、子集划分、目录层级都写清了。这带来一个好处,任何人都能复算别人报告的分数;也带来一个风险,训练集与测试集同源,稍不注意就会把自己的模型调成题库记忆器。
本页按「结构—取用—质量—用法—误读」的顺序展开,重点在几个容易踩的坑:四个子集的边界、问诊任务的评分方式、考试题的时间漂移,以及「过了执医分数线」这类表述的真实含义。
§1 它是什么:一份把中文医疗能力分层拆开的基准
1.1 一句话定义与三条边界
CMB 是一份中文医疗评测基准,主体是多选题题库,另附一小批复杂病例问诊。总规模二十八万余道题,分四个子集,覆盖六大项二十八小项,横跨医师、护理、药师、医技、专业知识、医学考研五个专业层级。
三条边界要先划清。
第一,它不是临床数据。题目来自公开考试与教学材料,不含真实患者的影像、检验、病历原始记录。少数题干含检查数值,但那是考试题干的设定,不是脱敏病历。
第二,它不是诊断系统。多选题考的是「在给定选项里选对的那个」,选项本身就限定了思考空间。真实临床里没有选项,这一步的难度差着量级。
第三,它不是能力认证。分数高只说明在题库分布上表现好,不说明能在医院里用。这一点官方在论文里也反复强调,引用时不能省。
1.2 六大项与二十八小项的结构
六大项是考试类型:医师考试、护理考试、药师考试、医技考试、专业知识考试、医学考研。
每项下再按科目细分,合计二十八小项。举例来说,医师考试下面会分临床执业医师、口腔执业医师、公共卫生执业医师、中医执业医师等;护理考试下面分执业护士、护师、主管护师。这些小项在数据结构里对应 exam_subject 字段。
这个层级设计的用意是把「医疗能力」拆成可以分别报告的维度。一个模型总分八十分,可能是各科都八十分,也可能是内科九十、外科六十。只看总分看不出后者。要看出,必须按小项分组统计。
六大项与二十八小项的关系不是平均分配。医师考试的小项最多,护理与药师的题目量相对少。因此按小项算平均分时,若不做加权,小样本的小项会被过度放大——一道题决定一个小项的平均分,方差极大。这是做分层统计时第一个要处理的问题。
1.3 四个子集的划分与用途
四个子集各有明确分工。
CMB-test 是主评测集,一万一千二百道题,每个小项四百道。这个「每项四百」的设计很关键——它保证了各小项的评测样本量一致,按小项比较时不会因样本量差异而产生偏差。
CMB-val 只有两百八十道,但带详细解析。它的用途不是评测,而是作为少样本示例与思维链示范的来源。用 val 当 few-shot 的来源是官方指定的用法,因为解析写得好,能示范推理过程。
CMB-train 二十六万余道,用于知识注入,也就是继续预训练或指令微调。这个子集占了总量的绝大部分,是「数据」意义上的主体。
CMB-Clin 七十四例,独立于多选题体系,考的是病例问诊。
四个子集的边界必须守住。最容易犯的错是拿 train 去调参后在 test 上报成绩,同时又在 val 上挑提示词——这两步都用到了评测相关信息,成绩会虚高。正确做法是 val 只用于选提示词,选定后不再动,test 只跑一次。
1.4 多选题的字段结构
一道题的结构是这样的:exam_type 记录大类,exam_class 记录等级,exam_subject 记录科目,question 是题干,option 是选项字典,answer 是正确选项字母,question_type 标注单选还是多选。
题干里常含病例摘要。一道典型题会给患者性别年龄、主诉、病程、查体、影像描述,最后问「最可能的诊断是」。这类题实际上在考「从描述到诊断」的映射,接近临床推理,但仍受选项约束。
选项数量通常是五个。少数题四个。多选题(question_type 为多项选择)的 answer 是多个字母的组合,解析时要按字符拆分,不能当整串比对。
1.5 病例问诊子集的结构
CMB-Clin 的每一条含四个部分:标题、病史描述、追问、参考答案与诊疗分析。
病史描述部分按现病史、既往史、体格检查、辅助检查分段,格式接近住院病历的书写规范。追问部分是要模型回答的问题,通常是「该患者的诊断是什么、依据是什么、下一步如何处理」这类。参考答案给出标准诊疗路径,分析部分展开思路。
与多选题最大的不同在于:这里的答案不是选项,是自由文本。这决定了评分方式必须是分级打分而非对错判定,也决定了它无法像多选题那样大规模自动评测。
1.6 与同类中文医疗基准的区别
同期有几份中文医疗评测工作,路数不同。
一份是 CMExam,源自国家医师资格考试,六万余道题,附五个维度的逐题标注(疾病分组、临床科室、医学学科、能力领域、难度等级)。它的特点是标注细,但只有多选题一条线。
另一份是 MedQA 的中文版,规模更小,主要考通用医学知识。
CMB 的差异在两处:一是规模,二十八万余道远超同侪;二是加了病例问诊这条线,把「知识」与「推理」分开考。第二点是它最值得关注的设计——单靠多选题无法区分「记住了」与「会用了」,加一条自由文本的问诊线,才能看出差距。
§2 数据构成:四个子集与两套字段
2.1 目录与加载方式
数据托管在 HuggingFace,仓库名为 FreedomIntelligence/CMB,许可 Apache 2.0。
加载有两个配置名,分别对应两套数据:
from datasets import load_dataset
exam = load_dataset("FreedomIntelligence/CMB", "exam")
clin = load_dataset("FreedomIntelligence/CMB", "clin")
exam 配置下再按 split 取 train、val、test。clin 配置只有一份,不分 split。
另可直接下载 zip 压缩包,内容一致。压缩包的好处是不依赖网络与库版本,坏处是不会自动更新——若上游修了错题,压缩包还是旧的。做可复现实验时应在论文里写明取数日期。
2.2 三个数字的口径
总量二十八万零八百三十九,这个数字由三部分相加得到:测试一万一千二百、验证两百八十、训练二十六万九千三百五十九。三者相加正好是二十八万零八百三十九。
另加七十四例问诊。所以严格说,若把问诊也算进总量,应是二十八万零九百一十三。官方表述里的二十八万零八百三十九只指多选题,不含问诊。引用时要说清是哪个口径。
这两个数字差七十四,看起来微不足道,但暴露了一个常见的引用习惯问题:把不同性质的数据加在一起报总量。多选题与自由文本问诊在评测上是两件事,加总没有意义。
2.3 每小项四百题的用意与代价
测试集每个小项四百道,这是刻意设计的配额。
配额抽样的好处是各小项可比。若按自然分布抽,内科题多、眼科题少,眼科的平均分就极不稳定。配额之后,每个小项的标准误大致相当。
代价是测试集不再反映真实的知识分布。真实临床里眼科的问题远少于内科,但测试集里两者等权。因此按小项等权平均得到的「总分」,与按真实分布加权的总分不是一回事,后者会更接近大科的表現。
做报告时应两个都给:等权平均反映「各科是否都还行」,加权平均反映「在真实病例流里大概什么水平」。只给一个都会有误导。
2.4 解析字段的可用性
验证集的两百八十道题带解析,解析长度不一,短的几句话,长的有推理链。
这些解析的实际用途有两个。一是做少样本示例,挑解析清楚的题放进提示词,能显著提升思维链效果。二是做监督微调的目标文本,训练模型不只输出答案字母,还输出推理过程。
解析的质量参差不齐。有些解析只重复题干,有些直接给结论不给理由。挑示例时要人工过一遍,不能随机抽。这一点官方没有明说,但用过的人都会有体会。
2.5 题干里的图像与公式
题库里有少量题依赖图像或公式,这些在多模态模型出现之前是噪声。
图像题的题干会写「如图所示」,但数据里没有图。公式题会出现上下标、希腊字母、特殊符号,纯文本化后可能变形。
处理方式有两种。一是过滤——检测题干里的「如图」「见图」等指代词,把这类题排除。二是保留但在报告里说明比例。前者干净,后者诚实。两种都可以,关键是别默认所有题都是纯文本可答的。
2.6 训练集与测试集的同源问题
四个子集都来自同一批公开考试与教学材料。这意味着训练集与测试集在题型、表述习惯、考点分布上高度同源。
同源的直接后果是:在 train 上微调过的模型,在 test 上的成绩会包含「记住了类似题目」的成分,不纯是能力。这个成分有多大,无法从数据本身估计,因为官方没有做去重分析。
一个可做的补救是语义去重:用句向量算 train 与 test 之间的最大相似度,把相似度超过阈值的 test 题标记出来,报告「去掉高相似题后的成绩」。这个分析不难做,但公开的评测报告里很少见。做的人少,恰恰说明这个坑还没被普遍意识到。
§3 怎么拿到:公开许可与它的实际约束
3.1 获取路径与许可
最快路径是 HuggingFace 直接加载,无需申请,无需签署协议。
许可写的是 Apache 2.0。这个许可允许商用、允许修改、允许再分发,只要保留版权声明与许可文本,并说明修改了什么。对研究者来说这个约束很轻,对企业来说意味着可以直接用它做产品评测。
但要注意,Apache 2.0 只覆盖数据集本身的版权。题目内容来自公开考试,考试题目的著作权归属在法理上不总是清晰的——中国现行的著作权法对「试题」的保护有专门规定,考试命题的独创性表达受保护,而单纯的事实性知识点不受保护。这个边界在实务上没有被充分讨论,贸然把题库打包成商业产品的训练数据,风险不为零。
保守的做法是把它当评测集用,不当训练数据用。评测属于合理使用的空间更大。
3.2 版本与更新
官方页面标注的公开时间是 2023 年 8 月 1 日。仓库在之后有过若干次更新,主要是补数据与修正错误。
引用时应写明取数日期,因为题库内容会变。一份 2023 年的测试成绩与一份 2025 年的测试成绩,如果是在不同版本的测试集上跑的,严格说不可比。官方没有维护版本号,只靠提交历史,这让「同一版本」这件事变得模糊。
3.3 上游来源的三层
题目来源可以分三层。
最基层是各类执业资格考试的真题与模拟题。这些题经过命题专家审校,表述规范,但公开流传的版本常有转录错误。中间层是医学院校的教学题库,用于课程考核,题目偏基础。最上层是研究生入学考试与职称考试题,难度更高,专业分科更细。
三层混在一起构成题库,但数据里没有标注某道题来自哪一层。exam_class 字段能部分反映(执业医师 vs 主管护师),但不是逐题的来源标记。
这个缺失影响的是难度分析。想研究「模型在基础题与高阶题上的差距」,只能靠 exam_class 做粗分层,做不到精细。
3.4 与考试真题的时间关系
医学考试的内容会随指南更新而变。十年前的正确选项,按今日指南可能已经错了。
题库跨越多年,官方没有标注每道题的命题年份。这带来一个具体风险:某些题的「正确答案」是按当年指南定的,与现行指南冲突。模型若按现行知识作答,会被判错;按旧指南作答,会被判对。
这不是假设。医学指南的更新频率在部分专科达到两三年一版,抗生素选择、肿瘤分期、血压目标值都改过多轮。题库里若含旧题,评测结果就会掺入「模型知识是否过时」这个维度——这本身是有意义的信号,但与「模型医学能力」混在一起就无法分离。
可做的补救是按考点筛:把涉及易变指南的题(抗感染、肿瘤分期、慢病目标值)单独成组,与稳定考点(解剖、病理生理、药理机制)分开报告。这个分层能揭示模型的知识新鲜度。官方没做,是明显的研究空间。
3.5 加载与预处理的两个细节
第一个细节,选项字典的键顺序。JSON 解析后字典的键顺序不保证与原题一致,若按顺序取第一个选项当 A,会错位。必须按键名字母取值。
第二个细节,多选题的答案字段。单选是单个字母,多选是多个字母连写(如 ABD),也可能是分隔符连接的写法。解析时先判 question_type,再按对应规则拆分,不要统一按字符切——若答案是「AB」而选项本来只有 A、B 两个,按字符切是对的;但若答案写作「A,B」,按字符切就会切出逗号。
预处理还应做一件事:把题干里的「如图」「见下表」等指代词提出来,标记为可能缺素材的题。这批题在下游要么排除,要么单独报告,不要混在总分里。
§4 评测方式与它的局限
4.1 多选题的三种提示方式
多选题的评测有三种常见提示设置。
零样本直接问:给题干与选项,让模型输出字母。这种方式最简单,也最容易受输出格式影响——模型可能输出「答案是 D」「D. 化脓性阑尾炎」「选 D」,需要写鲁棒的正则抽取。
少样本:从验证集挑几道同类题放进提示词,示范格式。这一步对格式合规率提升明显,对准确率提升有限。
思维链:要求模型先给推理再给答案。这个设置在有解析示范时效果最好,因为解析本身示范了推理的粒度。
三种设置的分数不可直接比较。同一模型零样本可能七十,思维链可能七十五,但思维链输出的 token 数多十倍,成本完全不同。做对比实验时必须把设置与成本一起报。
4.2 选项顺序偏置
这是多选题评测里最容易被忽略的系统性偏差。
模型对选项位置有偏好,常见的是偏向 A 或偏向 C。若测试集的正确答案在五个位置上分布不均,模型的分数就会虚高或虚低。
题库的答案分布是否均匀,取决于命题习惯。多数考试会刻意打散答案位置,但打散的程度不一。做严格评测时应当算一遍答案位置的分布,如果严重偏斜,就要做位置重排实验——把每道题的选项随机打乱后重测,看分数变化多少。
这个实验成本不高,但做的人少。多数论文直接报一个准确率就完,读者无法判断这个数里有多少来自位置偏置。
4.3 准确率的置信区间
一万一千二百道题的测试集,单题正确率的标准误约为根号下 p(1-p)/n。当 p 为 0.7 时,标准误约 0.0043,即零点四个百分点,百分之九十五置信区间宽度约一点七个百分点。
这个数意味着:两个模型分数差一个百分点,在统计上不可区分。论文里常见的「我们的模型比基线高 0.8 个百分点」这类表述,若没做显著性检验,就是噪声。
按小项看,每个小项四百题,标准误约 0.023,即两点三个百分点,置信区间宽度近九个百分点。这个宽度很大,意味着小项排名极不稳定——今天 A 模型在某科高三分,换个随机种子可能就反过来了。
做分层报告时应当附上置信区间,至少要让读者知道小项的差异是否可信。
4.4 病例问诊的评分方式
问诊任务没有标准选项,评分必须靠人工或模型。
常见的做法是分维度打分:完整性(是否覆盖关键病史)、准确性(诊断是否正确)、安全性(是否给出危险建议)、规范性(是否符合诊疗流程)。每个维度给一到五分,再由多名评审取平均。
这套做法的困难在一致性。不同评审对「完整性」的理解差异很大,一个说覆盖了主要鉴别诊断,另一个说漏了罕见病。没有统一的评分细则,分数就不可比。
官方在论文里给了评分方法,但没有公开完整的评分细则与评审间一致性数据。这意味着别人复现时只能自定标准,分数无法横向比较。这是 CMB-Clin 目前最大的使用障碍。
自定细则时,有一件事值得做:把每个维度的评分锚点写成具体句子,而不是抽象描述。比如「完整性」不要写「覆盖关键病史」,要写「是否提到三项以上与主诉相关的既往史、是否提到用药史、是否提到过敏史」这类可以逐项打勾的条目。锚点越具体,评审间分歧越小,分数的可复现性越高。这件事做起来枯燥,但它是让问诊评分从「印象分」变成「测量」的唯一办法。
4.5 七十四例的统计功效
七十四例作为评测集,样本量偏小。
若把问诊质量看作二分类(合格与否),七十四例的比例估计标准误在 p 为 0.7 时约 0.053,即五个百分点。两个模型差五个百分点以内,统计上不可区分。
因此 CMB-Clin 不适合做精细排名。它适合做定性观察——看模型在哪些病例上系统性失败,失败模式是什么。把它当排行榜用,会得出不可靠的结论。
4.6 自动评分模型的循环性
有工作尝试用大模型给问诊回答打分,替代人工。
这条路有内在困难。评判模型的医学知识若不比被评模型强,它的评分就没有权威性;若更强,那为何不直接用强模型作答。更麻烦的是,评判模型自身有偏好——偏爱长回答、偏爱结构化的分点表述、偏爱与自己风格接近的措辞。这些偏好与被评质量不总相关。
可行的用法是让评判模型做初筛,把明显不合格的挑出来,剩下的交人工。这样能省人工,但最终分数仍须以人工为准。把模型评分直接当最终成绩,在小样本上风险很大。
4.7 分数能不能横比
跨论文比较 CMB 分数,要满足四个条件:同一测试集版本、同一提示设置、同一答案抽取规则、同一答案位置分布。
四个条件里,提示设置的差异最致命。有的报零样本,有的报五样思维链,两者差十几分很常见。若不注明设置,分数就没有可比性。
答案抽取规则的差异次之。有的用严格匹配(输出必须恰好是字母),有的用宽松匹配(从输出里找字母),后者会系统性高估,因为模型胡说的句子里碰巧含正确字母的概率不为零。
看别人报的分数时,先找这四项是否写明。没写明就当参考值,不要当基准。
§5 质量与已知问题
5.1 题目质量的三个来源
题库质量取决于三个环节:命题、转录、清洗。
命题环节由考试机构把关,质量高。转录环节最容易出问题——大量题库是从纸质材料扫描人工录入的,错字、漏行、选项错位屡见不鲜。清洗环节是发布方做的,但清洗的深度不可知。
具体会遇到什么样的错?举几类常见的。选项少了一个,导致正确答案指向不存在的选项。题干里含「以上都对」「以上都不对」,但选项被打乱后这个指代失效。药物剂量里的单位错位,毫克写成克。影像描述里的左右侧颠倒。
这些错题的存在率没有公开数据。研究者可以抽样检查,但工作量不小。一个折中办法是自动检测:找题干含指代性选项、答案指向缺位选项、数值单位异常的题,标记为可疑,单独统计。
5.2 答案可信度与复核
题目自带答案,但这个答案不一定对。
原因有两类。一是转录错误,录入时把正确字母打错。二是命题本身的争议,同一道题在不同教材里有不同说法。
争议题的典型形态是多选题里「部分正确」的选项是否应被选中。有的考试严格按指南,有的按临床惯例,标准不统一。同一个考点在两本教材里的答案可能相反。
官方没有给出答案复核流程。这意味着答案的可信度只能靠抽样人工验证。做严谨评测时,建议至少抽查一两百道,估计答案错误率,并在报告里说明这个数。若错误率超过百分之二,评测结论就要打折。
5.3 题目难度没有官方分级
CMB 没有逐题难度标注。CMExam 有(按人类表现分五档),CMB 没有。
缺难度标注的后果是:无法区分「模型不会」与「题太难」。一个模型在某小项只考六十分,是因为它知识不足,还是因为这个科目的题整体偏难?没有难度参数就分不清。
一个可做的替代是事后标定:用一批模型(含强模型与弱模型)在同一测试集上跑,按通过率给每道题算一个经验难度值,再把这个难度值当协变量分析。这种方法在心理测量学里叫项目反应理论的简化版,不需要专家,只要有足够多的模型作答记录。
这个方法有个前提:模型群体的能力分布要足够宽。若只有几个同量级模型,难度标定会失真。当前开源模型的量级差异已经够大,这个方法可行。
5.4 六大项之间的难度不可比
六大项是不同考试,难度基准不同。
医师执业考试的通过率与护理考试的通过率不一样,题目难度设计也不一样。把它们放进同一个基准,按等权平均算总分,隐含了「六大项等难」的假设。
这个假设不成立。实际上医师考试的题普遍比医技考试难,专业知识考试又比二者更细。等权平均会把难项的分数拉低,让人觉得模型在那些项上更差,实际可能只是题更难。
应对办法有两个。一是分项报告,不给总分。二是用模型群体的事后难度做等化(equating),把各项分数折算到同一量尺上。后一种做法在标准化考试里是常规操作,在这类基准里少见。
5.5 病例问诊的答案单一性
CMB-Clin 每例只给一份参考答案。
真实临床的处置往往有多种合理路径。同一例腹痛,保守观察与立即手术都可能正确,取决于具体情境与医师判断。给单一答案,等于把某一种路径定为标准。
评测时的风险是:模型给出另一条合理路径,被判为错。这类误判会系统性低估模型的临床推理能力,尤其是当模型倾向于更保守或更激进的处置时。
补救办法是改评分标准:不比对具体处置,而是判断「所给路径是否在合理范围内」。这需要评审具备临床判断力,不能靠字符串匹配。官方没有明确说明是否这样做,从公开材料看倾向于单一答案比对。
5.6 训练数据里的重复题
二十六万余道训练题,难免有重复。
重复的来源有两个。同一道题在不同考试里都出现(经典考点常被反复考)。同一道题在不同年份的模拟卷里重复出现。
重复对训练的影响是加权偏移——重复多的考点被过度学习,重复少的考点学得不够。对评测的影响是若测试集里也有重复题,模型见过原题,分数虚高。
官方没有做去重。使用者可以自己做:用题干的前若干字符做哈希,或算句向量相似度,把重复簇合并。做完后训练集规模会缩小,但质量会提高。
去重这件事在实操上比说起来麻烦,值得多讲两句。最朴素的哈希去重只能抓完全相同的题干,而题库里的重复往往是「同题不同表述」——一个考点换了患者年龄、换了问法、换了选项顺序,题干字符串完全不同,但考的是同一件事。这类重复躲得过哈希。
句向量相似度能抓到一部分,但阈值怎么定是个问题。阈值定高了,漏掉大量同义重述;定低了,把同考点的不同侧面也合并掉,反而破坏覆盖。实践中的折中做法是两步:先用较高的阈值(例如 0.9 以上)合并近乎重复的,得到一批明确的重复簇;再用较低阈值(例如 0.75)做聚类,只统计类簇大小而不合并,用它来观察考点集中度。前者用于清洗,后者用于分析,两个目的分开处理。
还有一个更隐蔽的重复来源:同一道题在 train 与 test 里都有。这种跨子集重复对评测的伤害最大,因为它直接把答案泄露给模型。检测方法很直接——把 test 里每道题在 train 里找最相似的若干条,看最高相似度是否异常高。若某道题在 train 里有近乎相同的对应,就应当把这道题从评测中剔除,或至少单独统计「去掉泄露题后的分数」。这一步官方没做,使用者若在意结论的干净程度,应当自己补上。
5.7 中文特有的表述问题
中文医学考试题有一套固定的话语习惯,与真实临床话语不同。
「最可能的诊断是」——真实临床里医生不会这样问自己。「首选检查是」——真实决策要考虑可及性、费用、患者意愿,不只考虑医学最优。「下列说法正确的是」——这是考试专用句式。
模型在题库上训练,学到的是这套话语习惯。迁移到真实场景时,会出现「像考生而不像医生」的输出——答案四平八稳,按指南排序,缺少对具体情境的权衡。
这不是数据缺陷,是考试数据的固有属性。但它决定了:CMB 高分不能等同于临床可用。评估临床能力需要另一套材料,比如真实病历的问诊记录。
还有一层更细的差别值得留意,就是「权衡」在两种话语里如何呈现。考试题的正确选项总是唯一的,因此权衡过程可以被消解——只要认定某个因素权重最高,答案就唯一了。真实临床里,权衡过程本身是产出的一部分,医生要向患者解释为什么选这个而不是那个,还要承认不确定性。
模型在题库上学到的模式是「消解权衡」,即快速收敛到唯一结论并给出确定语气。这个模式在考试上得分,在临床上却是缺陷。评估时若只用准确率,看不到这个缺陷;要看到,必须读模型的完整输出,看它是否给不确定性留了位置。
这也提示了一种低成本的附加评测:统计模型在答案中表达不确定性的频率。题库上没有标准答案,但可以看模型面对本身有争议的题时是否敢于说「存在争议」。一个从不表达不确定的模型,在考试上可能得分更高,在临床上更危险。
§6 能做什么:五类用法与实现要点
6.1 用法一:知识覆盖的体检
最直接的用法是给模型做知识体检。
按二十八小项跑一遍,得到一张能力剖面图。哪个科目弱,一目了然。这张图对模型迭代有指导价值——若某科持续低分,说明训练数据里该科内容不足。
实现要点是分项报告,不要只报总分。总分掩盖结构性缺陷。同时报置信区间,避免把噪声当信号。
另一个要点是固定提示模板。同一批模型比较时,提示必须完全一致,包括少样本示例的选择与顺序。示例换一道题,分数可能差一个百分点。
6.2 用法二:思维链能力的检验
CMB-val 的解析可以用来测思维链。
做法是对同一批题跑两次:一次直接问答案,一次要求先推理。两者的差值反映「推理带来的增益」。增益大,说明模型的知识是「隐性」的,需要推理才能调出;增益小,说明知识调用是直接的,或者推理反而干扰。
这个分析在中文医疗场景下的公开结果不多。多数论文只报思维链后的绝对分数,不报增益。报增益更有信息量,因为它反映模型的推理机制是否有效。
要注意的是,思维链的增益与题目难度相关。简单题上思维链可能无益甚至有害(多余步骤引入错误),难题上增益明显。因此应按难度分层看增益,不要只看总体。
6.3 用法三:领域微调的效果评估
用 CMB-train 做继续预训练,再用 CMB-test 评估,这是最常见的用法。
实现上有几处要注意。第一,训练时要把题干与选项的格式固定下来,与评测时的格式一致。格式不一致会让模型在评测时「不适应」,分数低于实际能力。
第二,要防过拟合。二十六万道题对七 B 参数的模型来说,跑几个 epoch 就可能记住。建议一个 epoch 以内,并用验证集监控。
第三,要留出对照。微调前后在同一测试集上跑,差值才是微调的净效果。只报微调后的绝对分数,无法判断提升来自微调还是来自基座模型本身。
6.4 用法四:跨语言能力的对比
CMB 是中文的,同类的英文基准有 MedQA、MedMCQA、PubMedQA。
把同一模型在两个语言上的分数并列,能看出语言能力的不均衡。中文分数低而英文高,说明中文医学知识覆盖不足;反之说明英文语料训练不充分。
这个对比有几个陷阱。题源不同,难度不可比;题型不同,中文多单选,英文多四选一;翻译题的存在让部分题目实质相同。做对比时要说明这些差异,不要把分数直接相减。
6.5 用法五:作为中文医疗评测的方法学模板
CMB 的结构设计本身可复用。
它示范了几件事:怎么分层(六大项二十八小项)、怎么配额(每项四百题)、怎么分子集(train、val、test 各司其职)、怎么加第二条线(病例问诊)。
想做一个新的中文专科基准,可以照这个骨架:先定层级,再定配额,再划子集,最后考虑要不要加自由文本任务。这个骨架的优点是清晰,缺点是等权假设(§5.4)与难度不分级(§5.3)。
6.6 DAIMS 24 项检查
| 维度 | 项 | 判定 |
|---|---|---|
| 文档 | 数据字典 | 是(字段含义在 README 写明,含示例 JSON) |
| 文档 | 采集协议 | 部分(说明来自公开考试,未给逐题来源) |
| 文档 | 设备规格 | 不适用(纯文本) |
| 文档 | 标注规范 | 部分(考试答案自带,无独立标注流程) |
| 文档 | 版本历史 | 部分(有提交历史,无版本号) |
| 文档 | 许可说明 | 是(Apache 2.0) |
| 文档 | 引用格式 | 是(论文与仓库双引用) |
| 文档 | 局限披露 | 部分(论文有讨论,未成清单) |
| 质量 | 缺失披露 | 部分(未说明图像题、公式题占比) |
| 质量 | 信号质量说明 | 不适用 |
| 质量 | 一致性检验 | 否(无标注者一致性,题目无多标) |
| 质量 | 答案复核 | 否(未公开复核流程与错误率) |
| 质量 | 难度分级 | 否(无逐题难度) |
| 质量 | 去重说明 | 否(未做或未报告) |
| 公平 | 人群构成 | 不适用(无患者) |
| 公平 | 机构来源 | 部分(题源机构未逐题标注) |
| 公平 | 亚组表现 | 是(按小项可分) |
| 公平 | 偏倚讨论 | 部分(选项顺序偏置未讨论) |
| 可复现 | 代码可用 | 是(官方仓库含评测脚本) |
| 可复现 | 环境说明 | 是(依赖列出) |
| 可复现 | 随机种子 | 部分(少样本示例抽取未说明) |
| 可复现 | 结果可重算 | 是(数据与脚本公开) |
| 治理 | 伦理审批 | 不适用(公开考试题,无患者数据) |
| 治理 | 再分发约束 | 是(Apache 2.0 允许再分发) |
统计:是 9 项,部分 8 项,否 5 项,不适用 2 项。
五项「否」集中在质量维度,这正是这份基准最实在的短板:没有一致性检验(题目单标,无从检验)、没有答案复核公开、没有难度分级、没有去重报告。这四项缺失共同指向一个事实——它是一份「规模优先」的基准,质量控制靠上游考试机构,自身没有二次把关。
§7 常见误读与引用陷阱
7.1 误读一:把分数当临床能力
最常见的误读。
「某模型在 CMB 上超过九十分,超过执业医师及格线,因此具备执业能力」——这个推理链条断在第二环。执业医师考试不只是多选题,含技能考核、临床思维笔试、实践环节。多选题只是其中一环。
更根本的问题是多选题这种题型本身。真实诊疗中,医生要在无选项的情况下生成假设,再逐一排除。多选题把这个生成过程替换成了辨识过程,难度降低一个量级。
引用时的正确表述是「在中文医学知识的多选题辨识上达到某水平」,不是「达到执业医师水平」。这两句话差别很大,后者会被媒体放大成误导性标题。
7.2 误读二:把题库当知识库
有工作把 CMB 全量当训练语料,教模型「医学知识」。
问题在于题库的表述是考试专用的。模型学完之后,说话会带上考试腔——用「首先」「其次」「综上」组织答案,把每个问题都当考题答。在真实问诊中,这种风格很突兀。
更麻烦的是,题库里的事实密度不高。一道题平均三十来个词,其中真正承载知识的可能只有一句。二十六万道题的知识总量,远不如同样 token 量的教材或指南。
要注入医学知识,教材、指南、药品说明书的效率高于题库。题库的合适用途是评测与格式对齐,不是知识注入的主体。
7.3 误读三:以为二十八万是人工标注的
二十八万道题没有一个字是专门为这份基准写的。
它们来自既有的公开考试与教学材料,发布方做的是汇集、清洗、结构化。因此不能把规模当成「标注工作量」的证据。真正的工作量在清洗与格式统一,不在命题。
这个区分在评估数据质量时很重要。人工专门编写的题目,可以针对模型弱点设计;汇集来的题目,只能反映既有考试的覆盖。前者可控,后者不可控。
7.4 误读四:把 CMB-Clin 的分数与 CMB-Exam 的分数相加
两者量纲不同,不能相加。
CMB-Exam 是准确率,零到一之间。CMB-Clin 是人工评分,通常一到五分。有的报告把后者归一化到零到一再加权平均,得出一个「综合分」。
这个综合分没有意义,因为权重是任意的。加权的选择会直接决定排名——若问诊权重高,擅长长文本生成的模型占优;若多选题权重高,擅长记忆的模型占优。
正确做法是两条线分开报,不加总。想看整体,就画一张二维散点图,横轴多选题,纵轴问诊,看模型落在哪个象限。这比一个综合分信息量大得多。
7.5 误读五:以为公开就等于可以随便用
Apache 2.0 看起来很宽松,但有两处要注意。
第一处,题目内容的著作权。许可证覆盖的是数据集这个汇编作品的版权,不必然覆盖每道题的著作权。若要把题库用于商业产品,法务上应当做单独评估。
第二处,医学内容的合规。若基于这份数据训练出的模型对外提供医疗建议,涉及医疗器械与互联网诊疗的监管要求,与数据集许可无关。数据许可放行不等于业务合规。
7.6 引用时必须写清的五件事
版本与取数日期:题库会更新,不写日期则分数不可复现。
子集:报的是 test 还是 val,有没有用到 train 微调。
提示设置:零样本、少样本几例、是否思维链。
答案抽取规则:严格匹配还是宽松匹配。
分层结果:至少给按小项的分数,不只给总分。
§8 在生态中的位置
8.1 与其他中文医疗基准的分工
同期几份中文医疗基准各有侧重。
CMB 侧重覆盖广度与层级完整,题目最多,分科最细。CMExam 侧重标注深度,每题五个维度标注,适合做细粒度分析。另有一些专科基准(如中医、口腔、影像)在单一方向上更深。
这个分工意味着选择基准要看目的。做全面体检用 CMB,做细粒度归因用 CMExam,做专科深挖用专科基准。没有一份能替代另一份。
8.2 考试型基准的共同局限
所有基于考试题的基准都面临同一个问题:考试考什么,基准就测什么;考试不考什么,基准就测不到。
医学考试不考的东西不少。医患沟通、团队协作、资源约束下的决策、不确定情境下的处理、错误发生后的补救。这些都是临床能力的重要组成,在题库里几乎不出现。
因此考试型基准的分数上限,就是「考试能测的那部分能力」的上限。想测更多,需要另建材料——标准化病人、模拟场景、真实病历回顾。这些成本高得多,也正是这类基准迟迟没有做大的原因。
8.3 规模与质量的张力
二十八万道题是这份基准最大的卖点,也是最容易被质疑的点。
规模带来统计功效,让分项分析成为可能。规模也带来质量稀释——题目越多,错题、重复题、过时题越多,而这些都没有被系统清理。
一个反直觉的观察:小规模、高质量的基准往往比大规模基准更有区分度。因为难题比例高,模型之间的差距被放大;而大规模基准里大量简单题会把分数推到高位,区分度反而下降。
CMB 的分数分布已经出现天花板效应——强模型普遍在八十五分以上,差距被压缩到几个百分点,落在置信区间内。这个现象本身就说明,继续扩大规模不是提升评测价值的方向。
8.4 适合谁用
适合四类人。做中文医疗模型迭代、需要定期体检的团队。研究评测方法学、想分析基准缺陷的研究者。做跨语言对比、需要中文一侧参照的工作。教学场景下需要大量练习题的教育者。
不适合两类人。想验证临床决策能力的人——这份数据测不到。想找训练语料的人——题库不是好的知识源。
§9 术语与口径速查
| 术语 | 含义 |
|---|---|
| CMB-Exam | 多选题总集,含 train、val、test 三个子集 |
| CMB-test | 主评测集,一万一千二百道,每小项四百道 |
| CMB-val | 验证集,两百八十道,带解析,用于少样本与思维链示范 |
| CMB-train | 训练集,二十六万余道,用于知识注入 |
| CMB-Clin | 病例问诊集,七十四例,自由文本作答 |
| 六大项 | 医师、护理、药师、医技、专业知识、医学考研 |
| 二十八小项 | 六大项下的科目细分,对应 exam_subject 字段 |
| 零样本 | 提示中不含任何示例 |
| 少样本 | 提示中含若干示例,通常取自 val |
| 思维链 | 要求模型先输出推理再给答案 |
| 等化 | 把不同难度的分项分数折算到同一量尺的统计方法 |
三个口径要分清。
「题」指一道多选或单选题,是评测的最小单位。
「小项」指 exam_subject 的一个取值,测试集中每小项四百道。
「项」在本文中指六大项,是最高层级。这三个词层级不同,写报告时不要混用。
§10 事实清单与附录
10.1 核心事实
| 项 | 值 |
|---|---|
| 全名 | CMB: A Comprehensive Medical Benchmark in Chinese |
| 发布方 | FreedomIntelligence 团队 |
| 论文 | arXiv:2308.08833 |
| 公开时间 | 2023-08-01 |
| 许可 | Apache 2.0 |
| 托管 | HuggingFace(FreedomIntelligence/CMB) |
| 多选题总量 | 280,839 |
| 其中 CMB-test | 11,200(每小项 400) |
| 其中 CMB-val | 280(带解析) |
| 其中 CMB-train | 269,359 |
| 病例问诊 | 74 例 |
| 大项数 | 6 |
| 小项数 | 28 |
| 题型 | 单项选择 + 多项选择 |
| 选项数 | 通常 5 个,少数 4 个 |
10.2 四个子集的用途与禁忌
| 子集 | 规模 | 用途 | 禁忌 |
|---|---|---|---|
| CMB-train | 269,359 | 继续预训练、指令微调 | 不可用于评测 |
| CMB-val | 280 | 少样本示例、思维链示范、提示词选择 | 选定后不可反复调 |
| CMB-test | 11,200 | 主评测,只跑一次 | 不可用于调参 |
| CMB-Clin | 74 | 问诊能力定性观察 | 不可用于精细排名 |
10.3 六大项与字段对应
| 六大项 | exam_type 取值 | 小项示例 |
|---|---|---|
| 医师考试 | 医师考试 | 临床执业医师、口腔执业医师、公共卫生执业医师、中医执业医师 |
| 护理考试 | 护理考试 | 执业护士、护师、主管护师 |
| 药师考试 | 药师考试 | 执业药师(西药)、执业药师(中药) |
| 医技考试 | 医技考试 | 检验、影像、康复 |
| 专业知识考试 | 专业知识考试 | 按学科细分 |
| 医学考研 | 医学考研 | 西医综合、中医综合 |
10.4 附录 A:读取一道题并抽取答案的最短代码
from datasets import load_dataset
import re
ds = load_dataset("FreedomIntelligence/CMB", "exam", split="test")
item = ds[0]
stem = item["question"]
opts = item["option"] -- 字典,键为选项字母
gold = item["answer"]
qtype = item["question_type"]
-- 拼成提示,选项按键名字母排序后列出
letters = sorted(opts.keys())
body = "\n".join(f"{k}. {opts[k]}" for k in letters)
prompt = f"{stem}\n{body}\n请只回答选项字母。"
-- 从模型输出抽取答案:先找独立的字母,避免匹配到选项正文里的字母
def extract(text, valid):
hits = re.findall(r"(?<![A-Za-z])([A-Z])(?![A-Za-z])", text)
hits = [h for h in hits if h in valid]
return "".join(sorted(set(hits))) if qtype.startswith("多项") else (hits[0] if hits else "")
-- 比对时多选按集合比较,单选按字符串比较
pred = extract(model_output, set(letters))
if qtype.startswith("多项"):
ok = set(pred) == set(gold)
else:
ok = pred == gold
三处容易出错。
第一处,sorted(opts.keys()) 必须显式排序。字典序在 Python 3.7 之后保证插入顺序,但 JSON 反序列化后顺序取决于源文件,不能假定为 A、B、C 顺序。
第二处,正则里的前后断言不能省。省了会把选项正文里的英文字母(如单位 mg、缩写 CT)当成答案抽出来。
第三处,多选题比对必须按集合。按字符串比对时「ABD」与「ADB」会被判为不同,但它们是同一个答案。
10.5 附录 B:六个可立即验证的疑问
一、测试集答案在五个位置上的分布是否均匀。直接对 answer 字段做频次统计。
二、题干含「如图」「见图」的题占比多少。正则匹配统计。
三、训练集与测试集之间的高相似题有多少。用句向量算最大相似度,看超过 0.95 的比例。
四、同一考点在训练集与测试集中的重复次数分布。按题干关键实体聚类后统计。
五、各小项的等权平均分与按真实题量加权的平均分差多少。
六、思维链相对零样本的增益,按小项看是否一致。
10.6 附录 C:证据链
| 事实 | 来源 | 核对方式 |
|---|---|---|
| 规模 280,839 / 11,200 / 280 / 269,359 | 官方页面与 HuggingFace README | 两处一致 |
| 六大项二十八小项 | 官方页面 | 直接读取 |
| 七十四例问诊 | 官方页面 | 直接读取 |
| 字段结构 | HuggingFace README 示例 | 直接读取 |
| Apache 2.0 许可 | HuggingFace 仓库元数据 | 直接读取 |
| 论文编号 | 官方页面引用块 | 直接读取 |
| 每小项四百题 | 官方页面 | 直接读取 |
编辑说明
本页基于 CMB 官方页面(cmedbenchmark.llmzoo.com)、HuggingFace 仓库 README 与论文 arXiv:2308.08833 的公开摘要信息写成,取数日期 2026-10-19。
未覆盖部分:论文正文中的具体模型成绩表未逐项核实,因此本页不列任何具体模型的分数,只讨论评测方法与口径。数据文件未下载复核,规模数字与字段结构均引自官方公开材料。§10.5 列出的六个疑问需要下载数据后自行验证。
凡属分析性判断的段落(§4.2 选项顺序偏置、§5.3 事后难度标定、§5.4 分项等化、§7.1 与临床能力的差距、§8.3 天花板效应)均为基于公开材料的方法学讨论,非官方结论。引用时请注明是二次解读。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- cmedqa2 — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- ahd-arabic-health — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- medval-bench — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- medcalc-bench — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- qizheng-gpt — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- medisumqa — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- apollocorpus — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- healthbench — 共享标签:医学问答 / 医疗NLP / 评测基准 / 临床文本
- rexerr — 共享标签:医疗NLP / 评测基准 / 临床文本
- meddialog — 共享标签:医学问答 / 医疗NLP / 临床文本
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

