DDI-GPT可解释性核心揭秘:Interpreter信息损失算法与token重要性可视化原理
【免费下载链接】ddigpt项目地址: https://gitcode.com/gh_mirrors/dd/ddigpt
DDI-GPT 是一个基于大语言模型(GPT-2)+ 知识图谱(KG)的药物-药物相互作用(DDI)预测框架。它不仅能给出"会相互作用 / 不会相互作用"的判断,还能通过内置的 Interpreter 模块,用信息损失(information loss)算法量化每个 token 对预测的贡献,并以token 重要性热力图直观呈现。本文面向新手,带你无需机器学习背景也能看懂地拆解这套可解释性方案。
什么是 DDI-GPT:预测与解释"二合一" 🎯
传统药物相互作用预测模型是"黑箱":只给结论,不给理由。DDI-GPT 的解法是把高质量生物医学知识图谱特征"翻译"成语言模型能读懂的输入,先预测,再用可解释性算法回答"模型到底在看哪些词"。
整体流程分四步:① 把药物-蛋白/副作用关系渲染成关系网络;② 提供两种药物在 PPI 网络间的最短路径;③ 用 KG 构造输入文本进行预测;④ 提供带token 重要性分数的可解释 AI 工具。

项目功能入口一览:
- 网络可视化页面:
pages/1_1️⃣_Visualize Interactions.py - 预测与可解释性页面:
pages/2_2️⃣_Submit a Job.py - 信息损失算法核心:
Interpreter.py - 本地运行入口:
Introduction.py(执行streamlit run Introduction.py启动)
输入构造:把两个 DrugBank ID 变成一句"知识句" 🧬
在 "Submit a Job" 页面,你只需输入两个 DrugBank ID(如DB00343、DB01268),DDI-GPT 会先查dict/目录下的四个知识字典,把药物的生物医学特征拼成一句结构化文本:
uqcomb_dpwy_dict.p:药物 → 信号通路(pathway)uqcomb_dg_tg_dict.p:药物 → 靶点基因(target)uqcomb_dg_trans_dict.p:药物 → 转运体(transporter)uqcomb_dg_enzy_dict.p:药物 → 酶(enzyme)
拼接后形如Drug_is DB00343 pathway_is KEGG:map04976 ... target_is HGNC:1390 ... Drug_is DB01268 ...,送入 GPT-2 序列分类头做二分类。这句话正是后续解释的前提:句中每个词的重要性都可以被单独量化。

Interpreter 信息损失算法:给每个 token 算一个"扰动容忍度" 🔍
可解释性核心就在Interpreter.py中,它的思想非常直观——对每个词回答一个问题:
"把这个词的词嵌入加多大尺度的噪声,模型的预测都不会变?"
损失函数直觉:两个相反方向的力
算法为每个 token 学习一个独立的噪声强度 σ,损失函数由两个力拔河决定:
L(σ) = ‖Φ(x+ε) − Φ(x)‖² / reg² − rate·log(σ)
- 第一项(保真力):嵌入 x 加了噪声 ε 后,模型输出 Φ 不能变太多 → 想把 σ压低;
- 第二项(熵力):让 σ 尽量大 → 想把 σ抬高。
两边平衡后得到的 σ,就是该词在不影响预测的前提下能"承受"的最大扰动。σ 越大说明模型越不依赖这个词;σ 越小说明预测对它越敏感——它就是决策的关键。
重参数化技巧:让噪声变得可学习
高斯噪声本身无法直接优化,代码采用重参数化技巧:ε = scale × ratio × noise。其中 noise 是标准高斯随机数,ratio 是被 sigmoid 约束在 (0,1) 的可学习参数,于是 σ = ratio × scale。
关键超参数(见Interpreter.py注释):
scale:σ 的上限,演示中取词嵌入权重标准差的 10 倍;rate:平衡"输出稳定"与"信息损失"的比例,越大整体信息损失越大;calculate_regularization():用采样输入估计输出方差做归一化,保证不同维度上的差异可公平比较。
网页演示里为响应速度只跑了 5 次迭代(interpreter.optimize(iteration=5));在研究场景可放大到数千次迭代获得更精确的 σ。
官方架构图中 "e. Model Explanation" 面板就是该模块的产物——把重要基因/token 的贡献画成柱状图。
token 重要性可视化:如何读懂热力图 📊
拿到 token 级 σ 后,页面代码(pages/2_2️⃣_Submit a Job.py)做两步处理:
- token → 词聚合:GPT-2 分词器常把一个词切成多个子 token,代码把同一词的所有子 token 的 σ求和,得到词级重要性;
- 热力图渲染:用 matplotlib 的
GnBu_r色阶画一维热力图,每个格子对应输入句中的一个词。
读图口诀:颜色越深,σ 越小,该词对预测越重要。浅色则说明这个词"容忍"较大扰动,贡献较弱。

在这个实例中,两个药物 ID(DB00343、DB01268)和若干靶点基因颜色最深——说明模型主要依据"是哪两种药"及其靶点做判断,而部分通路词颜色偏浅。这正是可解释性的价值:不只给结论,还告诉你"为什么"。
快速上手:体验 DDI-GPT 可解释性的最快路径 ⚡
- 获取代码:
git clone https://gitcode.com/gh_mirrors/dd/ddigpt - 安装依赖:
pip install -r requirements.txt - 启动 Web 服务:
streamlit run Introduction.py - 在 "Submit a Job" 页输入两个 DrugBank ID → 点 Predict → 点Measure token importance即可得到热力图。
搭配 "Visualize Interactions" 页面,可以按药物名浏览药物-蛋白-副作用网络、查看两药间的最短路径,用来交叉验证热力图中被判为"重要"的基因是否真有生物学意义:

总结
| 模块 | 文件路径 | 一句话说明 |
|---|---|---|
| 信息损失算法 | Interpreter.py | 为每个 token 学习最大"扰动容忍度" σ |
| token 重要性可视化 | pages/2_2️⃣_Submit a Job.py | 子 token 聚合后绘制词级热力图 |
| KG 知识句构造 | dict/下四个字典 | 查通路、靶点、转运体、酶四类关系 |
| 相互作用网络浏览 | pages/1_1️⃣_Visualize Interactions.py | 药物间最短路径与 2-hop 探索 |
一句话概括 DDI-GPT 的可解释性本质:让模型自己告诉你"哪些词可以放心扰动,哪些词绝不能动"——前者是噪声,后者就是它下判断的依据。
【免费下载链接】ddigpt项目地址: https://gitcode.com/gh_mirrors/dd/ddigpt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考