AI+医疗实战:影像+文本报告怎么结合?从单模态分类到多模态医疗 AI 系统设计
前面如果我们已经做过医学影像分类、医学分割这些任务,下一步很自然就会遇到一个问题:
真实医疗场景里,模型几乎不可能只看图像。
医生在判断时,通常会同时参考:
- 医学影像本身
- 检查申请原因
- 患者年龄、性别、主诉
- 既往病史
- 历史报告与复查信息
也就是说,单模态模型解决的是"局部感知"问题,而多模态医疗 AI 要解决的是"临床语境下的综合判断"问题。
很多人一说多模态,就理解成"把图像和文本拼起来喂给大模型"。但在工程上,真正关键的不是拼接,而是:
不同模态的信息如何对齐、如何融合、如何评估、如何部署。
这篇文章就顺着前面的 AI+医疗系列,继续往下写一个更接近真实系统的问题:
影像 + 文本报告,到底该怎么做成一个可复现、可扩展、可落地的多模态医疗 AI 系统?
一、为什么单模态模型很快会碰到瓶颈?
先看一个最典型的胸片场景。
假设模型输入一张胸部 X 光,输出:
p(y=1∣x)=0.91 p(y=1|x)=0.91 p(y=1∣x)=0.91
其中:
- xxx:输入影像
- y=1y=1y=1:肺炎阳性
- p(y=1∣x)p(y=1|x)p(y=1∣x):模型给出的阳性概率
如果这是一个公开数据集 benchmark,这个结果可能已经不错了。
但在临床上,这个输出远远不够。
因为医生真正关心的问题往往不是"这张图像像不像肺炎",而是:
- 这是首次检查还是复查?
- 患者有没有基础疾病?
- 当前主诉是发热、咳嗽,还是术后随访?
- 这次影像和上一次相比是改善还是恶化?
这些信息如果缺失,单张图像的概率输出就很容易失真。
单模态系统的 3 个典型问题
1)图像证据不足以支撑完整临床结论
同样一张影像,在不同病史背景下,结论可能完全不同。
2)模型输出和医生工作流不一致
医生需要的不是一个数字,而是:
- 异常区域
- 对应描述
- 风险提示
- 是否建议进一步检查
3)模型缺少时间维度和上下文
很多医疗任务天然是时序问题,而不是静态图像识别问题。
所以从系统角度看,单模态图像模型往往只是一个起点,而不是终点。
二、多模态医疗 AI 的任务定义
如果把问题写得更正式一点,假设:
- 图像输入为 ximgx_{img}ximg
- 文本输入为 xtxtx_{txt}xtxt
- 结构化电子病历字段为 xehrx_{ehr}xehr
那么多模态系统可以写成:
y=fheta(ximg,xtxt,xehr) y = f_ heta(x_{img}, x_{txt}, x_{ehr}) y=fheta(ximg,xtxt,xehr)
其中:
- fhetaf_ hetafheta:参数为 heta 的多模态模型
- yyy:输出结果,可能是分类标签、风险评分、病灶定位、报告生成结果等
这里最重要的不是公式本身,而是要理解:
不同模态携带的信息层级并不一样。
一般来说:
- 图像提供原始视觉证据
- 文本提供病史、检查背景和临床语境
- 结构化字段提供约束条件和补充信息
所以多模态系统设计的重点,不是"把东西都塞进去",而是要决定:
- 哪个模态是主模态
- 哪个模态是辅助模态
- 不同模态在什么层做融合
- 输出目标到底是什么
三、AI+医疗里最常见的三类多模态任务
1)影像分类 + 文本增强
这是最容易起步的一类。
例如输入:
- 胸片图像
- 患者年龄/性别
- 主诉关键词
- 检查申请原因
输出:
- 疾病分类结果
- 风险评分
这类任务的核心是:
文本不是输出目标,而是辅助判断条件。
2)影像到报告生成
这是更热门、也更难的一类任务。
输入是影像,输出是:
- Findings
- Impression
- 异常描述
- 建议复查项
它的难点不只是"会写话",而是要满足:
- 文本和影像证据一致
- 医学术语使用正确
- 避免幻觉描述
- 能输出结构化结论
3)联合诊断 / 多任务学习
系统同时输出:
- 分类标签
- 病灶热力图
- 结构化诊断字段
- 简要文字说明
这类方式最接近真实产品,因为它不是只给一个结果,而是把"预测 + 解释 + 表达"一起输出。
四、系统设计第一步:先确定主模态和辅助模态
很多项目做不稳,不是模型不够强,而是一开始就把所有模态都当成同等重要。
更实用的做法是:
先明确谁是主模态。
场景 A:影像为主,文本为辅
适合:
- 胸片诊断
- CT/MRI 分类与分割
- 病理图像分析
这时候图像提供核心证据,文本主要用于补充上下文。
场景 B:文本为主,影像为辅
适合:
- 报告质控
- 报告纠错
- 病史驱动的复查建议系统
这时候文本承担主要语义,图像更多用于验证。
场景 C:双主模态
理论上最全面,但工程上最难。
如果数据规模、对齐质量和标注资源都不够,双主模态往往会把复杂度直接拉爆。
对多数团队来说,更稳的路线是:
先做单主模态 + 单辅助模态,再逐步增加交互深度。
五、最常见的融合方式有哪些?
1)Early Fusion:特征拼接
最简单的方式是分别提取图像特征和文本特征,再直接拼接:
h=[himg;htxt;hehr] h = [h_{img}; h_{txt}; h_{ehr}] h=[himg;htxt;hehr]
再接一个输出头:
y=Wh+b y = W h + b y=Wh+b
其中:
- himgh_{img}himg:图像 backbone 输出特征
- htxth_{txt}htxt:文本 encoder 输出特征
- hehrh_{ehr}hehr:结构化字段嵌入
- W,bW, bW,b:分类头参数
这种方法的优点
- 实现简单
- 很适合 baseline
- 对结构化字段特别有效
缺点
- 跨模态交互较弱
- 很难做细粒度证据对齐
2)Late Fusion:决策级融合
先分别训练图像模型和文本模型,再融合输出:
haty=alphahatyimg+(1−alpha)hatytxt hat{y} = alpha hat{y}{img} + (1-alpha) hat{y}{txt} haty=alphahatyimg+(1−alpha)hatytxt
其中:
- hatyimghat{y}_{img}hatyimg:图像分支输出
- hatytxthat{y}_{txt}hatytxt:文本分支输出
- alphaalphaalpha:融合权重
优点
- 训练稳定
- 方便解释
- 容易排查是哪一支分支出了问题
缺点
- 模态之间没有深层交互
- 上限通常不如 cross-attention 一类方法
3)Cross-Attention:跨模态注意力融合
这是影像报告生成和病灶级对齐里最常见的方法之一。
核心公式:
KaTeX parse error: Unexpected character: '' at position 49: ...m{softmax}left(̲rac{QK^T}{sqrt{...
其中:
- QQQ:查询向量,可以来自文本 token
- K,VK, VK,V:键和值,通常来自图像区域特征
- ddd:特征维度
这个公式在实验上的含义是:
模型不只是知道"图像和文本都存在",而是知道"某段文本描述对应哪块视觉证据"。
在医疗场景里,这一点非常关键。
因为如果文本不能和图像区域对齐,报告生成很容易出现"语言通顺但医学不准"的问题。
六、一个适合工程落地的 baseline 结构
如果你想先做一个真实能跑通、又不至于过重的多模态系统,我更建议从下面这个结构开始。
图像端
- Backbone:DenseNet121 / ResNet50 / Swin Transformer
- 输入:胸片、CT 切片或病理 patch
- 输出:图像全局特征 himgh_{img}himg
文本端
- 输入:病史、主诉、检查目的、既往描述
- Encoder:ClinicalBERT / 中文医疗 BERT / 通用 BERT baseline
- 输出:文本特征 htxth_{txt}htxt
融合层
hfusion=mathrmMLP([himg;htxt]) h_{fusion} = mathrm{MLP}([h_{img}; h_{txt}]) hfusion=mathrmMLP([himg;htxt])
输出层
根据任务选择:
- 分类概率
- 风险分层
- 结构化报告槽位
- 简短生成式描述
这套结构的优点是:
- 足够稳定
- 工程复杂度可控
- 方便做消融实验
- 容易从单模态系统升级过来
七、为什么多模态系统特别容易"看起来更强,实际上更脆"?
这是 AI+医疗 里特别容易踩坑的地方。
1)文本泄露
如果你把报告正文作为输入,再去预测报告里的结论,模型学到的很可能不是"理解图像",而是"抄答案"。
这会让指标虚高得非常离谱。
所以一定要区分:
- 哪些文本是预测前可得的
- 哪些文本已经包含目标标签
2)模态不对齐
图像和文本如果不是同一次检查、同一个时间点、同一种任务阶段,就会产生大量噪声。
医疗多模态建模里,对齐错误 往往比模型结构更致命。
3)一个模态压制另一个模态
文本信号太强时,模型可能几乎不看图像;图像信号太强时,文本分支又会退化成摆设。
所以一定要做消融实验,看各个模态到底有没有真实贡献。
4)部署时拿不到完整模态
研究阶段你可能能拿到完整病历、完整报告、结构化字段和历史记录。
但真实上线时,很多场景只能拿到:
- 当前影像
- 少量结构化字段
- 延迟到达的文本描述
这意味着系统设计必须反过来问:
真正上线那一刻,哪些模态是稳定可用的?
八、怎么评估一个多模态医疗系统?
多模态系统不能只报一个总分。
至少要从三层来评估。
1)任务层指标
如果是分类任务,至少看:
- AUC
- Recall
- Precision
- F1
- Calibration
如果是报告生成任务,还要补:
- Clinical Accuracy
- Label-level F1
- Error severity analysis
- 事实一致性分析
BLEU、ROUGE 可以看,但绝对不能只看它们。
2)模态贡献分析
至少做下面几组实验:
- 图像 only
- 文本 only
- 图像 + 文本
- 图像 + 结构化字段
如果多模态几乎没有提升,就要重新看融合策略是不是有效。
3)可靠性分析
医疗任务特别要看:
- 模型不确定性是否合理
- 错误集中在哪些病例
- 缺失某个模态时性能如何退化
- 换一个医院或设备后是否掉点
这些评估往往比主榜分数更重要。
九、一个可落地的开发路线
如果你要把影像 + 文本的多模态系统真正做出来,我建议按下面 4 步推进。
阶段 1:先把单模态图像 baseline 做稳
先知道图像分支自己的上限在哪里。
阶段 2:先接最干净的结构化字段
例如:
- 年龄
- 性别
- 主诉关键词
- 检查目的
这通常是最容易带来增益的一步。
阶段 3:再加入自由文本 encoder
把更完整的病史、既往描述和检查说明接进来。
阶段 4:再做联合输出
不仅输出概率,还输出:
- 异常说明
- 证据区域
- 风险提示
- 建议复核项
走到这一步,系统才真正接近可用产品,而不是实验 demo。
十、小结
从医学影像分类继续往下走,多模态医疗 AI 基本是绕不过去的一步。
但多模态系统真正的难点,从来不是"把图像和文本放进一个模型里",而是下面这四件事:
- 谁是主模态,谁是辅助模态
- 不同模态在部署时是否真的可用
- 融合方式到底带来了什么真实增益
- 输出结果能不能贴近真实临床工作流
如果这些问题没想清楚,多模态系统很容易只是一个看起来先进的实验。
如果这些问题想清楚了,它才有机会从单点模型,走向真正可用的 AI+医疗系统。
下一篇预告
顺着这一篇,下一篇最自然的主题就是:
AI+医疗实战:医疗报告生成怎么做事实约束,避免模型幻觉?
因为一旦进入"影像 + 文本"阶段,报告生成与事实一致性就是最关键的核心问题。