2. 肝毒性(Hepatotoxicity)简介
咱们这个课程的目标是建个深度学习模型来预测肝毒性。那首先得搞清楚,肝毒性到底是个啥玩意儿?我见过不少同学,代码写得贼溜,但对问题的定义模模糊糊,结果模型建出来,方向根本不对。所以咱们花点时间,把肝毒性的底子打扎实。
2.1 什么是肝毒性?
肝毒性,说白了就是化学物质对肝脏造成的损伤。在咱们新药研发领域,它特指候选药物分子或其代谢产物,对肝细胞产生的直接或间接伤害。这玩意儿是药物研发后期失败的重要原因之一,甚至导致已上市的药物被召回。
我工作那会儿就碰到过一个案子,一个明星候选化合物,动物实验里效果惊人,结果一到临床,在几个病人身上引发了严重的肝损伤。项目直接停摆,几千万美金打了水漂。从那以后,我对肝毒性预测的重视程度,直接拉满。
肝毒性的表现形式很多样,可以简单分为以下几类:
| 类型 | 举例 | 核心特征 |
|---|---|---|
| 肝细胞损伤型 | 对乙酰氨基酚中毒 | ALT/AST 显著升高,肝细胞坏死 |
| 胆汁淤积型 | 氯丙嗪 | ALP、γ-GT 升高,胆汁排泄受阻 |
| 混合型 | 异烟肼 | 同时具备上述两类特征 |
| 脂肪变性型 | 四环素大剂量使用 | 肝细胞内甘油三酯蓄积 |
| 自身免疫样肝损伤 | 肼屈嗪 | 免疫介导,伴有自身抗体产生 |
你想想看,光看这个表格就知道,肝毒性不是一个单一指标能描述的。它的临床表现在、分子机制都各有不同。所以,想用一个简单的模型去概括所有肝毒性风险,那就是缘木求鱼。
2.2 为什么要在这个课程里关注它?
原因很简单——肝毒性是 ADMET 预测中最受关注的属性,没有之一。
- 临床前预测价值高:如果能早期筛出肝毒性分子,能极大节省后期动物实验和临床研究的成本。
- 数据集相对成熟:像 Tox21、ToxCast、FDA 的 FAERS 数据库,都为模型训练提供丰富的标注数据。我记得在一篇 2018 年的研究里,他们整理了一个覆盖几千个化合物的 Gold standard 数据集,这就是我们建模的第一桶金。
- 挑战性十足:肝毒性的机制复杂,不同物种间肝代谢差异巨大,单一描述符很难捕捉到所有风险点。这就给深度学习模型留下了发挥空间。
嗯,这里要注意。虽然是挑战,但正因为复杂,才需要深度学习这种高容量模型去拟合。我们后面会看到,CNN、GNN 乃至 Transformer,都在肝毒性预测上大展拳脚。
2.3 肝毒性预测的输入数据
做深度学习预测,第一步是定义输入输出。对于肝毒性,输入通常是 分子的结构化数据。输出是 二分类或多分类标签。
2.3.1 输入:分子的表示
目前主流的有三种:
- 分子指纹 (Molecular Fingerprints):比如 ECFP (Extended Connectivity Fingerprint),它把分子结构编码成一个固定长度的 bit 向量。特征是生成速度快,但丢失了部分原子邻域信息。
- 图结构 (Molecular Graph):将原子看作节点,化学键看作边。GNN (Graph Neural Networks) 可以直接在此基础上学习。
- 语言模型序列 (SMILES):把分子结构写成字符串 (例如 `CC(=O)OC1=CC=CC=C1C(=O)O` 是阿司匹林)。用 RNN 或 Transformer 来做序列建模。
我个人习惯在图结构上用得多一些,因为它最直观地反映了分子拓扑。但在项目中我发现,单一表示法往往不够鲁棒。比如指纹法容易造成过拟合,而图法对稀疏数据不友好。我曾经尝试将分子指纹和扩展坐标图拼接起来作为输入,虽然模型复杂了一些,但泛化能力提升明显。
2.3.2 输出:肝毒性标签的获取
标签的质量直接决定模型的上限。常见的标签来源:
- in vivo 临床前数据:大鼠或犬的重复给药毒性试验。权威性好,但成本高,样本量小。
- 临床数据:FDA 的不良事件报告系统 (FAERS)。信息多,但噪音大,混杂因素多。
- in vitro 数据:比如 HepaRG 细胞株的毒性测试。通量高,可重复,但与体内真实情况有差异。
我举一个实际的文件结构例子,方便你理解数据准备阶段:
project_root/
├── data/
│ ├── raw/
│ │ ├── tox21_train.csv
│ │ ├── tox21_test.csv
│ │ └── metadata.xlsx
│ ├── processed/
│ │ ├── X_ecfp4.npy
│ │ ├── X_graphs.pkl
│ │ └── y_labels.npy
│ └── splits/
│ └── fold_0.json
├── models/
├── training/
└── inference.py
你看到了吗?数据整理阶段就得这么严谨。后面所有模型的成败,都取决于这个阶段工作做得扎实不扎实。
2.4 肝毒性预测面临的结构化挑战
咱们用深度学习去预测,不是简单的“分类”二字。有几个结构上的问题得先搞清楚:
肝毒性包含多个机制,如线粒体损伤、氧化应激、胆汁酸稳态破坏等。是应该训练一个多任务模型同时预测所有机制,还是为每个机制训练一个特定模型?
我个人经验是:如果数据足够(每个机制有几千个样本),多任务模型往往更好,因为它能共享不同机制之间的共性特征。反之,如果数据稀缺,单任务模型反而更鲁棒。
公开数据集中,肝毒性阳性样本通常远少于阴性样本(比如1:10)。这会导致模型倾向于将所有分子预测为“安全”,从而漏掉真正的风险分子。
解决思路:过采样少数类、使用加权损失函数、或者收集外部阳性样本进行数据增强。
如果你的 y 标签中,阳性样本占比不到 10%,直接使用交叉熵损失很容易训练出一个“全否定”模型。我当初在某个项目上踩过这个坑,模型在测试集上准确率95%,结果一看,全是负类。千万记得检查数据分布,必要时使用 Focal Loss 或加权交叉熵。
2.5 本章小结与核心思考
肝毒性不是一个单一疾病,而是一系列肝损伤机制的统称。正是这种复杂性,让它成为深度学习模型大展身手的舞台。我们从数据表示方式、标签来源、到训练策略的结构化挑战,都有了全局的认识。有了这个基础,后面我们才能从容地构建和优化模型。