3. 证据结构化与本体建模

在靶点证据整合工程中,真正棘手的往往不是“找不到证据”,而是证据以极不统一的形态散落在文献正文、临床试验登记、专利、组学附表、数据库导出和内部实验记录中。要让这些证据参与打分、排序和决策,必须先完成一次“语义翻译”:把自然语言或半结构化字段,映射为机器可查询、可推理、可追溯的实体—关系—属性三元组。本节讨论的就是这一映射过程的设计方法与落地细节。

一、为什么需要本体,而不是一张宽表

最朴素的做法是把所有证据塞进一张宽表:一行代表一条证据,列包括靶点、疾病、证据类型、来源、强度、方向等。这种做法在证据量小、来源单一时可行,但很快会遇到三个问题。第一,同一概念有多种写法,例如“TNF-α”“TNF alpha”“肿瘤坏死因子α”指向同一蛋白,宽表无法自动归一。第二,证据之间的关系不是扁平的,一条“遗传关联”证据可能同时支持某个靶点与某疾病,又通过通路间接关联另一疾病,宽表难以表达这种多层关系。第三,不同证据类型的属性差异很大,临床试验证据有期别、入组人数、主要终点,而GWAS证据有p值、效应量、样本量,强行合并会导致大量空列。

本体建模的核心思路是:先定义领域内稳定的“类”和“关系”,再让每条证据作为实例挂载到这些类与关系上。这样,证据的异构性被结构吸收,查询和推理则基于统一的语义层进行。

二、核心实体与关系的定义

针对靶点—疾病—证据这一场景,最小可用本体通常包含以下实体类:Target(靶点,如基因、蛋白、蛋白复合物)、Disease(疾病,可细分为适应症、亚型)、Evidence(证据条目)、Source(来源,如文献、试验、数据库)、Study(研究或试验本身)、Variant(变异)、Pathway(通路)、Drug(药物或化合物)。关系则包括:Target—associated_with—Disease、Evidence—supports—Association、Evidence—derived_from—Source、Drug—targets—Target、Variant—in_gene—Target、Target—participates_in—Pathway等。

这里的关键设计决策是:把“关联”本身也作为一等实体,而不是仅仅作为靶点与疾病之间的一条边。因为同一条靶点—疾病关联可能被多条证据支持,每条证据又有自己的方向(支持/反对)、强度、置信度和上下文。将关联实体化后,证据可以逐条挂载,评分时再聚合。

靶点—疾病—证据本体映射示意 实体类用圆角矩形,关系用带标签箭头;Evidence 与 Association 分离,支持逐条挂载与聚合 Target 基因 / 蛋白 / 复合物 Disease 适应症 / 亚型 Association 靶点—疾病关联(一等实体) Evidence 方向 / 强度 / 置信度 / 上下文 Source 文献 / 试验 / 数据库 Study 试验 / 队列 / 研究 Variant SNP / 突变 / 拷贝数 Pathway 信号通路 / 代谢通路 Drug 化合物 / 生物药 has_association to_disease supports / refutes derived_from reported_in in_gene participates_in targets implicated_in 实体关系 间接/推断关系 证据实例 关联实体 每条 Evidence 可挂载方向、强度、置信度等属性

三、从非结构化文本到三元组:抽取与归一

非结构化证据的典型来源是文献摘要或全文。假设我们从一篇摘要中读到:“In a cohort of 1,204 patients, the rs123456 variant in GENE-X was associated with a 1.35-fold increased risk of Disease-Y (p = 3.2e-8).” 这条句子需要被拆解为:

Variant(rs123456) --in_gene--> Target(GENE-X)
Target(GENE-X) --has_association--> Association(A1)
Association(A1) --to_disease--> Disease(Disease-Y)
Evidence(E1) --supports--> Association(A1)
Evidence(E1) --derived_from--> Source(PMID:xxxxxxx)
Evidence(E1).direction = "risk"
Evidence(E1).effect_size = 1.35
Evidence(E1).p_value = 3.2e-8
Evidence(E1).sample_size = 1204
Evidence(E1).evidence_type = "genetic_association"

抽取环节通常采用“规则+模型”的混合策略。规则层负责识别变异标识(如rs号)、基因符号、疾病名称和统计量模式;模型层负责处理句式变体和隐含关系。抽取完成后,必须进行实体归一:把“GENE-X”映射到HGNC标准符号,把“Disease-Y”映射到MONDO或ICD编码,把“rs123456”映射到dbSNP。归一化是保证后续可计算的关键,否则同一实体的不同写法会被当成不同对象,导致证据分散。

四、半结构化证据的字段映射

半结构化证据常见于临床试验登记、专利和数据库导出。以一条临床试验记录为例,其字段可能包括:NCT号、干预措施、靶点、适应症、期别、状态、入组人数、主要终点、结果摘要。映射时,需要把“干预措施”解析为Drug实体,把“靶点”解析为Target实体,把“适应症”解析为Disease实体,把“期别”“入组人数”“主要终点”作为Study和Evidence的属性。这里的一个实用原则是:能结构化的字段直接映射为属性,不能结构化的文本进入抽取流程。例如“结果摘要”是自由文本,需要进一步抽取“是否达到主要终点”“不良事件发生率”等结构化结论。

映射时建议保留原始字段的“溯源指针”,即每条结构化属性都能回指到原始记录的行号或字段名。这样在后续发现映射错误时,可以快速定位并修正,而不是重新全量处理。

五、证据属性的统一建模

不同证据类型的属性差异很大,但为了聚合评分,需要抽取一组公共属性。建议至少包含:evidence_type(遗传关联、表达差异、通路成员、动物模型、临床试验、专利等)、direction(支持/反对/中性)、strength(效应量或定性强度)、confidence(置信度,可由样本量、p值、研究设计等计算)、context(物种、组织、细胞类型、剂量等)。对于无法直接比较的强度指标,可以在映射时转换为统一的序数等级或归一化分数,但必须记录转换规则,保证可复现。

六、一个可执行的最小映射模板

下面给出一个可直接用于工程落地的证据映射模板,字段可根据实际数据源增减。该模板以“一条证据一行”的方式组织,但每行都携带实体标识和关系类型,便于后续导入图数据库或三元组存储。

字段 说明 示例
evidence_id 证据唯一标识 E1
target_id 靶点标准标识 HGNC:1234
disease_id 疾病标准标识 MONDO:0005678
association_id 关联实体标识 A1
evidence_type 证据类型 genetic_association
direction 支持方向 risk
effect_size 效应量 1.35
p_value 显著性 3.2e-8
sample_size 样本量 1204
source_id 来源标识 PMID:xxxxxxx
source_type 来源类型 literature
context 上下文 human; blood; cohort

七、映射质量的控制点

映射完成后,不能直接进入评分,需要先做一轮质量检查。检查点包括:实体归一覆盖率(未映射到标准标识的实体比例)、关系完整性(每条证据是否至少关联一个靶点和一个疾病)、属性缺失率(关键属性如direction、evidence_type是否为空)、方向一致性(同一关联下是否存在方向冲突的证据)。对于冲突证据,不应简单丢弃,而应保留并在评分时按置信度加权,因为冲突本身也是决策信息。

常见错误是把“证据来源”和“证据本身”混为一谈。例如把“某数据库收录了该关联”直接当作一条证据,而不区分数据库是二次聚合来源还是原始研究来源。建议在Source实体中增加source_level属性,区分原始研究、系统综述、数据库聚合,避免重复计数。

完成上述映射后,靶点—疾病—证据就不再是一堆散落的文本,而是一个可查询、可聚合、可追溯的语义网络。后续的评分、排序和决策,都可以在这个网络上以查询和推理的方式实现,而不是依赖人工逐条阅读。这也是证据整合工程从“文档管理”走向“知识计算”的关键一步。