2. 知识图谱基础概念:实体、关系、属性与三元组
好,咱们正式开始干活之前,得先把地基打牢。
你想想看,知识图谱听起来很高大上,什么图数据库、语义网络、推理引擎... 但其实它的核心零件特别简单。说白了,就是几个基本概念拼起来的乐高积木。我刚开始接触知识图谱的时候,也觉得这东西玄乎,后来亲手搭了几个项目才发现,万变不离其宗。
今天这一章,我们就把这几个核心概念掰开揉碎了讲清楚。掌握了它们,你再看后面 COVID-19 药物图谱的搭建,就会觉得特别顺。
2.1 实体:图谱里的“主角”
实体,就是世界上的具体事物。一个人、一家公司、一种药、一个基因,只要是你想描述的对象,都可以叫实体。
在 COVID-19 这个场景里,实体很容易找。比如:
- 药物:瑞德西韦、帕昔洛韦、法匹拉韦
- 疾病:COVID-19、普通感冒
- 靶点:3CL蛋白酶、RNA聚合酶
- 基因:ACE2、TMPRSS2
每个实体在知识图谱里都有一个唯一ID。就像每个人都有身份证号,你不能重复。我在项目中遇到过不少初学者,直接用中文名称当ID,结果「新冠」和「新型冠状病毒肺炎」指代同一个东西,但在系统里被当成了两个实体。这可是个坑。
实际操练:构建图谱前,最好先列一个「实体类型清单」。比如药物、疾病、基因、临床试验... 给每个类型定一个编号前缀(如 DRUG_001, DISEASE_001),能省很多去重麻烦。
2.2 关系:实体之间的“纽带”
实体孤零零地放着没意义。它们必须通过关系连接起来,才能形成知识。
关系是有方向的。比如:
- 「瑞德西韦」治疗 「COVID-19」
- 「SARS-CoV-2」导致 「COVID-19」
- 「瑞德西韦」靶向 「RNA聚合酶」
我建议你一开始就把关系类型定义清楚。不要贪多,常用的就那几种:治疗、导致、靶向、属于、参与。我以前犯过一个错,把「靶向」和「抑制」混在一起用,结果后面做推理查询时,逻辑全乱了。
还一个容易忽略的点:关系可以带属性。比如「瑞德西韦 治疗 COVID-19」,这个关系可以加一个「证据等级」属性,值是「临床试验 III 期」。这样图谱就不只是一个结构,而是一张带权重的信息网。
2.3 属性:实体的“特征”
属性是用来描述实体的。实体是“谁”,属性就是“它有什么特点”。
拿「瑞德西韦」举例:
实体ID: DRUG_001
名称: 瑞德西韦
化学式: C27H35N6O8P
分子量: 602.58 g/mol
作用机制: RNA聚合酶抑制剂
获批状态: 已批准
看到没?这些特征都是属性。注意,属性没方向,它只是贴在实体上的键值对。
注意区分:属性 vs 关系
- 属性:描述实体本身特征,比如颜色、重量、批准日期
- 关系:连接两个不同实体,比如A治疗B、A靶向B
这个界限有时会模糊。我的经验是:如果这个信息指向另一个实体,它就是关系;如果只是实体自身的描述,就是属性。
2.4 三元组:知识的最小单元
好了,前三个概念合在一起,就构成了知识图谱最核心的构成单元——三元组。
三元组的结构特别简单:
(头实体, 关系, 尾实体)
比如:
(瑞德西韦, 治疗, COVID-19)
(COVID-19, 由引起, SARS-CoV-2)
(SARS-CoV-2, 入侵, ACE2受体)
一批三元组连在一起,就变成了一张网。每个实体是节点,关系是连线。就这么简单。
我遇到过一个真实案例:一个药物图谱项目,从文献里抽了 200 多万个三元组。但质量很差,因为很多三元组里的实体名称不一致。后来我们花了两周做实体对齐,把「COVID-19」「2019-nCoV」「新冠病毒」统一成一个ID。这个活儿特别脏,但是绕不开。
2.5 小结与对比表格
我觉得一个表格可以帮你把这几个概念一眼看透:
| 概念 | 定义 | 示例 | 是否带方向 |
|---|---|---|---|
| 实体 | 世界上的具体事物 | 瑞德西韦、COVID-19、ACE2 | 无方向 |
| 关系 | 实体之间的语义连接 | 治疗、靶向、导致 | 有方向 |
| 属性 | 实体的特征描述 | 分子量、获批状态、颜色 | 无方向,附属 |
| 三元组 | 头实体→关系→尾实体 | (瑞德西韦, 治疗, COVID-19) | 复合结构 |
2.6 知识图谱的核心结构图
下面这张图,我把核心概念和它们的关系画出来了。你重点关注实体怎么通过关系连成网,属性怎么附着在实体上。
这张图里,蓝色的「头实体」通过红色的「关系」连接到绿色的「尾实体」,形成一个三元组。紫色的「属性」用虚线挂接到实体上。橙色的「更多实体」表示这个结构可以不断延伸,最终形成一张复杂的知识网络。
一句话总结:知识图谱就是把「张三认识李四」「李四住北京」这种咱们平时说话的方式,翻译成计算机能读懂的 (实体, 关系, 实体) 格式。你平时泡的微博、知乎,底层也是这么存的。