Delphi-2M用语言模型预测千种疾病
Delphi-2M实现千种疾病并发预测的核心在于其创新的模型架构设计、数据表示方法以及对传统语言模型的针对性改造。它并非对每种疾病分别建立独立模型,而是通过一个统一的生成式Transformer框架,将复杂的健康轨迹建模问题转化为一个序列预测任务,从而实现大规模、多病种的同步预测。以下是其关键实现机制:
1. 核心思想:将健康记录视为“语言”
Delphi-2M的根本突破在于借鉴了自然语言处理的思想,将个体的健康历程看作是由一系列“健康事件”构成的“句子”。
- 健康词汇表(Tokenization):模型构建了一个包含 1258个状态标记(tokens) 的“词汇表”。这些标记覆盖了:
- ICD-10顶级诊断码:代表各种疾病。
- 人口统计学与生活方式因子:如性别、吸烟状态、BMI类别等。
- 特殊状态:如“死亡”。
- 序列化表示:每个人的健康历史被转化为一个按时间顺序排列的token序列。例如:
[性别:男, 年龄:40, 诊断:高血压, 年龄:45, 诊断:糖尿病, 年龄:50, ...]。
通过这种方式,预测未来疾病就变成了“预测句子中下一个或后续的单词是什么”的语言模型问题。
2. 模型架构:基于GPT-2的针对性改造
Delphi-2M以GPT-2架构为基础,但进行了三项关键改造以适应医疗时序数据的特性:
| 改造维度 | 传统GPT-2处理文本的方式 | Delphi-2M的针对性改造 | 目的与优势 |
|---|---|---|---|
| 位置编码 | 使用离散的位置编码表示单词在句子中的顺序。 | 替换为基于正余弦函数的连续年龄编码(AgeEncoding)。 | 将绝对的“位置”信息转化为连续的“年龄”信息,使模型能精确理解事件发生的时间点,这是疾病预测的核心维度。 |
| 时间间隔建模 | 不具备显式的时间间隔预测能力。 | 新增指数等待时间模型。 | 不仅能预测“下一个是什么病”,还能预测“何时发生”,从而生成带有时间戳的未来健康轨迹。 |
| 注意力机制 | 标准的因果注意力掩码,确保当前位置只能关注之前的位置。 | 优化因果注意力掩码以处理同时段事件。 | 现实生活中,一个人可能在同一年被诊断出多种疾病。此优化允许模型正确处理同一时间点(如相同年龄)发生的多个并发事件,这对于共病建模至关重要。 |
这些改造使得模型(model.py 中的 Delphi 类)能够深度理解健康事件之间的复杂时序关系和依赖。
3. 训练与推理:从序列生成到概率预测
训练过程:
模型使用英国生物银行(UK Biobank)约40.2万参与者的纵向健康数据进行训练。训练目标是基于已知的历史健康事件序列,最大化地预测下一个事件(包括事件类型和发生时间)的概率。train.py 中的 Trainer 类负责协调这一过程。
并发预测的实现:
在推理阶段,当给定一个个体的历史健康记录后,Delphi-2M的“并发预测”能力通过以下步骤体现:
- 序列输入:将历史记录转化为token序列,并输入模型。
- 概率分布输出:模型的前向传播(
Delphi.forward())会为词汇表中的每一个可能的token(即每一种疾病、状态等)计算一个在下一个时间点发生的“概率”或“得分”。 - 生成未来轨迹:通过自回归的方式,模型可以迭代地预测下一个事件,然后将新事件加入历史序列,继续预测下下个事件,如此循环,从而“生成”一条跨越未来20年的虚拟健康轨迹。
- 风险提取:从生成的未来轨迹中,可以提取出在特定时间窗口内(例如未来5年、10年)发生某种特定疾病的累计概率。由于模型在一次前向传播中能为所有1258个token生成概率,因此本质上实现了对所有对应疾病(约1000种)的“并发”风险评估。
# 概念性伪代码,展示Delphi-2M并发预测的核心逻辑
import torch
# 假设已加载训练好的Delphi模型和预处理工具
from model import Delphi
from utils import get_batch, tokens_to_diseases
# 1. 准备单个患者的病史序列数据
# patient_history_tokens: 包含年龄、性别、既往诊断等token的序列
# 例如: [token_性别男, token_年龄40, token_高血压, token_年龄45]
patient_history = prepare_sequence(patient_ehr_data)
# 2. 模型前向传播,获取下一个时间点所有可能token的概率分布
# model: 训练好的Delphi-2M模型
with torch.no_grad():
logits, _ = model(patient_history) # logits形状: [序列长度, 词汇表大小]
next_step_probs = torch.softmax(logits[-1, :], dim=-1) # 取最后一个时间点的预测,得到概率分布
# 3. 并发风险解读:提取特定疾病的风险
# disease_token_ids: 一个列表,包含所有疾病对应的token ID
for disease_id in disease_token_ids:
risk_score = next_step_probs[disease_id].item()
disease_name = tokens_to_diseases[disease_id]
print(f"疾病 '{disease_name}' 在下一个时间点的发生风险为: {risk_score:.4f}")
# 4. 迭代生成未来轨迹(简化示意)
future_trajectory = patient_history.copy()
for year in range(20): # 模拟未来20年
# 预测下一年最可能发生的事件(可根据概率采样或取最大概率)
next_event_id = torch.argmax(next_step_probs).item()
next_event_age = calculate_next_age(...) # 结合等待时间模型
future_trajectory.append(next_event_id)
future_trajectory.append(token_for_age(next_event_age))
# 用更新后的序列继续预测下一步
# ... (重复步骤2-3)
注释:以上代码为概念演示,实际实现需参考 model.py 中的 Delphi 类前向传播和 sampling_trajectories.ipynb 中的采样逻辑。
4. 性能验证与可解释性
- 高性能验证:在外部丹麦人群(193万人)数据集中验证,其预测多种疾病的平均AUC(区分能力)达到0.76,其中死亡预测AUC高达0.97,证明了其强大的泛化能力。
- 可解释性分析:通过SHAP等可解释性AI技术,模型能够揭示疾病之间的影响关系。例如,分析显示消化道疾病会使胰腺癌风险升高19倍,而胰腺癌诊断会使后续死亡风险提升近万倍。这种分析不仅验证了模型的医学合理性,也提供了疾病进展机制的洞察。
应用场景与意义
Delphi-2M的并发预测能力使其在多个场景具有巨大潜力:
- 个性化健康管理:为个人提供未来多年的多维疾病风险地图,突出需要重点干预的高风险领域,实现精准预防。
- 临床决策支持:辅助医生全面评估患者未来的共病风险,优化治疗方案和随访计划。
- 公共卫生与科研:模拟人群疾病负担变化,评估不同干预措施(如戒烟、控糖)的长期健康收益。
总之,Delphi-2M通过将健康轨迹序列化、改造Transformer架构以融合时间医学特征、并利用生成式建模进行自回归预测,成功实现了对上千种疾病的并发、长期预测。它代表了AI医疗从单一病种、短期预测向全景式、终身健康轨迹建模的重要范式转变。
参考来源
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)