零基础搭建药物-靶标相互作用预测系统:BioGPT实战全流程指南

【免费下载链接】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。

环境变量 MOSESFASTBPE 在后续预处理脚本中会被直接引用,建议把它们写进 ~/.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

这个脚本内部自动完成了四件事,你可以对照着检查进度:

  1. 调用 rebuild_data.py,把JSON解析成 relis_train.x / relis_train.y 这样的源文-目标文对(.x 是输入摘要,.y 是期望输出的三元组文本)
  2. 用Moses对两端文本做分词
  3. 用fastBPE套用 data/bpecodes 做子词切分
  4. 调用 fairseq-preprocess,产出 data/KD-DTI/relis-bin/ 目录下的二进制文件

验证方法:预处理结束后,检查 data/KD-DTI/relis-bin/ 下是否出现 train.x.binvalid.x.bintest.x.bin 等文件。出现即成功,你可以毫无顾虑地进入下一步。

模型从哪来:下载并摆放预训练权重

BioGPT提供了多个预训练版本,本教程用的是基础版BioGPT,它的权重解压后包含 model.ptcheckpoint.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

这个脚本会自动完成一条龙的推理流程:

  1. 对训练好的多个checkpoint求平均,生成 checkpoint_avg.pt
  2. 调用 inference.py 读取测试集,让模型逐条生成预测
  3. 去除BPE标记、还原分词(debpe + detok)
  4. 调用 postprocess.py 从生成文本中解析出三元组
  5. 调用 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虚拟环境。
  • MOSESFASTBPE 环境变量缺失。预处理脚本会直接引用这两个变量,没设置会立刻报 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总规模不变。

下一步:让系统真正为你所用

至此,你已经从零到一搭建起了一套完整的药物-靶标相互作用预测系统。接下来建议你做三件事:

  1. 用你自己的数据测试:把任意一篇摘要整理成KD-DTI的JSON格式,走一遍预处理和推理,看看模型输出是否合理;
  2. 尝试其他任务:BioGPT不止能做DTI,同仓库还提供了关系抽取(BC5CDR/DDI)、文档分类(HoC)、问答(PubMedQA)等完整示例,迁移成本极低;
  3. 深入模型内部:如果你想理解prompt机制是如何让生成模型学会输出结构化信息的,可以从项目最核心的源码入手——src/transformer_lm_prompt.py 定义了带可学习prompt的Transformer语言模型,src/language_model_prompt_dataset.py 负责把源文和目标文拼接成带prompt的训练样本,inference.py 则是推理入口。

想复现本文全部步骤,直接查看 examples/RE-DTI/ 下的脚本与说明即可。把文章里的每一步跑通,你就已经掌握了生物医学生成式AI最核心的落地技能——剩下的,就是用它去回答你自己的研究问题了。

【免费下载链接】BioGPT 【免费下载链接】BioGPT 项目地址: https://gitcode.com/gh_mirrors/bi/BioGPT

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐