RPA-Python与pytest-clicksend集成:10步实现测试自动化完整指南
零基础搭建药物-靶标相互作用预测系统:BioGPT实战全流程指南
【免费下载链接】BioGPT 项目地址: https://gitcode.com/gh_mirrors/bi/BioGPT
你有没有遇到过这样的场景:手头有一篇刚上线的PubMed文献,你读完后心里清楚"这个化合物可能对某个靶点有抑制作用",但要把它整理成可检索、可量化的结构化数据,却要花费大量人工时间?药物-靶标相互作用(DTI)预测,正是药物研发流程中最耗时、最依赖专家经验的环节之一。微软开源的BioGPT,正是为这类生物医学文本挖掘任务打造的生成式预训练模型——它能把一篇摘要直接"翻译"成"XX inhibits YY"这样的结构化关系三元组,让文献筛选效率提升一个量级。本文面向有一定Python基础、但对NLP和模型微调还比较陌生的生物医学研究者与算法工程师,带你一步步从零跑通一个完整的DTI预测流水线。
先给自己定个目标:读完本文并跑完所有命令,你将拥有一套能对任意PubMed摘要输出药物-靶标关系三元组的可用系统。
先看清整体路线:六步通关清单
整个实战过程不需要你理解复杂的Transformer原理,只要按下面的路线图走,每一步都有看得见的产出物:
| 步骤 | 你要做的事 | 完成后的成果 |
|---|---|---|
| ① | 搭建运行环境 | 所有依赖安装成功,无报错 |
| ② | 获取KD-DTI数据集 | 拥有格式统一的原始训练数据 |
| ③ | 数据预处理 | 生成可供fairseq直接读取的二进制数据 |
| ④ | 下载预训练模型 | 拿到BioGPT基础权重 |
| ⑤ | 微调训练 | 产出专属的DTI预测模型 |
| ⑥ | 推理与评估 | 输出结构化预测结果与精确率指标 |
每一步都是下一步的基石,我们直接开工。
三步完成环境准备:从零到能跑通
BioGPT基于fairseq框架开发,对版本有严格要求,版本不一致是后续所有坑的源头。请你务必按以下顺序安装:
# 1. 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/bi/BioGPT
cd BioGPT
# 2. 安装fairseq 0.12.0(必须精确到该版本)
git clone https://github.com/pytorch/fairseq
cd fairseq
git checkout v0.12.0
pip install .
python setup.py build_ext --inplace
cd ..
# 3. 安装其余依赖
pip install sacremoses scikit-learn
除了这些,你还需要两个重要的外部工具:Moses(分词)和 fastBPE(字节对编码),它们负责把文本切分成模型能理解的最小单位。安装后别忘了把路径写入环境变量:
export MOSES=${PWD}/mosesdecoder
export FASTBPE=${PWD}/fastBPE
验证一下:在Python里执行 import fairseq; print(fairseq.__version__),能看到 0.12.0 就说明环境OK。
环境变量
MOSES和FASTBPE在后续预处理脚本中会被直接引用,建议把它们写进~/.bashrc,避免每次开终端都要重新export。
拿到药物-靶标训练数据:KD-DTI数据集入门
KD-DTI是目前使用最广泛的药物-靶标关系抽取基准数据集,它的每一条样本包含一篇文献的标题、摘要,以及人工标注的"药物-靶标-关系"三元组。你可以在项目目录的 data/KD-DTI/raw/ 下直接看到已经整理好的三份JSON文件:
train.json—— 训练集,模型学习的主要材料valid.json—— 验证集,用于监控训练过程中的效果test.json—— 测试集,最终评估用
打开任意一份,你能看到类似这样的结构:
{
"7761270": {
"title": "Beta-subunits co-determine the sensitivity...",
"abstract": "We have investigated the effect of ...",
"triples": [
{"drug": "...", "target": "...", "relation": "antagonist"}
]
}
}
这里 triples 就是我们的"标准答案"——模型要学习的就是如何从 title + abstract 中还原出这些关系。理解数据长什么样,比直接开跑更重要,因为后续所有预处理都是围绕这个格式展开的。
一条命令完成数据预处理:把文本变成模型的口粮
BioGPT不能直接读原始JSON,它需要的是经过分词、BPE编码、再二值化的数据。别慌,项目已经为你写好了全自动脚本,只需一条命令:
cd examples/RE-DTI
bash preprocess.sh
这个脚本内部自动完成了四件事,你可以对照着检查进度:
- 调用
rebuild_data.py,把JSON解析成relis_train.x / relis_train.y这样的源文-目标文对(.x是输入摘要,.y是期望输出的三元组文本) - 用Moses对两端文本做分词
- 用fastBPE套用
data/bpecodes做子词切分 - 调用
fairseq-preprocess,产出data/KD-DTI/relis-bin/目录下的二进制文件
验证方法:预处理结束后,检查 data/KD-DTI/relis-bin/ 下是否出现 train.x.bin、valid.x.bin、test.x.bin 等文件。出现即成功,你可以毫无顾虑地进入下一步。
模型从哪来:下载并摆放预训练权重
BioGPT提供了多个预训练版本,本教程用的是基础版BioGPT,它的权重解压后包含 model.pt 和 checkpoint.pt 等文件。下载后统一放进项目的 checkpoints/Pre-trained-BioGPT/ 目录:
mkdir checkpoints
# 将下载好的 Pre-trained-BioGPT.tgz 放入 checkpoints 后执行
cd checkpoints
tar -zxvf Pre-trained-BioGPT.tgz
目录结构对不对,决定训练能否启动。最终 checkpoints/Pre-trained-BioGPT/ 下应当直接看到 checkpoint.pt,不要多套一层同名文件夹,这是新手最容易踩的坑。
如果你只是想做快速验证,不想完整微调,可以直接下载项目提供的 RE-DTI-BioGPT 微调权重(
RE-DTI-BioGPT.tgz),解压到checkpoints/RE-DTI-BioGPT/后,跳过下一节的训练,直接进入"推理与评估"环节。这也是官方推荐的最快上手路径。
微调训练:让通用模型变成DTI专家
预训练模型只懂"生物医学语言",还不懂"如何输出三元组"。微调就是让它在你的任务数据上"补课"。训练同样是一键完成:
bash train.sh
训练脚本里有几个参数值得你关注,理解了它们,你就摸到了调优的门把手:
| 参数 | 含义 | 新手建议 |
|---|---|---|
--lr 1e-5 |
学习率,微调时宜小不宜大 | 保持默认 |
--max-epoch 30 |
最大训练轮数 | 数据量大时可适当调小 |
--learned-prompt 9 |
可学习的prompt长度 | 保持默认 |
--finetune-from-model |
指向预训练权重路径 | 确认路径正确 |
训练过程中,你会在终端看到每轮的loss变化。看到loss持续下降、且验证集上的指标在提升,就说明模型在真正学习。训练完成后,checkpoints/RE-DTI-BioGPT/ 目录下会生成多个epoch的checkpoint文件。
拿结果:训练结束后,项目还贴心提供了checkpoint平均脚本,它能把最近几个epoch的权重求平均,通常能带来更稳定的效果,这一步在推理脚本里会自动完成。
实战推理与评估:让模型回答你的问题
现在是检验成果的时刻。执行:
bash infer.sh
这个脚本会自动完成一条龙的推理流程:
- 对训练好的多个checkpoint求平均,生成
checkpoint_avg.pt - 调用
inference.py读取测试集,让模型逐条生成预测 - 去除BPE标记、还原分词(debpe + detok)
- 调用
postprocess.py从生成文本中解析出三元组 - 调用
hard_match_evaluation.py与标准答案比对,输出精确率指标
脚本最终会在 checkpoints/RE-DTI-BioGPT/ 下生成 .extracted.json 文件,每一行是一条预测三元组:
{"triple_list_pred": [{"subject": "...", "relation": "inhibits", "object": "..."}]}
看到这个文件,恭喜你——你的药物-靶标相互作用预测系统已经跑通了。
进阶技巧:不训练也能用,两种即用姿势
如果你不想走完整的训练流程,或者只想快速验证模型能力,BioGPT还给你准备了两种"开箱即用"的方式。
姿势一:直接用微调权重做预测。 下载 RE-DTI-BioGPT.tgz 解压到 checkpoints/RE-DTI-BioGPT/,然后单独调用推理脚本,把输入换成任意一段你感兴趣的生物医学文本即可。
姿势二:用Hugging Face生态调用。 BioGPT已经集成进 transformers 库,几十行代码就能做文本生成:
from transformers import pipeline, set_seed
from transformers import BioGptTokenizer, BioGptForCausalLM
tokenizer = BioGptTokenizer.from_pretrained("microsoft/biogpt")
model = BioGptForCausalLM.from_pretrained("microsoft/biogpt")
generator = pipeline("text-generation", model=model, tokenizer=tokenizer)
set_seed(42)
generator("COVID-19 is", max_length=20, num_return_sequences=5, do_sample=True)
这种方式适合做探索性实验、写Demo,或者不想依赖本地GPU环境的时候。
避坑指南:四个最容易翻车的环节
跑通这个项目后,我帮你把最容易踩的坑提前排掉:
- 版本不符,一切白搭。PyTorch 1.12.0、Python 3.10、fairseq 0.12.0是"铁三角",任何一项偏差都可能引发莫名其妙的报错。建议直接新建一个conda虚拟环境。
MOSES和FASTBPE环境变量缺失。预处理脚本会直接引用这两个变量,没设置会立刻报command not found。把export语句写进shell配置文件最稳妥。- checkpoint目录结构错误。
checkpoint.pt必须在checkpoints/Pre-trained-BioGPT/的直接子目录下,多套一层文件夹会导致from_pretrained找不到权重。 - 显存不足。训练时的
--max-tokens 1024和--update-freq 32组合较吃显存,如果你的GPU显存小于16G,可适当调小--max-tokens并同步调大--update-freq,保证batch总规模不变。
下一步:让系统真正为你所用
至此,你已经从零到一搭建起了一套完整的药物-靶标相互作用预测系统。接下来建议你做三件事:
- 用你自己的数据测试:把任意一篇摘要整理成KD-DTI的JSON格式,走一遍预处理和推理,看看模型输出是否合理;
- 尝试其他任务:BioGPT不止能做DTI,同仓库还提供了关系抽取(BC5CDR/DDI)、文档分类(HoC)、问答(PubMedQA)等完整示例,迁移成本极低;
- 深入模型内部:如果你想理解prompt机制是如何让生成模型学会输出结构化信息的,可以从项目最核心的源码入手——src/transformer_lm_prompt.py 定义了带可学习prompt的Transformer语言模型,src/language_model_prompt_dataset.py 负责把源文和目标文拼接成带prompt的训练样本,inference.py 则是推理入口。
想复现本文全部步骤,直接查看 examples/RE-DTI/ 下的脚本与说明即可。把文章里的每一步跑通,你就已经掌握了生物医学生成式AI最核心的落地技能——剩下的,就是用它去回答你自己的研究问题了。
【免费下载链接】BioGPT 项目地址: https://gitcode.com/gh_mirrors/bi/BioGPT
更多推荐



所有评论(0)