想象一座名叫“智慧医塾”的医学院。2019年,学院迎来了第一位AI医学生BioBERT。他入学时只读过通用语文教材,于是老师给他加了两门医学必修课——PubMed摘要和PMC全文,让他先读医学书再做医学题。2020年,转学生PubMedBERT更狠:他干脆不读通用书,从零开始只啃医学文献。到了2022年,一位“天才转学生”Med-PaLM空降,他脑容量惊人(千亿级参数),入学后靠“跟诊带教”(指令微调)和“思考再作答”(多步推理),直接在执业医师模拟考(MedQA)上考出67分;2023年,他的同门Med-PaLM 2更进一步,考到86.5分,逼近人类专家水平。这几代学生,串起了医学大模型从“会填空”到“会看病”的完整进化史。本文就用这部成长记,带你读懂数据、架构、微调、评估这四根支柱如何托举起医学大模型的天空。

岗位关联

对医疗AI从业者而言,读懂这条演进线,等于拿到一张“技术路线地图”:知道哪一代模型擅长什么、短板在哪、如何评估与落地,避免在选型和部署上走弯路。

目录
  1. 可视化演示
  2. 演进脉络
  3. 数据基座
  4. 模型架构
  5. 微调策略
  6. 医学问答
  7. 评估体系
  8. 应用与展望
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示从BioBERT到PubMedBERT到Med-PaLM的医学大模型演进路线与能力对比,含编码器到生成式范式转变。

本节配有交互动效(进入视口后自动加载,约 3KB)。

医学大模型演进路线 BioBERT→PubMedBERT→Med-PaLM 编码器→生成式范式转变 BERT → PubMedBERT → Med-PaLM 从理解任务到医学问答生成式飞跃。

演进脉络

翻开智慧医塾的校史档案,第一页写着BioBERT的入学介绍:他由通用语言模型BERT“转学”而来,身体里已经装着通用英语知识,却完全不懂医学术语。老师为他制定了“继续预训练”计划——在医学文献上再学一遍语言规律,让通用大脑长出医学神经元。就这样,他成了医学NLP的开山弟子,为整个领域趟出了第一条路。

BioBERT(2019)的做法是:拿BERT做底座,继续在PubMed摘要和PMC全文上训练。PubMedBERT(2020)则走得更远,干脆把“通用课本”扔掉,从随机初始化开始,只在医学语料上训练。实验结果给行业上了一课:数据纯度与领域相关性,有时比通用知识更重要——PubMedBERT在多个医学基准上反超了BioBERT。两代编码器模型虽然形态相似,但“教材选择”的差异已经悄悄拉开了差距。

这两代模型都属于“编码器”范式:它们把文章或问题整体“读”进去,输出一个紧凑的语义向量,擅长分类、抽取这类任务。比如判断“患者有发热和咳嗽,是否肺炎”,模型只需输出一个标签。这个阶段的训练目标叫“掩码语言模型”(MLM),用“完形填空”的方式让模型建立医学语感:

所以第一代学生是靠“填空刷题”建立医学语感的。他们的成绩单虽不够惊艳,却证明了“先读医学书再考试”这条朴素路径走得通。从BioBERT到PubMedBERT,再到后来空降的Med-PaLM,智慧医塾的招生标准一茬比一茬高,而每一代新人都站在前人的肩膀上完成了一次漂亮的代际跃迁。

LMLM=−∑xi∈Mlog⁡P(xi∣X∖M)\displaystyle \mathcal{L}_{\mathrm{MLM}} = -\sum_{x_i \in \mathcal{M}} \log P(x_i \mid X_{\setminus \mathcal{M}})
通俗地说,把医学教材里的词挖掉,让模型靠上下文猜回来,猜得越准,医学“语感”越好。
  1. 遮罩集合训练时随机遮住约15%的输入词,被遮住的词就是给模型出的“完形填空题”。
    M={xi∣xi 被随机遮住}\displaystyle \mathcal{M} = \{ x_i \mid x_i \text{ 被随机遮住} \}
  2. 可见上下文去掉被遮词后剩下的句子,是模型作答时可以偷看的“线索”,也是它唯一的依据。
    X∖M=X∖M\displaystyle X_{\setminus \mathcal{M}} = X \setminus \mathcal{M}
  3. 负对数似然模型要最大化猜中被遮词的概率,取负对数后变成最小化的损失,猜错越多惩罚越大。
    min⁡θ∑xi∈M−log⁡Pθ(xi∣X∖M)\displaystyle \min_{\theta} \sum_{x_i \in \mathcal{M}} -\log P_\theta(x_i \mid X_{\setminus \mathcal{M}})

数据基座

医学界有句老话:教材决定医学生的天花板。BioBERT和PubMedBERT的差距,很大程度上就是“教材选择”的差距。BioBERT读的是“通用教材+医学专著”的混合套餐,PubMedBERT则是把通用教材全部扔掉,只留医学专著,甚至连“生字表”(词表)都用医学文本重新构建。这种“聚焦式阅读”,让模型不用分心去学"the is of"的花边新闻,把所有参数都用来吸收医学知识。

数据规模上,医学语料虽然只有通用语料的几十分之一,但“聚焦”本身就是优势。PubMed摘要累计超过3000万篇,PMC全文文献数百万篇,这些文本质量高、术语规范、结构清晰,是医学界几十年的知识沉淀。BioBERT靠这些语料把BERT的通用能力“迁移”到医学领域;PubMedBERT则用同样规模的语料从零起步,反而证明了“干净的数据胜过花哨的起点”。

实际工程中,很多领域预训练采用“混合教材”策略:一部分通用语料保底,一部分医学语料提升专业性,二者的比例由一个权重 $\lambda$ 控制,最终训练目标是两类语料损失的加权和:

PubMedBERT用“纯医学阅读”证明:当目标是当医学专家,与其博而不精,不如把一本专著读透。数据基座这一课,核心就四个字——纯度、规模要平衡。后续的生成式大模型虽然不再做专门的医学继续预训练,但它们在通用语料中“顺带”读到的大量医学内容,同样来自这座数据基座。

L=λ Lmed+(1−λ) Lgen\displaystyle \mathcal{L} = \lambda \, \mathcal{L}_{\mathrm{med}} + (1-\lambda) \, \mathcal{L}_{\mathrm{gen}}
通俗地说,好比按7:3配比“医学专著+通用科普”,λ就是那张决定配比的书单。
  1. 医学语料损失模型在PubMed摘要、PMC全文等医学文本上的掩码预测损失,反映“医学语感”学得好不好。
    Lmed=−∑x∈医学语料log⁡P(x)\displaystyle \mathcal{L}_{\mathrm{med}} = -\sum_{x \in \text{医学语料}} \log P(x)
  2. 通用语料损失模型在通用文本上的损失,保住基本的语言能力和世界常识,防止“偏科”。
    Lgen=−∑x∈通用语料log⁡P(x)\displaystyle \mathcal{L}_{\mathrm{gen}} = -\sum_{x \in \text{通用语料}} \log P(x)
  3. 配比权重λ越接近1,模型越“专精”医学;λ越接近0,模型越“博而不精”。PubMedBERT相当于λ=1的极端方案。
    0≤λ≤1\displaystyle 0 \le \lambda \le 1

模型架构

如果说数据是教材,架构就是大脑。BioBERT时代的学生长着一颗“精读型大脑”——编码器,善于把一段话读成向量,然后去做判断题;但让他“动笔”写一段诊断,他就傻眼了。2022年空降的Med-PaLM则换了一颗“写作型大脑”——自回归解码器,擅长一个词一个词地往后写,自然就能生成完整的医学回答。

两代大脑的共同底座,是2017年提出的Transformer,其核心是注意力机制:模型在阅读每个词时,会同时“注意到”句子里所有其他词,并给它们分配权重——就像医生问诊时,会把“发热”与“咳嗽、肺炎、胸痛”联系起来,而不是孤立地看每个症状。注意力机制让模型拥有了“全局视野”,这是它理解长文本的关键。

编码器使用双向注意力,读词时能同时看左右两侧的上下文;解码器使用单向注意力,只能从左到右逐词生成。GPT系列把“写作型大脑”这条路越走越宽:参数越多、语料越大,生成能力越强。Med-PaLM的基座PaLM有5400亿参数,是BioBERT(约1.1亿参数)的500多倍。规模带来的是质的飞跃——从“读题选答案”升级为“开口作答”。注意力机制的计算公式如下:

从“精读型大脑”到“写作型大脑”,是医学大模型最关键的一次器官升级。没有这次升级,Med-PaLM再怎么刷题,也没法开口回答开放式临床问题。这也解释了为什么架构范式的转变,比单纯增加参数更能改变医学NLP的玩法。

Attention(Q,K,V)=softmax ⁣(QK⊤dk)V\displaystyle \mathrm{Attention}(Q,K,V) = \mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right) V
通俗地说,注意力等于给句子里的每个词发“关注度彩票”,相关的词分到高权重,最后按权重汇总信息。
  1. 查询与键每个词同时扮演“我要找什么”(查询Q)和“我是什么”(键K)两个角色,二者的点积算出词与词之间的“亲密度”。
    QK⊤\displaystyle QK^{\top}
  2. 缩放因子用 $\sqrt{d_k}$ 给“亲密度”降温,防止数值过大导致softmax梯度消失。
    QK⊤dk\displaystyle \frac{QK^{\top}}{\sqrt{d_k}}
  3. 归一化权重softmax把亲密度变成一组非负且和为1的权重,代表“该关注谁”。
    aij=softmaxj(qi⋅kjdk)\displaystyle a_{ij} = \mathrm{softmax}_j\left(\frac{q_i \cdot k_j}{\sqrt{d_k}}\right)
  4. 值加权求和每个词用自己的权重对“内容”(值V)加权汇总,得到融合全局信息的新表示。
    ∑jaijVj\displaystyle \sum_j a_{ij} V_j

微调策略

医学生读完教材只是起点,想上考场还得刷题,想上临床还得跟诊。微调就是AI医学生的“刷题”和“带教”环节,也是让通用模型变成“医学专家”的临门一脚。BioBERT时代靠“刷题”(任务微调)就能提升;到了Med-PaLM时代,“带教”(指令微调)和“患者反馈”(人类对齐)成了解锁潜能的钥匙。

第一层“刷题”是任务微调:拿出标注好的医学问答或推理数据集,让模型在具体任务上继续优化损失。第二层“带教”是指令微调:把任务包装成自然语言指令,比如“请根据以下症状给出最可能的诊断”,模型学会听指令办事,而不是只会输出分类标签。第三层“对齐”是RLHF:让人类医生对模型的多组回答打分排序,把“更受医生喜欢”作为奖励信号,用强化学习微调模型。三层策略层层递进,把模型从“会做题”推向“会办事”。

无论哪一层,训练目标在数学上都是同一个形式:给定输入上下文 $x$(问题+已有信息),最大化模型输出正确答案 $y$ 的概率。写成损失函数就是负对数似然:

BioBERT时代靠任务微调就能登堂入室;Med-PaLM则证明,指令微调加上人类反馈对齐,才是让大模型理解“医生到底想要什么”的关键。同样是微调,策略从“按科目刷题”升级到“跟着主任医师查房”,模型的上限自然也就不同了。

Lft=−log⁡Pθ(y∣x)\displaystyle \mathcal{L}_{\mathrm{ft}} = -\log P_{\theta}(y \mid x)
通俗地说,答案越符合医生期待,这个损失值越小;训练的过程就是把这个值一压再压。
  1. 输入上下文$x$ 可以是问题文本、病历片段,也可以是指令加若干示例,相当于考卷上的“题目+提示”。
    x=(指令,问题,示例)\displaystyle x = (\text{指令}, \text{问题}, \text{示例})
  2. 模型参数$\theta$ 代表模型内部所有可学习的权重,微调就是在已有参数基础上做小幅更新。
    θ←θ−η∇θLft\displaystyle \theta \leftarrow \theta - \eta \nabla_\theta \mathcal{L}_{\mathrm{ft}}
  3. 条件概率$P_\theta(y \mid x)$ 是模型在给定问题下生成答案 $y$ 的概率,越大说明答得越好。
    Pθ(y∣x)\displaystyle P_\theta(y \mid x)
  4. 负对数变换取负对数把“最大化概率”变成“最小化损失”,方便用梯度下降统一优化。
    min⁡θ  −log⁡Pθ(y∣x)\displaystyle \min_\theta \; -\log P_\theta(y \mid x)

医学问答

考试是检验学习成果最好的方式。医学大模型最重要的考场叫MedQA,它取材于美国执业医师资格考试(USMLE)风格的四选一题目。BioBERT时代能考到45%左右(随机蒙只有25%),PubMedBERT略高;到了Med-PaLM,分数一举冲到67%,Med-PaLM 2更是拿下86.5%,超过许多人类考生。这张成绩单,清晰地画出了能力跃升的曲线。

分数暴涨的秘密,不只是“背得多”,更是“会思考”。Med-PaLM采用多步推理(思维链):把每道题拆成“病人主诉→鉴别诊断→进一步检查→得出结论”的链条,一步步想清楚再作答,而不是看到题就蒙答案。它还让模型“引用依据”,把答案锚定在可查证的医学知识上,大幅减少一本正经地胡说八道。这种“做题留痕”的风格,正是临床医生最看重的素质。

在闭卷考试设定下,成绩单的计算方式很朴素——答对的题数除以总题数:

从“蒙对”到“想明白”,是Med-PaLM给行业的最大启示。考试分数上去了,模型才有资格谈临床应用——但注意,分数高不等于能看病。纸面成绩之外,还有更严格的“面试关”和“实习考核”等着它,这就引出了评估体系的话题。

Acc=1N∑i=1N1[y^i=yi]\displaystyle \mathrm{Acc} = \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}\big[\hat{y}_i = y_i\big]
通俗地说,这就是“得分率”;但大模型时代,除了看对错,还要审查作答过程的推理质量。
  1. 预测答案$\hat{y}_i$ 是模型对第 $i$ 道题给出的选项,可能是蒙的,也可能是推理出来的。
    y^i=arg⁡max⁡yPθ(y∣xi)\displaystyle \hat{y}_i = \arg\max_y P_\theta(y \mid x_i)
  2. 标准答案$y_i$ 是题目的标准答案,来自出题委员会的权威裁定。
    yi\displaystyle y_i
  3. 示性函数$\mathbb{1}[\cdot]$ 在预测与标准答案一致时取1,否则取0,相当于“这道题算不算对”。
    1[y^i=yi]={1,y^i=yi0,y^i≠yi\displaystyle \mathbb{1}\big[\hat{y}_i = y_i\big] = \begin{cases} 1, & \hat{y}_i = y_i \\ 0, & \hat{y}_i \neq y_i \end{cases}
  4. 平均求和把 $N$ 道题的对错加起来除以 $N$,得到最终的准确率。
    1N∑i=1N1[y^i=yi]\displaystyle \frac{1}{N} \sum_{i=1}^{N} \mathbb{1}\big[\hat{y}_i = y_i\big]

评估体系

医学界的规矩:考完笔试还要面试,面完试还要实习考核。医学大模型的评估同样层层设卡:自动基准是“笔试”,专家评审是“面试”,安全护栏是“实习期考核”。三道关卡,缺一不可。

自动基准除了MedQA,还有PubMedQA——给定一篇医学文献的结论性问题,让模型判断“是/否/可能”。这类基准的好处是客观、可复现,坏处是只看对错,不问“答得漂不漂亮、有没有可能坑病人”。于是Med-PaLM的研发团队引入了人类医生评审团:从医学准确性、操作可行性、潜在危害性、证据充分性等维度给模型的回答打分,并用统计方法检验评审员之间的意见一致性,确保评分可信。

人类评审的一致性可以用Cohen's kappa系数衡量,它扣除“纯靠运气也能对上”的成分,只留下真正的意见吻合度:

Med-PaLM在专家评审中拿到了接近人类医生的分数,同时配备了安全护栏——遇到敏感问题会拒绝回答或建议就医,这才让它有底气进入临床讨论。评估体系就像一面多棱镜:笔试、面试、护栏三道关,任何一道都不能省。

κ=po−pe1−pe\displaystyle \kappa = \frac{p_o - p_e}{1 - p_e}
通俗地说,κ就像一台“考官默契度测量仪”:完全靠运气猜的默契是0,完美一致的默契是1。
  1. 观测一致率$p_o$ 是两位评审医生实际打分相同的比例,反映“肉眼可见”的默契。
    po=评分一致的样本数总样本数\displaystyle p_o = \frac{\text{评分一致的样本数}}{\text{总样本数}}
  2. 随机一致率$p_e$ 是假设两位医生各按自己的习惯随机打分时,也会偶然相同的比例。
    pe=∑jπ1j⋅π2j\displaystyle p_e = \sum_j \pi_{1j} \cdot \pi_{2j}
  3. 修正公式分子扣除运气成分,分母是“运气之外的最大可能一致量”,比值就是纯默契度。
    κ=po−pe1−pe\displaystyle \kappa = \frac{p_o - p_e}{1 - p_e}

应用与展望

学成文武艺,货与患者家。当AI医学生走出校门,第一批落地场景已经热闹起来:病历结构化、辅助诊断、药物研发,每个方向都有它的用武之地。BioBERT这类编码器模型虽然“老”,但胜在轻快准,至今仍是医院信息化建设的扛把子。

在病历结构化中,编码器模型是主力——它们把冗长的病程记录快速切成实体和关系(诊断、用药、过敏史),自动生成结构化表单,把医生从复制粘贴中解放出来。在辅助诊断和患者咨询中,Med-PaLM这类生成式模型发挥所长:患者输入症状,模型给出可能的疾病列表并附上推理和建议,医生再审核把关。在药物研发里,大模型帮忙从海量文献中抽取靶点、药物、不良反应之间的关联,把调研时间从几周压缩到几天。

从数学上看,临床决策可以建模为“在症状和检查结果条件下,选择最可能的诊断”:

当然,AI医学生还不能独立执业:幻觉(一本正经地胡说八道)、数据隐私、责任归属,都是拦路虎。可信挑战的答案也清晰起来——多模态(让模型看懂影像)、可解释(每个结论给出依据)、人机协同(医生做最终决策)。从教室到诊室,路还长,但方向已经亮起来了。

k^=arg⁡max⁡k  P(Dxk∣xsym,xtest)\displaystyle \hat{k} = \arg\max_{k} \; P(\mathrm{Dx}_k \mid x_{\mathrm{sym}}, x_{\mathrm{test}})
通俗地说,在所有候选诊断里,挑一个在给定证据下概率最高的——这就是AI的“诊断思路”。但医生还会追问:这个概率从哪来?证据靠谱吗?
  1. 临床证据$x_{\mathrm{sym}}$ 是患者主诉的症状,$x_{\mathrm{test}}$ 是化验和影像等检查结果,二者构成模型的“输入证据链”。
    x=(xsym,xtest)\displaystyle x = (x_{\mathrm{sym}}, x_{\mathrm{test}})
  2. 候选诊断$\mathrm{Dx}_k$ 是第 $k$ 种可能的疾病诊断,来自模型的医学知识库。
    k∈{1,2,…,K}\displaystyle k \in \{1, 2, \dots, K\}
  3. 最大后验选择取使条件概率最大的 $k$ 作为输出诊断,但概率高不等于正确,仍需医生终审。
    k^=arg⁡max⁡kP(Dxk∣x)\displaystyle \hat{k} = \arg\max_k P(\mathrm{Dx}_k \mid x)

AI 应用场景

电子病历结构化:编码器模型的“老本行”

阶段:数据预处理与信息抽取

解决的问题:传统病历录入靠医生手工填写结构化表单,耗时且易遗漏关键信息。用BioBERT类编码器模型做实体识别与关系抽取,可以把非结构化病程自动转成结构化字段(诊断、用药、过敏史、手术史),准确率可达90%以上,把医生从繁重的文书工作中解放出来。

具体案例:某三甲医院信息科用BioBERT在脱敏出院小结上微调,自动抽取“主要诊断”“合并症”“出院用药”三类实体,日均处理病历2000份,结构化耗时从每份8分钟降到30秒,漏报率下降60%。

临床辅助问答:生成式大模型的“新战场”

阶段:模型推理与知识服务

解决的问题:基层医生面对疑难病例时,缺乏快速、可溯源的循证医学参考。Med-PaLM类生成式大模型可以结合多步推理和文献依据,对“某药对糖尿病肾病是否有效”这类问题给出带引用来源的回答,让医生在几分钟内完成过去需要数小时的文献调研。

具体案例:一家互联网医疗平台接入医学大模型做分诊助手,患者描述“发热咳嗽三天”,模型输出“可能的上呼吸道感染,建议排查肺炎,注意血氧”并附推理步骤,再由值班医生审核后发送给患者,咨询响应时间从30分钟缩短到3分钟。

药物研发情报挖掘:文献采矿的“加速器”

阶段:模型预训练与关系抽取

解决的问题:新药研发的前期调研需要从数万篇论文中人工整理“药物-靶点-疾病”关系,成本极高。用PubMedBERT在生物医学文献上做关系抽取,自动构建知识图谱,可以快速回答“哪些已有药物可能对某靶点有效”,为老药新用提供线索。

具体案例:某药企研发团队利用PubMedBERT微调模型,从近5年PubMed文献中抽取了120万条药物-靶点关系,将某肿瘤靶点的候选药物筛选周期从6个月缩短到3周,节省调研经费数百万元。

Python 演示

python97 行
# -*- coding: utf-8 -*-"""迷你版医学大模型演进实验用共现矩阵模拟"领域预训练", 对比通用预训练与医学预训练在下游医学问答(感染/肺炎 vs 心脏问题)上的准确率差异."""import numpy as np rng = np.random.default_rng(42) common_words = ["the", "model", "is", "a", "of", "in", "data", "task"]med_words = ["患者", "发热", "咳嗽", "肺炎", "胸痛", "感染", "心率", "血压"] # 通用语料: 所有词随机排列, 医学词之间"均匀共现", 学不到疾病结构general_corpus = []all_words = common_words + med_wordsfor _ in range(50):    s = list(all_words)    rng.shuffle(s)    general_corpus.append(s) # 医学语料: 感染类词簇与心脏类词簇有结构地共现medical_corpus = [    ["患者", "发热", "咳嗽", "肺炎", "感染", "血氧"],    ["患者", "肺炎", "发热", "感染", "影像", "抗菌"],    ["患者", "咳嗽", "发热", "白细胞", "抗菌", "治疗"],    ["患者", "胸痛", "心率", "血压", "心电图", "诊断"],    ["患者", "胸痛", "血压", "心率", "心电图", "治疗"],] * 10 # 下游任务: 判断是"感染/肺炎"还是"心脏问题"qa_data = [    (["患者", "发热", "咳嗽"], 1),    (["患者", "咳嗽", "感染"], 1),    (["患者", "发热", "肺炎"], 1),    (["患者", "发热", "感染"], 1),    (["患者", "咳嗽", "肺炎"], 1),    (["患者", "胸痛", "心电图"], 0),    (["患者", "心率", "血压"], 0),    (["患者", "胸痛", "心率"], 0),    (["患者", "胸痛", "血压"], 0),    (["患者", "血压", "心率"], 0),]  def pretrain(corpus, dim):    """领域预训练: 共现矩阵 + SVD 学习词向量"""    vocab = sorted({w for s in corpus for w in s})    idx = {w: i for i, w in enumerate(vocab)}    n = len(vocab)    co = np.zeros((n, n))    for s in corpus:        for i, w in enumerate(s):            for j in (i - 1, i + 1):                if 0 <= j < len(s):                    co[idx[w], idx[s[j]]] += 1    u, s_, _ = np.linalg.svd(co, full_matrices=False)    return {w: u[idx[w], :dim] * np.sqrt(s_[:dim]) for w in vocab}  def sentence_vec(words, emb, dim):    vec = np.zeros(dim)    cnt = 0    for w in words:        if w in emb:            vec += emb[w]            cnt += 1    return vec / cnt if cnt else vec  def train_and_eval(emb, dim):    """下游微调: 在问答数据上训练逻辑回归并回传准确率"""    x = np.array([sentence_vec(w, emb, dim) for w, _ in qa_data])    y = np.array([t for _, t in qa_data], dtype=float)    w = np.zeros(dim)    b = 0.0    lr = 0.5    for _ in range(300):        p = 1.0 / (1.0 + np.exp(-(x @ w + b)))        grad = (p - y) @ x        w -= lr * grad / len(y)        b -= lr * (p - y).mean()    pred = (x @ w + b > 0).astype(int)    return (pred == y).mean()  def main():    print("=== 医学大模型演进: 领域预训练对比实验 ===")    print(f"{'向量维度':<8}{'通用预训练':<12}{'医学预训练':<12}")    for dim in (2, 3, 4):        acc_g = train_and_eval(pretrain(general_corpus, dim), dim)        acc_m = train_and_eval(pretrain(medical_corpus, dim), dim)        print(f"{dim:<8}{acc_g:<12.0%}{acc_m:<12.0%}")    print("结论: 医学语料的结构化共现让词向量有区分度, 下游准确率显著更高.")  if __name__ == "__main__":    main()
目的:用共现矩阵模拟“领域预训练”,对比通用语料与医学语料学到的词向量在医学问答上的表现差异,复现BioBERT/PubMedBERT的核心思想。
  1. co[idx[w], idx[s[j]]] += 1统计相邻词共现次数,这是“预训练”的原始原料。
  2. u, s_, _ = np.linalg.svd(co, full_matrices=False)用奇异值分解把共现矩阵压缩成低维语义向量,相当于从文献里“悟”出词义。
  3. p = 1.0 / (1.0 + np.exp(-(x @ w + b)))逻辑回归输出“是否感染”的概率,模拟下游任务微调。
  4. w -= lr * grad / len(y)梯度下降更新参数,对应微调环节的“刷题”。
  5. pred = (x @ w + b > 0).astype(int)概率大于0.5判为感染类,最后统计与真实标签一致的准确率。

常见误区

误区“BioBERT这类编码器模型又小又土,反正大模型时代来了,直接上Med-PaLM不就完事了吗?”

正解这种想法好比让住院医师跳过基本功直接上台手术。编码器模型在实体识别、关系抽取、病历结构化等任务上仍然高效、便宜、易部署;生成式大模型强在开放式问答,但推理成本高、幻觉风险大。选型要看任务类型:结构化抽取选BioBERT,开放问答选Med-PaLM,而不是无脑追大。

为何常见:媒体和舆论总在讨论千亿参数大模型,容易让人产生“大=好、新=优”的错觉,忽略了医疗场景对成本和稳定性的苛刻要求。

误区“我把BERT丢到PubMed上跑一遍继续预训练,不就等于拿到BioBERT了?”

正解继续预训练涉及数据清洗、任务相关语料配比、学习率控制、灾难性遗忘等一系列工程细节。BioBERT是用通用模型打底、在医学语料上以小学习率持续训练;PubMedBERT则证明从零训练可能更优。跑一遍不等于练成,训练过程的语料配比和超参选择,直接决定下游效果。

为何常见:预训练过程像黑盒,初学者容易把“跑过流程”当成“完成了训练”,忽略了其中大量的调优细节。

误区“Med-PaLM 2都考86.5%了,比很多医学生还高,可以上临床了吧?”

正解考试分数只是“笔试”,临床还需要“面试”(专家评审考察准确性、可操作性、危害性)和“护栏”(防幻觉、保护隐私、明确责任)。MedQA这类基准还存在数据污染风险——模型可能在预训练阶段见过原题。研究者明确表示:模型仍会生成错误但看似合理的回答,必须由医生把关。

为何常见:刷榜文化让人把基准分数等同于实际能力,忽略了医疗场景中“一次错误可能致命”的特殊性。

误区“既然AI都会看病了,以后医生肯定要失业。”

正解现阶段的医学大模型定位是“辅助工具”:它擅长信息抽取、知识检索、初筛建议,但无法承担法律责任、无法与患者共情、无法做最终决策。落地的主流形态是人机协同——AI出草稿,医生做判断。正如智慧医塾的毕业典礼上,老师说的那句话:“AI是听诊器,不是医生。”

为何常见:影视剧和新闻标题喜欢渲染“AI取代人类”的焦虑,而真实的医疗AI部署始终把人类医生放在决策闭环的中心。

面试题

Q1. BioBERT 的预训练起点是什么?

单选题 · easy

  • A.随机初始化后直接训练
  • B.继承BERT通用权重← 正确答案
  • C.从GPT权重迁移
  • D.从Med-PaLM蒸馏

答案:B。BioBERT的核心做法是拿BERT做底座,在PubMed摘要和PMC全文上继续预训练,相当于“转学生”继承通用语言能力再补医学课。随机初始化是从零训练的做法(那是PubMedBERT),GPT是解码器架构,方向不对。

Q2. PubMedBERT 与 BioBERT 的关键区别是?

单选题 · easy

  • A.采用图神经网络结构
  • B.从零训练于医学语料← 正确答案
  • C.参数量扩大了十倍
  • D.引入强化学习算法

答案:B。PubMedBERT抛弃通用预训练权重,从随机初始化开始,只在PubMed和PMC医学语料上训练。它用“纯医学阅读”证明数据纯度的重要性,参数规模与BioBERT相当,也没有用强化学习。

Q3. 掩码语言模型主要训练了什么能力?

单选题 · easy

  • A.根据上下文预测被遮词← 正确答案
  • B.生成完整医学长文
  • C.对答案进行排序打分
  • D.识别图片中的病灶

答案:A。掩码语言模型像“完形填空”,随机遮住约15%的词,让模型靠上下文猜回来,从而建立医学语感。生成完整长文是解码器的能力,排序打分类似RLHF的奖励模型,识别病灶是多模态模型的任务。

Q4. Med-PaLM 属于哪种模型范式?

单选题 · mid

  • A.双向编码器分类器
  • B.自回归生成式大模型← 正确答案
  • C.基于规则专家系统
  • D.图神经网络模型

答案:B。Med-PaLM以PaLM(5400亿参数的自回归解码器)为基座,通过指令微调和多步推理生成开放式医学回答。编码器分类器是BioBERT的做法,专家系统和图神经网络都不是大语言模型的范式。

Q5. 指令微调(instruction tuning)的主要作用是?

单选题 · mid

  • A.减小模型参数量
  • B.让模型遵循指令执行任务← 正确答案
  • C.加快推理阶段速度
  • D.扩大医学词表规模

答案:B。指令微调把任务包装成自然语言指令,让模型学会“听指令办事”,相当于老师用带教方式训练医学生。它不改变参数规模,也不直接影响推理速度和词表,核心是让模型理解并执行多样化任务。

Q6. MedQA 数据集主要来源于?

单选题 · mid

  • A.中文执业医师考试
  • B.美国执业医师考试风格← 正确答案
  • C.住院病历真实记录
  • D.医药广告文案语料

答案:B。MedQA取材于美国执业医师资格考试(USMLE)风格的四选一题目,是医学大模型最常用的“笔试考场”。它不是病历数据,也不是广告文案,BioBERT约45%、Med-PaLM 67%、Med-PaLM 2达86.5%的成绩都出自这个基准。

Q7. 医学大模型的预训练语料通常包括哪些?

多选题 · mid

  • A.PubMed 文献摘要← 正确答案
  • B.PMC 全文数据库← 正确答案
  • C.脱敏处理的电子病历← 正确答案
  • D.未经筛选的网页评论

答案:ABC。PubMed摘要和PMC全文是BioBERT、PubMedBERT的核心语料,脱敏电子病历也是医疗AI常见的训练数据。未经筛选的网页评论噪声大、质量低、隐私风险高,不属于规范的医学预训练语料。

Q8. 为何 Med-PaLM 未做医学领域预训练仍能超越 BioBERT?

单选题 · hard

  • A.使用了更大的医学语料
  • B.靠规模与提示学习突破← 正确答案
  • C.人工标注百万条问答
  • D.采用了编码器架构

答案:B。Med-PaLM的关键是帕累托式的范式转变——用5400亿参数的通用大模型加上指令微调、多步推理和提示集成,让通用能力“涌现”到医学任务上。它没有做专门的医学领域继续预训练,也没有百万级人工标注,更不是编码器架构。

Q9. 评估医学大模型时,人类专家重点考察哪些维度?

多选题 · hard

  • A.医学内容准确性← 正确答案
  • B.建议可操作性← 正确答案
  • C.潜在伤害风险← 正确答案
  • D.生成文本长度

答案:ABC。专家评审关注的不是字数而是“看病能力”:答案是否准确、建议能否执行、会不会造成伤害。Med-PaLM在多个安全维度上接近人类医生,这是它敢进入临床讨论的底气。文本长度与诊断质量无关。

Q10. 医学大模型临床落地面临哪些真实挑战?

多选题 · extreme

  • A.生成幻觉难以根除← 正确答案
  • B.数据隐私合规要求← 正确答案
  • C.可解释性亟待提升← 正确答案
  • D.完全替代医生决策

答案:ABC。幻觉(一本正经地胡说八道)、患者隐私的合规使用、可解释性不足,是医学大模型落地的三大拦路虎。正因如此,行业共识是“人机协同”——AI出草稿、医生做终审,而非完全替代医生决策,D本身就不是可行目标。