01|为什么我们要做这个实战课?
说实话,我刚入门药物靶点抽取那会儿,最头疼的事就是:翻了一堆论文,代码要么不公开,要么跑不起来。更别说把整套流程串成一条生产线。所以这门课的设计初衷很单纯——把PubMed文献里“化合物”和“靶向蛋白”之间的关系,从检索到训练再到评估,一条龙给你拆明白。
我见过太多人卡在“把论文PDF转成结构化三元组”这一步。你想想看,PubMed上光是摘要就有三千多万篇,人工读是不可能的。但机器读完,能不能吐出类似“阿司匹林→抑制→环氧合酶-1”这种关系?能。这就是我们要干的事。
1.1 课程背景:为什么是PubMed和药物靶点?
药物靶点关系抽取,说白了就是从生物医学文献里抽取出“哪个药,对哪个靶点,产生了什么效果(激活/抑制/结合…)”。PubMed是最大的免费生物医学数据库,每天新增几千条摘要。
我几年前给一家药企做内部工具,发现他们采购的第三方知识图谱更新太慢,很多新发现的靶向关系一两个月后才入库。当时就琢磨——能不能自己每天从新文献里自动抽出来? 这个想法,就是这门课的起点。
| 场景 | 痛点 | 课程对应模块 |
|---|---|---|
| 新药筛选 | 手动阅读大量文献,漏掉潜在靶点 | PubMed检索 + 关系抽取 |
| 知识库维护 | 依赖人工标注,更新周期长 | 自动抽取 + 验证 |
| 靶点验证 | 证据链不完整,需要多文献佐证 | 共指消解 + 聚合 |
1.2 学完这门课,你能做什么?
- 从PubMed官网或者API批量拉取指定疾病的文献摘要
- 对文献做分词、词形还原、实体识别(药物、基因、疾病)
- 用SOTA模型(比如基于BERT的fine-tune版本)抽取药物‑靶点关系
- 把结果存成结构化的三元组,可以直接喂给知识图谱
1.3 整体流程:我们这个管线长什么样?
我不想一上来就甩出一堆概念。先让你看一眼完整的pipeline,心里有个地图。下面这张图,就是我们未来30章要一步步搭起来的骨架。
你可能注意到了,这不是一条直线。右边NER做完之后,结果会回流到关系抽取模块;后处理阶段还会做共指消解和冲突检测。每一个环节我们都准备了可复用的代码,而不是概念演示。
1.4 技术栈一览
我习惯用Python + PyTorch打底,因为生物医学领域的预训练模型(BioBERT、PubMedBERT)正好都是PyTorch生态的。下面这个表是你这30章会用到的核心工具,我提前列出来,你心里有个底。
| 模块 | 工具/库 | 用途 |
|---|---|---|
| 文献获取 | Biopython (Entrez), Requests | PubMed E‑Utilities API封装 |
| 预处理 | SciSpacy + BioWordVec | 分词、断句、词形还原、嵌入 |
| 实体识别 | HuggingFace Transformers (BioBERT) | 药物/基因/疾病NER标注 |
| 关系抽取 | REBEL / SpERT / 自定义分类器 | 从实体对中抽取语义关系 |
| 评估 | scikit-learn, seqeval | 精确率、召回率、F1 |
| 数据存储 | JSON / SQLite / Neo4j (可选) | 结构化三元组持久化 |
1.5 你能得到什么,以及怎么跟课
每个章节都是“背景说明 → 代码实现 → 避坑总结”三段式。代码全部在Colab和本地双环境验证过。
我个人的建议:别只看不敲。哪怕第一遍完全照着抄,也比光读强。
- 第1-5章:PubMed API + 文本预处理,这是数据基础设施
- 第6-15章:NER + 序列标注,你会亲手训练一个生物医学NER模型
- 第16-25章:关系抽取主流方法(REBEL、SpERT、远程监督)
- 第26-30章:工程化落地,包括接口封装、Docker部署、持续抽取
嗯,大致就是这样。把地图摊开,咱们就可以出发了。