CMB 中文医疗基准:28 万道多选题+74 例复杂问诊

二十八万余道多选题加七十四例复杂病例问诊,六大项二十八小项覆盖医、护、药、技、考研五个层级,把中文医疗能力拆成知识注入与问诊推理两条互不替代的考线

来源 中国医学考试题库与真实临床病例(公开整理)发布时间: 2026-10-19最后更新: 2026-10-20 阅读 22
CMB 中文医疗基准:28 万道多选题+74 例复杂问诊

信息速览

数据集名称CMB 中文医疗基准:28 万道多选题+74 例复杂问诊
数据类型中文,医学考试,多选题,临床病例,大模型评测
规模74
接入方式中国医学考试题库与真实临床病例(公开整理)
AI 就绪度

自动指标与真实临床能力之间的落差,在中文语境下有一个特殊表现:考试分数可以很高,但换个说法就答不上。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 / 临床文本

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集