暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

BioGraphRAG:基于 NebulaGraph 的生物医学知识图谱问答系统

357


一、背景
在生物医学领域,医生查文献、患者搜病情、科研人员找基因关联,知识查询存在两大痛点:
  • 专业性强:术语复杂、关系网状交织(如“基因A-抑制-蛋白B-引发-疾病C”)
  • AI 容易胡编:通用大模型常对专业领域问题“一本正经地胡说八道”
因此,我们构建了一个专业的生物医学知识图谱问答系统——BioGraphRAG. 
GitHub🔍
https://github.com/devingupta1/BioGraphRAG
  • 数据集:BioKG
  • 前端交互:Chainlit 
  • 后端 API:FastAPI
  • 图数据库:NebulaGraph
  • 索引与检索:LlamaIndex
BioGraphRAG 是 LLM 在生物医学领域的高级应用,它为 LLM 提供专业知识图谱,集成了结构化、经过验证的生物医学数据,以提供准确、可解释且全面的医学回答。
BioGraphRAG 旨在弥合通用 AI 模型与现实世界医学信息复杂性之间的差距,同时具有高易用性:不仅可以以聊天的形式进行知识问答,还可通过 NebulaGraph Studio 与知识图谱交互,并使用专用脚本管理实体映射。

▌二、技术选型
(一)Why not RAG?
大型语言模型(LLM)是理解和生成类人文本的高级 AI 系统,由于 LLM 存在依赖数据训练、学习成本高、对专业数据理解有限等局限性,大家一直在探索增强 LLM 能力同时减轻其缺点的方法,如 RAG(检索增强生成)。
虽然 RAG 能在一定程度上减少大模型幻觉,提高上下文相关性,但 RAG 也存在以下缺点:
  • 质量依赖性:响应的质量高度依赖于检索数据的相关性——检索效果差必然导致答案质量差。
  • 系统复杂性:实现 RAG 涉及集成检索和生成系统,使其设计和维护更加复杂。
  • 文档理解不全面:由于 RAG 主要依赖文档片段(chunks)来生成答案,它在理解跨多个文档和片段之间的复杂相互关系方面存在局限。
  • 数据处理能力有限:虽然 RAG 在非结构化数据集上表现良好,但在处理图数据集和其他结构化数据集时存在困难。
而生物医学知识图谱问答系统(如“基因 TP53 与哪些癌症相关?”)需要满足:
  • 答案精准且可追溯来源
  • 能展示实体间复杂关系(药物-靶点-疾病网络)
显而易见,RAG 的上述缺点在生物医学领域被显著放大,因而无法有效解决该领域的核心知识管理痛点。
(二)Why GraphRAG?
GraphRAG 通过将知识图谱集成到检索过程中来增强 RAG 系统。知识图谱能够映射实体之间的复杂关系,从而实现更准确、更全面的检索——在精度要求极高的领域,如生物医学中,其价值尤为突出。
  • 事实准确性:在生物医学领域,事实正确且准确至关重要,误解或不准确可能带来严重后果。GraphRAG 通过利用知识图谱来提高准确性。
  • 法规与合规性:医疗保健行业在严格的法规下运作,要求数据的透明度和可追溯性。GraphRAG 天然支持追踪检索数据的来源和关系,显著提高了可追溯性。
  • 分散多样的数据集:生物医学领域的数据通常分散在多个来源中——如研究论文、临床试验和医学数据库。GraphRAG 的核心优势在于通过将这些分散的信息映射到统一的知识图谱上来整合它们——实现从孤立数据点到关联网络的转变,为复杂查询提供更清晰全面的理解。

▌三、数据库选型-NebulaGraph
图数据库使用节点(代表实体)、边(代表实体之间的关系)和属性(描述节点和边的信息)来建模和表示数据。与传统数据库将数据组织在行列表中不同,图数据库专注于实体之间的关系,非常适合社交网络、推荐引擎和知识图谱等场景。
图数据库的主要优势包括:
  • 灵活性:可以轻松建模复杂的互连数据。
  • 高效性:查询关系比在传统数据库中更快。
  • 可扩展性:可以有效地管理具有数百万节点和边的大规模图谱。
经过对比多个图数据库,我们选择使用 NebulaGraph 来索引 BioKG 知识图谱。
  • 开源:NebulaGraph 遵循 Apache 2.0 协议开源,我们可以基于特定需求进行定制开发。
  • 大规模性能:擅长处理千亿节点万亿条边的超大数据集,同时保持毫秒级查询延时。
  • 分布式架构:NebulaGraph 的分布式特性使我们能够有效地跨多台服务器管理和查询大型数据集。
  • 细粒度模式支持:NebulaGraph 提供灵活的模式管理,允许我们定义节点和边上适合我们知识图谱结构的特定属性。
  • 专属查询语句:nGQL(NebulaGraph Query Language)是 NebulaGraph 为开发和运维人员设计的类 SQL 查询语言,支持灵活高效的图模式,它易于学习且功能强大,使我们能够快速查询实体之间的关系。

▌四、BioGraphRAG 实现
(一)数据导入
我们选择 BioKG 作为数据集,它包含 13 个不同的数据源, 11 个不同的数据文件,涉及疾病、药物、蛋白质、细胞和遗传疾病等方面的数据。每个文件包含 265-270 万个实体的三元组集合,供我们在构建知识图谱和准确创建子图时使用。
在将一千万个点、三千万条边导入到 NebulaGraph 时,我们面临的挑战之一是预计完成 upsert 的时间(大约 33 小时)。尽管这是整个 pipeline 中的一次性事件,但对我们来说并不理想,因为我们计划最终让开发人员本地索引数据,而目前的工作量对于本地开发来说耗时过长。
为了解决该问题,我们使用了上图的多进程处理:将一系列任务适当划分以解决时间限制。最终,我们把 upsert 的时间从 33 小时缩短至 3 小时。
(二)使用 LlamaIndex 创建索引
1. LlamaIndex 的作用:
  • 索引知识图谱:LlamaIndex 创建知识图谱中实体、关系和属性的结构化索引。这使得数据的检索更快、更精确。
  • 检索与查询:当用户进行查询时,LlamaIndex 使用索引图检索最相关的三元组(实体-关系-实体集合),然后将其传递给 LLM 以生成答案。
2. 如何根据用户查询检索相关的三元组
在基于图的 RAG 系统中,使用 LlamaIndex 构建了索引并将数据存储在 NebulaGraph 中,检索过程就变得简单明了:
(1)用户查询:用户输入一个自然语言问题,例如,“线粒体(mitochondria)与能量生产(energy production)之间存在什么关系?”
(2)索引查询:基于该查询,LlamaIndex 查询 NebulaGraph 以检索相关的三元组(例如“线粒体 -> 生成 -> ATP”)
(3)三元组检索:BioGraphRAG 检索包含与用户查询相关的实体和关系的三元组。
(4)答案生成:检索到的三元组被传递给 LLM,然后 LLM 为用户生成一个连贯的、具有上下文关联性的答案。
3. 查询和输出示例

用户查询: “光合作用的过程?”

Query to NebulaGraph:
MATCH (entity1:process)-[rel:relationship]->(entity2:component)
WHERE entity1.name = 'photosynthesis'
RETURN entity1, rel, entity2;``

Output: BioGraphRAG 返回以下三元组:
photosynthesis -> involves -> light reaction
photosynthesis -> produces -> oxygen
photosynthesis -> uses -> chlorophyll

这些数据被输入 LLM 以生成最终回答:

“光合作用涉及光反应(light reaction),使用叶绿素(chlorophyll),并产生氧气(oxygen)作为副产品。”

(三)用户界面
我们基于 Chainlit 开源工具,高效构建了对话式 AI 用户界面。它使开发人员能够集成机器学习模型并实现 Human-in-the-Loop(HITL)系统,简化了为客服和个人助理等各种应用创建 AI 驱动对话的过程。
Chainlit 的反馈循环允许开发人员实时收集用户建议,通过识别对话中的不足来提高 AI 的准确性和相关性。
1.支持基于图的答案生成
为了增强基于图的答案生成,我们使用 Chainlit 实现了以下功能:
  • 图谱数据集成: 从知识图谱中提取数据的能力。
  • 图谱遍历逻辑: 导航图谱并提供相关信息的逻辑。
  • 答案上下文映射: 能够将图谱数据转化为连贯的自然语言响应。
2.可视化上下文
Chainlit 还可将会话上下文显示为图谱,提供:
  • 基于节点的交互:每个用户输入是一个节点,AI 响应由边表示。
  • 用户友好界面:可视化增强了用户对 AI 决策过程的理解。
  • 调试与透明度:开发人员可以轻松跟踪对话演进并进行故障排除。

▌五、答案增强:超越基础的 GraphRAG 
虽然使用了 GraphRAG 可以生成答案,但这些答案通常很简短——通常只有一两行。为了增强用户体验,需要提供额外的上下文,例如基因、蛋白质、药物的定义和有用 URL,从而丰富答案,使其对用户更有价值。
通过整合来自 UniProt、AlphaFold 和 RxNav 等数据库的生物医学数据,我们将系统从一个简单的查询-响应工具转变为一个全面的生物医学知识平台。
1. 图谱查询执行
  • 流程开始使用专门的查询引擎kg_index_query_engine
     查询 BioKG.

  • 此步骤检索初始答案以及表示与问题相关的实体上下文和关系的子图。
2. 图谱响应处理
  • 处理来自图谱查询的响应,提取关键组件,如上下文、初始答案和子图。
  • 这涉及解析响应并提取表示子图中关系的三元组。
3. 答案增强
  • 通过调用查询特定元数据源的附加模块来增强初始答案。
  • 这些包括基因相关信息、通过 AlphaFold 的蛋白质结构以及药物相关数据。
  • 增强过程将这些附加信息与初始答案合并,以创建更全面的响应。
增强前的答案⬇️:从 BioKG 查询生成的初始答案提供了与用户问题相关的基本信息,主要侧重于从子图中提取的直接关系。
增强后的答案⬇️:包含来自外部元数据源的额外上下文信息,提供更全面、更详细的响应。
4. 最终响应组合
  • 通过集成初始答案、增强内容和元数据来准备最终响应。
  • 此响应以结构化格式包含所有相关信息,确保其全面且上下文准确。
  • 包含相关外部资源的链接(如果可用)。
5. 回退机制
  • 如果用户查询的信息并不在知识图谱中,BioGraphRAG 会自动回退到使用 OpenAI 驱动的 LLM 的通用查询方法。
  • 这确保了当知识图谱覆盖不全时,也能给用户带来良好的查询体验。
6. 日志记录与错误处理
  • 在每个阶段都包含日志记录,尤其是在图谱查询和答案增强期间。
  • 这对于调试、性能监控和确保每个组件按预期运行至关重要。
  • 错误处理机制捕获并报告问题,而不会中断整个过程。

▌六、总结与展望
BioGraphRAG 通过将生物医学知识图谱与基于图的检索增强生成相结合,为复杂的生物医学查询生成更准确、内容更丰富的答案。NebulaGraph 作为核心图数据库,在高效存储海量生物医学关联数据和支撑复杂查询方面,发挥了关键作用。
未来,我们将充分利用 NebulaGraph 分布式数据库的特性、优化的数据结构和增量数据更新来高效处理大规模存储与查询;扩展 BioGraphRAG 的数据源,如临床试验、基因组数据和患者记录等,并集成更先进的自然语言处理技术和多模态数据(如医学图像),使 BioGraphRAG 成为更强大的生物医学知识图谱问答系统。

Reference
https://kunjrathod.substack.com/p/biographrag



6.28 北京站 nMeetUp 🔥⬇️
本周六北京 nMeetUp |NebulaGraph 助你解锁图数据库的业务价值
⚠️活动地址更改为:北京市海淀区中关村创业大街 6 号楼 B1 层 
东京站 nMeetUp 🔥⬇️
东京 nMeetUp |图技术 + AI 社区见面会来啦!


如果你觉得 NebulaGraph 能帮到你,或者你只是单纯支持开源精神,可以在 GitHub 上为 NebulaGraph 点个 Star!每一个 Star 都是对我们的支持和鼓励✨

https://github.com/vesoft-inc/nebula



扫码添加

 可爱星云

技术交流

资料分享

NebulaGraph 用户案例

风控场携程Airwallex众安保险中国移动Akulaku邦盛科技360数科BOSS直聘金蝶征信快手青藤云安全

平台建设:博睿数据携程众安科技微信OPPOvivo美团百度爱番番携程金融普适智能BIGO

知识图谱:中医药大学企查查腾讯音乐中科大脑泰康在线苏宁微澜同花顺携程酒店

数据血缘:波克城市微众银行携程金融

智能运维:58同城中亦安图

✨ NebulaGraph 推荐阅读

文章转载自NebulaGraph 技术社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论