Skip to content

实验题目:生物医学知识图谱探索与应用

1. 实验背景与总体目标

在实验 1 中,我们掌握了如何利用 AI 将非结构化文献转化为结构化的研究事件数据。但在真实的临床与科研场景中,被大家所公认的生物医学知识往往存在于更宏大的知识图谱(Knowledge Graph,KG)中。

Hetionet 是一个集成基因、疾病、症状、化合物和组织等多种实体的公开知识图谱。本实验要求大家借助 AI 编写 Python 函数,利用列表和元组等 Python 基础数据类型高效管理图谱路径,实现:

  1. 图谱数据的加载与筛选
  2. 药物 - 基因 - 疾病的多跳路径搜索
  3. 寻找尚未被广泛报道的"新疗法"路径
  4. 实现支持中文输入且具备推理能力的智能体

2. 实验流程与任务分解

阶段一:基于函数抽象的知识图谱加载与预处理

任务描述: Hetionet 规模较大,直接加载会占用大量内存。本阶段要求编写高通用性的加载函数,对数据进行按需裁减。

具体要求:

  1. 定义核心加载函数:编写 load_kg_subset(file_path, relation_types),利用 AI 辅助处理 Hetionet 的 JSON 文件
  2. 基于元组的数据抽象:将每一条关系边(Edge)存储为一个三元组 (Subject, Relation, Object),整体知识图谱表示为 list of tuples
  3. 列表推导式过滤:要求使用 List Comprehension 从总列表中过滤出包含"治疗(treats)"、"关联(associates)"、"上调节(upregulates)"、"下调节(downregulates)"、"作用(interacts)"的关系

阶段二:多跳路径(Multi-hop)搜索算法开发

任务描述: 实现药物重定向(drug repurposing)的核心逻辑:寻找"药物 A → 调节基因 B → 关联疾病 C"的二级关联路径和更深层级的关联路径。

具体要求:

  1. 编写搜索函数 find_repurposing_paths(disease_name)
  2. 输入一个目标疾病
  3. 第一步:找到与该疾病关联的所有基因(存储在列表中)
  4. 第二步:遍历基因列表,找到能调节这些基因的所有药物
  5. 第三步:借助提示词,尝试给出更加高效的搜索实现方法

  6. 复杂结构管理:搜索结果需以嵌套列表形式返回,例如: python [[("Drug_X", "upregulates", "Gene_Y"), ("Gene_Y", "associates", "Disease_Z")], ...]

  7. 深层信号通路/相互作用路径:实现 find_deep_paths() 函数。逻辑为:"药物 → 上/下调节 → 基因 A → 相互作用 → 基因 B → 关联 → 疾病"。这要求在处理列表时,需在"基因 A"和"致病基因 B"之间多跳一次 Gene-interacts-Gene 关系,用于模拟生物学中的信号传导链条

阶段三:可视化验证与"新疗法"发现

任务描述: 利用可视化工具直观展示路径结果,并尝试通过集合差异挖掘出"新疗法"路径。

具体要求:

  1. 子图可视化:编写 plot_kg_subgraph() 函数,利用 NetworkX 和 Matplotlib 库将阶段二搜到的所有路径绘制成一张多色关系图(药物、基因、疾病需颜色区分)

  2. 采样策略:如果节点和关系太多影响渲染效率,考虑实现某种合适的采样策略缩小绘制的范围

  3. 新路径发现:通过集合差集逻辑,从深层路径结果中剔除已有的直接 Treats 关系,找出"逻辑链条完整但尚未被标记为治疗"的潜在药物

  4. 结果存储:将关系可视化图谱存储在 discovery_graph.png 中,将挖掘出的潜在新药物及路径存储在 new_therapy_discovery.json

阶段四:智能体交互与推理验证

任务描述: 开发一个支持中文输入的"药研 AI 助手"。

具体要求:

  1. 中英对齐逻辑:在交互循环中,接入 AI 大模型接口(如 OpenRouter 或其他大模型 API),将用户输入的中文疾病名(如"阿尔兹海默症")实时翻译为 Hetionet 中的标准英文术语(如"Alzheimer's disease",尝试让 AI 理解 Hetionet 的术语风格)

  2. 双语推理输出:智能体从阶段二获得的路径集合中找到匹配的路径后,需将推理链条翻译回中文(调用大模型 API 形成自然语言)并输出。例如:

    "我发现药物 A 可能是对阿尔兹海默症有效的新药,理由是:它并未有直接治疗阿尔兹海默症的关系,但它上调节了基因 B,基因 B 与基因 C 相互作用,而基因 C 是该病的关键因子。"

  3. 健壮性处理:编写逻辑时,需要判断若翻译后的术语在图谱节点中不存在,需给出友好提示

3. 实验提交物描述

1. 实验报告

根据《实验报告 2: 知识图谱探索与应用》模板中要求的内容进行填写和截图展示,写清楚姓名和学号,命名为《姓名 - 学号 - 实验报告 2》

2. 实验过程文件,包括:

文件名 说明
kg_explorer.py 包含所有阶段功能的完整 Python 代码,要求函数注释清晰
discovery_graph.png 程序生成的针对某一特定疾病(如阿尔兹海默症或肝癌)的药物发现路径图
new_therapy_discovery.json 存储你在任务中发现的"新疗法"路径数据,需包含药物名称和对应的基因证据链
agent_demo.png 展示终端交互截图,体现智能体如何引导用户发现新知识

3. 打包提交

以上报告和文件,打包成压缩文件,命名为:姓名 - 学号 - 实验 2.zip,钉钉发送给老师

4. 实验数据

文件名 大小 说明
hetionet-v1.0-metagraph.json 2.8KB 元图数据(节点类型、关系类型定义),用于了解图谱结构
hetionet-v1.0.json 713MB 完整知识图谱数据,包含所有实体和关系

注意:完整数据文件较大,建议先使用元图数据理解结构,编写好代码后再加载完整数据进行实验。

5. 评分标准

评分项 分值 说明
代码功能完整性 40% 四个阶段功能全部实现
代码质量 20% 函数注释清晰、代码规范、结构合理
可视化效果 15% 图谱清晰、颜色区分合理
新疗法发现 15% 能找到合理的潜在新药物路径
智能体交互 10% 支持中文输入、推理输出流畅