3. 药物与靶点基础:作用机制、靶点类型、药物-靶点关系
做知识图谱时,我最头疼的就是关系定义不清晰。后来发现,只要把「药物怎么作用于靶点」这件事理清楚,图谱的骨架就有了。说白了,药物靶点知识图谱的核心就三件事:药物、靶点、以及它们之间的关系。这一章我们就围绕这三块展开,把我踩过的坑和一些实操习惯一并分享。
3.1 药物作用机制——药物凭什么有效
药物进入人体后,不会凭空起效。它总要找个对象“交流”,这个对象就是靶点。交流的方式,就是作用机制。嗯,你可以把它理解成一把钥匙(药物)和一把锁(靶点)的匹配过程。
我在项目中遇到过最典型的坑:把作用机制和靶点类型混在一起。比如有人说“阿司匹林是COX抑制剂”,这没错,但“抑制剂”只是作用机制的一个子集。实际建模时,你需要区分得更细。
常见的作用机制可以归纳为以下几类:
- 激动剂:药物结合后激活靶点,让靶点的信号增强。比如多巴胺受体激动剂治疗帕金森病。
- 拮抗剂:药物结合后阻断靶点,不让天然配体激活它。比如β受体阻滞剂降血压。
- 别构调节:药物结合在靶点的非活性位点,改变靶点构象,从而调节活性。这种机制最近很火,叫“别构调节剂”。
- 共价结合:药物与靶点形成共价键,通常不可逆。比如阿司匹林乙酰化COX-1,属于“自杀式抑制”。
- 变构效应:与别构类似但强调构象改变后的长期效应。
我曾经在构建知识图谱时,只定义了“激活”和“抑制”两种关系,结果后面发现很多药物既有激活也有抑制,甚至在不同浓度下作用反转。后来我改成了用“mechanism_type”属性加枚举值,这才把问题解决。
3.2 靶点类型——锁的家族
靶点本身也有分类。你想想看,锁有挂锁、密码锁、指纹锁,靶点也有不同的结构和功能家族。搞不清类型,图谱里的边就容易画错。
我列了个常用对照表,你建模时可以照搬:
| 靶点类型 | 典型结构 | 药物作用方式 | 经典例子 |
|---|---|---|---|
| 受体 | 跨膜蛋白,有胞外结构域 | 激动、拮抗、别构调节 | β2肾上腺素受体(支气管扩张药) |
| 酶 | 可溶或膜结合蛋白,有活性位点 | 抑制剂、底物类似物、共价修饰 | 环氧合酶(COX)被阿司匹林抑制 |
| 离子通道 | 跨膜孔道,有门控机制 | 阻断剂、开放剂、调节剂 | 钠离子通道阻断剂(局部麻醉药) |
| 转运体 | 跨膜泵或通道 | 抑制剂、底物置换 | SGLT2抑制剂(降血糖药) |
| 核酸 | DNA或RNA序列 | 嵌入、烷化、干扰转录 | 顺铂与DNA交联(抗癌) |
| 免疫检查点 | 膜蛋白(如PD-1/PD-L1) | 抗体阻断、融合蛋白竞争 | 帕博利珠单抗(PD-1抑制剂) |
这里有件事要特别注意:很多靶点会同时属于多个类型。比如G蛋白偶联受体既是受体,也是酶的激活者。建模时最好用多重类型标签,或者通过“subtype_of”关系层级化处理。我习惯给靶点加一个“type”属性数组,而不是单一值。
3.3 药物-靶点关系——边上的学问
关系是知识图谱的灵魂。只告诉用户“这个药和这个靶点有关联”是不够的,得说明怎么关联。我一般把关系拆成两个维度:
- 结合维度:亲和力(Ki, Kd, IC50)、选择性(是否也结合其他靶点)、结合模式(可逆/不可逆、竞争/非竞争)。
- 效应维度:功能效应(激活/抑制/调节)、效应强度(EC50, Emax)、时效(起效速度、持续时间)。
在实际知识图谱里,我通常会设计成:
drug:aspirin --drug:targets--> target:COX1
└─ drug:affinity "Ki = 10 nM"
└─ drug:mechanism_type "irreversible inhibitor"
└─ drug:selectivity "high (selective for COX-1 over COX-2)"
你看,这比单纯画一条边丰富多了。但也不要过度设计——我最初给每条边加了20个属性,结果查询效率惨不忍睹。后来我把常用属性(mechanism_type, affinity)留在边属性上,其他放在靶点或药物的节点属性里,加载时再关联。
Drug → InteractionEvent → Target,并且InteractionEvent节点上挂载结合参数和效应参数。这样查询“所有IC50小于100nM的相互作用”就很容易了。
3.4 知识图谱视角下的药物-靶点框架
把上面的知识点串起来,你可以看到一个清晰的框架:药物节点通过“作用机制”边连接到靶点节点,靶点节点再通过“类型”边连接到靶点类型节点。下面这张SVG图展示了核心关系:
这张图里,“作用机制”作为独立的桥梁节点,把药物和靶点连接起来。靶点类型和功能效应作为附属节点,提供分类信息。你构建知识图谱时,可以照这个骨架扩展。
:Aspirin rdf:type :Drug ; :hasMechanism :IrreversibleCOXInhibition .
:IrreversibleCOXInhibition rdf:type :Mechanism ; :targets :COX1 .
:COX1 rdf:type :Enzyme ; :hasEffect :Inhibition .
:Inhibition rdf:type :FunctionalEffect .
如果是属性图模型(Neo4j),建议把mechanism_type作为关系类型,比如(Drug)-[:IRREVERSIBLY_INHIBITS]->(Target),但需要小心关系类型的数量爆炸。我一般采用带属性的关系,关系类型用通用的TARGETS,然后属性里写mechanism_type。
3.5 实操建议:从教科书数据开始
刚上手时别急着搞大规模数据。我建议你挑一本药理学的经典教材,随便找20个有明确药物-靶点关系的例子(阿司匹林-COX1,沙丁胺醇-β2受体,依那普利-ACE,他莫昔芬-雌激素受体……),手动建模。你会发现很多细节问题,比如“同一药物可能作用于多个靶点”“同一靶点可被多个药物结合”“作用机制随时间推移会变”等等。
我曾经用Excel做第一批示例,列了30行数据,然后手工画图谱。画到第15个药物时,发现“机制类型”列里出现了空白,一查发现那个药其实有多个机制,但我只填了一个。从那以后,我规定每个药物-靶点关系必须至少有一个机制类型,不能留空。
总结一下本章的核心:你能把药物、靶点、作用机制、靶点类型、功能效应这五个要素的节点和边理清楚,知识图谱的底层就稳了。剩下的就是往里边填充细节——亲和力、选择性、参考文献、时间戳……但框架不变。你想想看,是不是比一开始想的简单多了?