在三层应用框架里,模型微调处在中间那一层:上层的智能体应用决定"能干什么",本层的模型微调决定"懂不懂这家企业的行规",下层的数据治理决定"依据的数据对不对"。通用大模型懂常识,却不懂一家企业的行规——工艺参数怎么取舍、质检判到什么程度算不合格、一张报表里的数字该怎么解读。
模型微调要解决的问题很具体:把大模型的能力"压"进一个可以在本地跑、数据不出门、推理成本极低的小模型里,让它长期稳定地服务企业的具体场景。
空谈方法没有意义。本页用一个已经跑通、并且拿到完整实测数据的真实项目——AI 门诊病历质控——把四个关键问题讲清楚:标签从哪来、小模型怎么炼、效果怎么验证、人怎么参与。
做微调的第一步不是选模型,而是回答一个问题:拿什么当标准答案?项目一开始用的是人工评审结果,但数据很快说明——人工评审本身就不稳定。
全量纳入 AI 评分,对单一字段(现病史)逐条打分。
专家给出的总分,与他自己在备注里列出的扣分项对不上。
同一主诉下、内容相近的病历,不同评审员给出 10 分以上差距。
LLM 与专家的不合格率相差 20 个百分点,主要来自专家漏判。
在 11,410 条不及格样本中,把专家给出的总分,与他备注里逐条列出的扣分项核对一遍:
4,885 条,总分与扣分项可以逐条对上。
4,045 条,属于可接受的浮动。
2,480 条,备注与总分明显不在同一套标准上。
相同主诉之下,内容相近的现病史,评分可以相差 10-12 分:
现病史:患者肺癌术后复查,无发热,无胸闷,无不适主诉。
备注:缺起病时间扣 3 分;缺主要症状扣 9 分……
现病史:患者肺癌术后 3 年,咳嗽有白色粘液痰,无发热,无胸闷,无不适主诉。
备注:(空)
同一主诉「胃癌术后 1 月余」的另一组:评审员 A 给 15/25,评审员 B 给 25/25(满分)——两条现病史都缺关键描述,评分却相差 10 分。
数据先干净 → 模型才学得准 → 人要审的样本才会越来越少。
让 Qwen3-35B-MoE 按同一份评分标准对全部病历独立评分:同一输入永远给出同一输出,评分可以逐项拆解、可复核。人工噪声从 0.6% 降到 0,标准答案第一次真正"干净"了。
以 LLM 为教师、小模型为学生做知识蒸馏,学生采用三头架构(回归头给总分、分类头判合格与否、多标签头输出 7 个扣分项),并加一致性 loss 保证扣分项与总分对得上。结果是 100 倍推理提速,且可以本地部署。
模型先跑全量,专家只复核模型与专家分歧较大的样本;专家的修正回流训练,模型持续变准。人工工作量降到全集的 15% 以内,而且每审一条都在为下一版模型积累资产。
知识蒸馏(Knowledge Distillation)的思路很简单:大模型当老师,小模型当学生。老师把"怎么判"想清楚,学生把"判得快、判得便宜、还能本地部署"做到极致。
每条病历约 30 毫秒,日均万条无压力,运行成本远低于直接调用大模型。
同一套流水线可平移到主诉、查体、诊疗措施等 10 个以上字段,不用重做架构。
模型版本化管理,每次重训都能与上一版做同口径对比,效果变化看得见。
评分规则细化后重新蒸馏即可生效,不需要专家重新审一遍全量病历。
在精确率 ≥ 90% 的前提下达到 0.907,产品目标 ≥ 0.85,已达成。
区分"好病历"与"差病历"的能力 AUC 达 0.958,产品目标 ≥ 0.90,超出。
0.6B 学生对 35B 教师判断的一致率——小模型成功复制了大模型的判别能力。
| 版本 | 训练数据 / 标准答案 | 召回 @ P≥90% | 关键改进 |
|---|---|---|---|
| v9(原始基线) | 35K 条,专家评分作标签 | 0.318 | 用人工评分训练,效果被人工噪声卡住 |
| v15(小样本验证) | 5K 条,LLM 评分作标签 | 0.962 * | 把标准答案切换到 LLM,指标跳升(小样本,仅作方向验证) |
| v_full | 35K 条,LLM 评分作标签 | 0.890 | 全量 LLM 评分,规模上去后指标回落但更可信 |
| v_full_v2(当前) | 35K 条,LLM 评分(修复版) | 0.907 | 修复 156 条标签不一致样本,指标回到 0.9 以上 |
下面三例属于"无可争议"的漏判:模型按规则判得很准,而原专家给出了高分。它们的共同特征是——矛盾就写在字面上,人工评审却在批量作业中放过了。
主诉:犬伤复诊,来院打第 3 针狂犬疫苗。
诊断:被狗咬伤或抓伤
现病史:「犬伤复诊,来院打第 3 针狂犬疫苗。」——与主诉完全相同
主诉:突发右侧腰背部疼痛 4 小时。
诊断:泌尿系结石
现病史:「4 小时前突发左侧腰背部疼痛,向下腹部、外阴、腹股沟及大腿内侧放射……」
主诉:左足踇趾发灰变形 1 年。
诊断:灰指甲
现病史:「患者 1 年前出现右足踇趾趾甲发灰变形。否认其他外伤史。」
这三例的价值不只是"模型赢了",而是说明:当标准足够明确时,模型的执行一致性可以超过人工;反过来,只有把这些分歧样本审清楚,评分标准本身才会被写得更细。
35,802 条病历全部跑过一遍,每条约 30 毫秒,输出 7 维扣分与总分——覆盖率从"抽样"变成"全量"。
只把模型分与专家分相差超过 5 分的样本交给专家复核,现病史字段筛出 5,095 条,占全量的 14.2%。
专家在勾选式审核界面上做裁定,修正数据回流训练,模型持续变准;下一轮需要人工看的样本会继续减少。
5,095 条分歧样本并不是从头翻到尾。而是按"模型"与"LLM"对关键扣分项(与主诉/诊断不符)的判断是否一致分成四组,先抽 100 条快速判断方向,再决定是否铺开到全集。
| 组别 | 判定组合 | 全集条数 | 抽样条数 | 审核重点 |
|---|---|---|---|---|
| A | 模型与 LLM 都判"与主诉/诊断不符"——两者一致,真矛盾概率高 | 732 | 30 | 验证 LLM 判断是否准确,即原专家是否存在系统性漏扣 |
| B | 仅模型判"不符",LLM 未判——模型可能偏激进 | 102 | 20 | 判断模型是否过度泛化(误报) |
| C | 仅 LLM 判"不符",模型未判——模型可能漏判 | 8 | 20 | 判断模型漏报的代价;组内仅 8 条,抽样保留 20 条供细看 |
| D | 两者都未判"不符",分歧来自其他扣分项 | 4,253 | 30 | 检查其他扣分项(缺起病时间、缺主要症状、复制主诉等)的健康度 |
| 合计 | 5,095 | 100 | 建议顺序:A → C → B → D | |
顺序有讲究:A 组规模最大、判别价值最高;C 组虽然只有 8 条,但漏报代价高,所以抽样时特意保留 20 条细看;B 组看模型是否过度泛化;D 组最后检查其他类扣分项。
5,095 条分歧样本中,模型各项扣分的命中情况——这张表本身就是"评审标准最容易失守在哪里"的体检报告:
| 扣分项 | 模型判扣占比 | 说明 |
|---|---|---|
| 缺起病诱因 | 72.2% | 病程描述普遍没写"为什么发病",是最普遍的缺失 |
| 缺诊治经过 | 66.8% | 此前做过哪些检查、用过什么药,常被省略 |
| 缺阴性症状 | 59.9% | 没有写"无某某症状"的排除性描述 |
| 缺主要症状 | 53.5% | 主诉提到的症状在现病史里没有展开 |
| 复制主诉 | 18.3% | 现病史与主诉雷同,没有增量信息 |
| 与主诉/诊断不符 | 16.4% | 单项否决项:一旦成立,该字段直接 0 分 |
| 缺起病时间 | 14.3% | 没有写明起病时点,人工评审最容易"看漏"的一项 |
另有一组极端分歧值得单独看:模型判 0 分的 834 条里,有 287 条原专家给了满分 25 分——分歧样本的平均分差 10.09 分(中位数 7 分)。这正是必须请专家做第三方裁定的原因。
先自己看完病历形成判断,再对照模型与 LLM 的勾选。AI 的解释只用来定位问题,不作为结论。
例如"缺起病时间"——病程里没有写起病时点("3 天前""某月某日"等)就算缺失,不因为能推断出来就放过。
"与主诉/诊断不符"一旦判定成立,该字段直接 0 分。只是"描述简略"不算矛盾,应归入其他扣分项;门诊常见的合理空白字段,也不作为扣分理由。
现病史字段技术方案验证;全量 35K 病历 LLM 评分完成;蒸馏模型召回 0.907;跨字段(查体)验证通过;5,095 条专家复核样本就绪。
完成 5,095 条专家复核并回流;重训新版模型,预期召回 ≥ 0.93;主诉、既往史字段走完整流水线;前端审核工具集成。
10 个以上字段全覆盖;与医院业务系统对接;上线试运行并逐步推广;评分规则在线可调,方法向同类场景横向复制。
这套路径对制造业的场景是高度同构的。质检判定、工艺参数取舍、报表识别、售后判定——凡是"老师傅说了算"的环节,都存在同样两个前提问题:标准写得清不清,标签可信不可信。
而模型微调,正是把"老师傅的手感"变成可复用、可传承资产的技术手段:先用大模型把已有标准执行得一致,再用蒸馏让小模型本地化、低成本化,最后让人只审分歧样本、把判断沉淀回数据里。
这也是东阳中心打造"AI+工业创新场景公共服务平台"时,模型层能力的底座:企业不必自建算力与团队,也能就近完成场景验证;一家企业跑出的经验,可以沉淀成整个集群都能调用的能力。