【通俗易懂】知识图谱增强 RAG 思路 和 实现方案

【通俗易懂】知识图谱增强 RAG 思路 和 实现方案

    • 为什么用 知识图谱增强 RAG?
      • 对比传统方法
      • 3 种实现方式
    • 方案一:利用 KG 关系网络,构建问题子图促精准解答
      • 地图固定深度
      • 整体优化方案
    • 方案二:利用 KG 语义关联,提升文档片段间相关性
    • 方案三:利用 KG 多阶段,增强和验证问答流程

 


为什么用 知识图谱增强 RAG?

你是否曾经为AI无法准确回答复杂医学问题而感到困惑?

如果能让AI理解医学信息就像经验丰富的医生一样全面和深入,那会是多么令人振奋的突破!

这正是知识图谱在检索增强生成(RAG)中为医疗领域带来的革命性变革。

假设你问AI一个看似简单的问题——“详细解释心血管疾病与糖尿病之间的关系”。

表面上看起来简单,实则暗藏玄机。

传统的 RAG 方法面对这个问题时,就像一位实习医生在浩如烟海的医学文献中摸索,常常只能捕捉到片面的信息。

为什么会这样?因为相关信息可能散落在数十本医学教科书、数百篇研究论文和无数临床病例报告中!

这就好比在一座庞大的医学图书馆里寻找答案,却发现所需信息被分散在各个角落。

传统的"分割数据,嵌入再向量搜索"方法在这种情况下显得力不从心,它就像是一个戴着近视的图书管理员,只能在有限的几个书架上匆匆一瞥。

这种方法不仅难以获取完整的病理生理学解释,更可能错过关键的临床相关性,导致回答支离破碎,甚至南辕北辙。

那么,在这个复杂的医学知识网络中,有什么方法可以让AI像经验丰富的专科医生一样,全面而准确地回答这个棘手的问题呢?

 

知识图谱恰如一位经验丰富的主治医师,不仅能精准诊断,还能洞察症状背后错综复杂的关联。

知识图谱不仅能够显著减少基于嵌入的语义搜索所导致的不准确性,更能为医学AI注入"临床智慧"。

在传统的语义搜索中,"心肌梗塞"与"胃溃疡"这两个看似风马牛不相及的疾病,可能因为都与"胸痛"这一症状相关而被错误地联系在一起。

这就好比一个缺乏经验的实习医生,仅凭相似的表象症状就草率地做出诊断。

然而,在大多数临床场景下,这种粗浅的语义相关性往往会导致严重的误诊,进而引发灾难性的"医疗幻觉"。

 

传统语义搜索方法:

  1. 输入症状:“胸痛”
  2. 检索结果:返回所有与"胸痛"相关的疾病,包括心肌梗塞和胃溃疡
  3. 分析过程:仅基于症状的表面相似性进行匹配
  4. 可能的结果:将心肌梗塞和胃溃疡错误地等同视之,忽视了它们在病因、严重程度和治疗方法上的巨大差异

知识图谱方法:

  1. 输入症状:“胸痛”
  2. 激活相关节点:同时激活"心血管系统"和"消化系统"的相关节点
  3. 分析过程:
    • 追踪症状源头:区分心源性胸痛和非心源性胸痛
    • 关联其他症状:如心肌梗塞常伴有冷汗、呼吸困难,而胃溃疡可能伴有反酸、腹胀
    • 考虑风险因素:评估患者的年龄、性别、生活方式等
    • 权衡严重程度:认识到心肌梗塞是危及生命的紧急情况
  4. 输出结果:提供一个不同疾病,有优先级的诊断建议列表,同时指出需要进一步检查的方向

 

在这种情况下,植根于扎实医学知识体系的知识图谱就显得尤为重要。

它就像一位始终保持警惕的专科顾问,能够敏锐地识别出症状背后的真正病因,有效地预防和消除这种潜在的误诊风险。

知识图谱不仅仅是一个静态的信息库,更是一个动态的、多维度的医学知识网络。

它能够精确捕捉疾病之间的微妙关联,理解症状、病因、治疗方法之间的复杂交互,从而为AI提供更全面、更准确的诊断和治疗建议。

对比传统方法

将上下文学习推向了一个全新的高度,提取出细粒度、精确调校、领域特定且互联的医学知识:

  1. 精细化数据分割与获取

    • 传统方法:如同用大网捕鱼,可能会遗漏小鱼或误捕无关鱼类。

    • Graph RAG:犹如精准的显微镜,能捕捉到最微小的数据颗粒。

      举例:在分析一个复杂的病例时,Graph RAG 能够精确定位到特定基因突变与某种罕见症状之间的关联,这种细节在传统的文本块分割中很可能被忽略。

  2. 跨篇幅、全局连接的知识提取

    • 传统方法:如同在迷宫中独立探索每个房间,难以看到整体路径。

    • Graph RAG:宛如拥有迷宫的全景图,能够轻松找出各个节点间的最短路径。

      举例:在研究一种新型传染病时,Graph RAG 能够快速连接病毒学、流行病学、临床症状学等多个领域的知识,绘制出一幅完整的疾病图谱。

  3. 缓解嵌入方法带来的"幻觉"

    • 传统方法:如同一个近视眼,容易将相似但本质不同的概念混淆。

    • Graph RAG:犹如配备了高精度望远镜,能清晰辨别语义远近的细微差异。

      举例:在处理"类风湿性关节炎"和"骨关节炎"这两种常见的关节疾病时,Graph RAG 能准确识别它们在病因、发病机制和治疗方法上的本质区别,避免因表面症状相似而导致的误诊。

3 种实现方式

问题:“糖尿病患者容易出现哪些并发症,如何预防?”

思路1:利用KG多阶段增强,优化大模型问答流程

  1. 意图识别阶段:

    • 识别出关键实体"糖尿病"、“并发症"和"预防”。
    • 利用KG,可能会补充"糖尿病"的医学术语如"diabetes mellitus",或者具体类型如"1型糖尿病"和"2型糖尿病"。
  2. Prompt组装阶段:

    • 从医学KG中查询糖尿病相关的背景知识,如定义、类型、病因等。
    • 将这些信息加入到prompt中,为大模型提供专业背景。
  3. 结果封装阶段:

    • 大模型生成答案后,用医学KG进行验证和补充。
    • 例如,确认列出的并发症是否完整,预防措施是否符合最新医学指南。

思路2:利用KG关系网络,构建问题子图助力精准答案

  1. 从问题中提取关键实体"糖尿病"、“并发症"和"预防”。

  2. 在医学KG中以这些实体为起点,构建一个子图,包含:

    • 糖尿病的各种并发症
    • 每种并发症的风险因素
    • 预防措施及其作用机制
    • 糖尿病管理的关键指标(如血糖水平、糖化血红蛋白等)
  3. 将这个子图转化为文本,作为专业医学上下文提供给大模型。

  4. 大模型基于这个丰富的医学上下文生成答案。

思路3:利用KG语义关联,提升文档片段间的相关性

  1. 在医学文档库中找到与"糖尿病"、"并发症"和"预防"相关的文档片段。

  2. 使用医学KG来建立这些片段之间的语义关联:

    • 例如,将描述糖尿病病理的片段与描述各种并发症的片段关联起来。
    • 将描述并发症的片段与相应预防措施的片段关联起来。
    • 建立不同预防措施之间的关系,如饮食控制、运动therapy和药物治疗等。
  3. 基于这些关联,为大模型提供一个更有结构的医学文档集合。

  4. 大模型利用这些结构化的医学信息来生成更全面、更专业的回答。

对比:

  • 思路1,侧重于在问答流程的不同阶段使用KG来增强和验证信息。

  • 思路2,专注于构建一个与问题高度相关的知识子图,提供丰富的上下文。

    适用于需要深度推理和全面分析的场景,如复杂诊断。

    需要综合考虑患者的症状、体征、检查结果等多方面信息。

    构建的知识子图可以包含可能的诊断、鉴别诊断、以及各种诊断之间的关系。

  • 思路3,着重于优化文档检索和组织,使大模型能够访问到更相关、更有结构的信息。

    适用于需要治疗方案制定阶段,有助于发现不同治疗方法之间的联系和权衡。

    适用于需要大量文献支持和最新指南的场景,如治疗方案制定。

方案一:利用 KG 关系网络,构建问题子图促精准解答

这一过程可以被概括为三个关键步骤,每一步都充分利用了图结构和大模型的优势:

  1. 实体提取(抓重点)

    • 首先,系统会运用LLM或其他专门的自然语言处理模型来分析用户的查询。
    • 这一步的目标是从输入的问题中识别并提取出关键实体。这些实体将作为后续步骤的基础,确保系统能够精准定位相关信息。
  2. 子图构建(画地图)

    • 接下来,系统会以第一步提取出的关键实体为起点,在知识图谱中进行有限深度的遍历。
    • 通常,这个深度被设定为2,意味着系统会探索与初始实体直接相连的节点,以及与这些节点相连的下一层节点。
    • 这个过程实际上是在构建一个与用户查询高度相关的知识子图。
  3. 上下文增强生成

    • 最后,系统将构建好的子图作为丰富的上下文信息,连同原始查询一起输入到大模型中。
    • 大模型利用这些精心筛选的上下文信息,生成一个既准确又全面的回答。

首先从用户输入中提取关键实体,然后基于这些实体在知识图谱中构建相关子图,最后将这个子图作为上下文信息送入大模型,完成最终的答案生成。

 


地图固定深度

把深度设定为 2,这个回答效果不行。

原来的方法(固定深度2):

  • 这就像是你站在图书馆门口,然后说"我要看看离我两个书架距离内的所有书"。
  • 不管你要找的是什么,你总是只看这么远。
  • 有时候可能看得太少,有时候又可能看得太多。

新的方法(3种查路径+查邻居):

  • 这更像是一个聪明的图书管理员,他会根据你的问题,用不同的方式帮你找书:
  1. 直接关系查找:
    就像问"感冒、发烧有什么关系",管理员会直接找一条最短的路,把这两种水果连起来。

  2. 多重关系网络:
    比如你问"感冒、发烧和咳嗽有什么联系",管理员会把这三个症状都连起来,画出一个小网络,让你一眼就能看到它们之间的所有关系。

  3. 多角度查因:
    当你问"我最近头疼、肚子疼、还有点晕,这是怎么回事"时,管理员会从每个症状出发,分别去找可能的原因,给你一个全面的解释。

  4. 查找邻居:
    除了找这些直接的关系,管理员还会顺便看看周围closely相关的信息,可能会发现一些意想不到的联系。

对比来看:

  1. 灵活性:
    旧方法就像是用固定尺寸的圆规画圆,而新方法更像是自由作画,能根据需要画出各种形状的"知识地图"。

  2. 精确性:
    旧方法可能会把一些无关的书也拿来,而新方法就像是精准定位,只找最相关的信息。

  3. 全面性:
    新方法不仅能找到直接关系,还能发现潜在的、复杂的联系,就像不仅告诉你怎么走,还会提醒你路上有什么好玩的。

  4. 效率:
    虽然新方法看起来做的事情多,但因为更有针对性,反而可能比旧方法更快找到有用信息。

新方法就像是把一个固定的放大镜,换成了一个能变焦、能拼接的智能望远镜。

它能根据你的问题,灵活地调整"看"的方式和范围,给你一个更全面、更精准的答案。

 

我目前实现就是到这,下面的整体优化方案还没。

 


整体优化方案

  1. 知识图谱召回方法的局限性

    a) 子图召回可能引入不相关路径

    • 就像我们之前说的"画地图",有时候可能会画出一些实际上并不重要的路。
    • 这就像你问路时,别人不仅告诉你怎么去目的地,还说了一堆你根本不需要的弯路。
    • 特别是双向的医疗知识图谱,头疼 < – > 康复治疗 < – > 牙疼,因为有一个通用节点(康复治疗),能把头疼和牙疼关联起来

     
    b) 实体识别精度有限

    • 患者问"我的血压有点高,需要吃降压药吗?"
    • 系统可能只识别出"血压"和"药"这两个实体,而忽略了"高"这个关键词。
    • 结果可能会返回一些关于测量血压或者各种血压药物的信息,而不是针对高血压的具体建议。

     

    c) 依赖基础知识图谱的质量

    • 这就像是我们的"图书管理员"的知识储备。
    • 如果图书馆里的书不够多或者不够全面,即使管理员再聪明,给出的信息也可能不够准确或完整。

 
2. 改进方向:引入路径排序

这个建议就像是在我们的"画地图"步骤后,加入一个"地图筛选"的环节。

这个环节分两步:

a) 粗排:使用LightGBM模型

  • 这就像是快速浏览一遍画好的地图,用一些简单的标准(如道路长度、路标数量等)来初步判断哪些路径更可能是有用的。

b) 精排:使用大模型

  • 这就像是仔细研究剩下的几条路径,深入理解每条路的含义,最后选出最合适的2-3条。
  1. 与之前的Graph RAG方法的关联

    这些建议实际上是在完善我们之前讨论的Graph RAG的三个步骤:

    • "抓重点"阶段:建议改进实体识别方法,不仅仅依赖关键词提取。
    • "画地图"阶段:建议在构建子图时就考虑路径的相关性,而不是简单地基于深度。
    • 新增"筛选地图"阶段:在生成答案之前,先对构建的子图进行筛选和排序。
  2. 潜在优势

    • 提高准确性:通过排序和筛选,可以大大减少不相关信息的干扰。
    • 提高效率:虽然增加了步骤,但通过快速筛选,实际上可能会加快整体处理速度。
    • 提高灵活性:这种方法可以更好地适应不同类型和复杂度的问题。
  3. 需要注意的点

    • 模型训练:这种方法需要额外的训练数据来优化排序模型。
    • 计算成本:增加了排序步骤可能会增加一些计算成本。
    • 平衡问题:需要在召回全面性和精确性之间找到平衡。

 


方案二:利用 KG 语义关联,提升文档片段间相关性

 


方案三:利用 KG 多阶段,增强和验证问答流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147721.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【重学 MySQL】三十八、group by的使用

【重学 MySQL】三十八、group by的使用 基本语法示例示例 1: 计算每个部门的员工数示例 2: 计算每个部门的平均工资示例 3: 结合 WHERE 子句 WITH ROLLUP基本用法示例注意事项 注意事项 GROUP BY 是 SQL 中一个非常重要的子句&#xff0c;它通常与聚合函数&#xff08;如 COUNT…

C++ -缺省参数-详解

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C】 欢迎点赞&#x1f44d;收藏⭐关注❤️ C -缺省参数-详解 1.是什么2.分类2.1全缺省参数2.2半缺省参数&#xff1a; 3.实际应用4.关于缺省参数的声明与定义5.总结 1.是什么 先来看看下面这段代码&#xff1a; #incl…

HTML5简介的水果蔬菜在线商城网站源码系列模板3

文章目录 1.设计来源1.1 主界面1.2 商品列表1.3 商品信息1.4 购物车1.5 其他页面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.ne…

JavaScript 类型转换:数字转换和 Symbol 类型转换

数字转换 将数据类型转换为数字称为数字转换&#xff0c;可以使用Number()、parseInt()、parseFloat()等方法将数据类型显式转换为数字。当一个值不能被强制转换为一个数字时&#xff0c;就会返回 NaN。 1. 字符串 > 数字&#xff1a; 当把字符串转换为数字时&#xff0c…

2024年双十一有哪些值得入手的好物?2024年双十一必买物品推荐

2024年的双十一购物季将是一个精彩的时刻&#xff0c;各大电商平台将推出一系列精品数码产品&#xff0c;包括最新款的智能手机、笔记本电脑、平板电脑、智能手表等等。这些产品不仅拥有时尚的外观和高端的配置&#xff0c;而且还能够满足消费者多种多样的需求&#xff0c;比如…

windows11上超详细JDK17安装教程

1.下载安装包,访问官网地址​&#xff1a; https://www.oracle.com/java/technologies/downloads/#java172、选择jdk-17_windows-x64_bin.exe Installer。 3、接着等待下载&#xff0c;下载完成后双击进行安装 4、点击下一步 5、这里可以选择安装位置 6、等待安装 7、安…

24年最新Stable Diffusion之最全详解图解

前言 1. Stable Diffusion介绍 1.1 研究背景1.2 学术名词 2.Stable Diffusion原理解析 2.1 技术架构2.2 原理介绍 扩散过程 3.1 Diffusion前向过程3.2 Diffusion逆向&#xff08;推断&#xff09;过程 本次教程将使用AI绘画工具 Stable Diffusion 进行讲解&#xff0c;如还未…

超详细超实用!!!AI编程之cursor配置中文(一)

云风网 云风笔记 云风知识库 一、配置中文扩展 打开扩展&#xff0c;搜索chinese,安装chinese(simplified) 简体中文语言包,重启即可 二、配置中文方法二 使用快捷键组合【CtrlShiftp】&#xff0c;在搜索框中输入configure display language,选择中文也可配置中文 三、配置…

近几年来说最有效率的编程语言和市场最认可的编程语言分别是什么?

在过去的几年中&#xff0c;编程语言的效率和市场认可度在不断演变。不同的语言适用于不同的领域和场景&#xff0c;因而编程语言的“效率”和“市场认可”需要根据具体应用来分析。本文将从两个角度入手&#xff0c;分别探讨近几年中被认为最有效率和最受市场认可的编程语言。…

开源语音实时交互新突破:LLaMA-Omni实现大语言模型无缝语音交互

像 GPT-4o 这样的模型通过语音实现了与大型语言模型&#xff08;LLMs&#xff09;的实时交互&#xff0c;与基于文本的传统交互相比&#xff0c;显著提升了用户体验。然而&#xff0c;目前在如何构建基于开源 LLMs 的语音交互模型方面仍缺乏探索。为了解决这个问题&#xff0c;…

如何精准计算:大型语言模型(LLM)部署到底需要多少GPU内存?

在几乎所有关于大型语言模型&#xff08;LLM&#xff09;的访谈中&#xff0c;总有一个问题反复出现&#xff1a;“部署 LLM 需要多少 GPU 内存&#xff1f;” 这个问题并非偶然&#xff0c;它是衡量您对这些强大模型在实际生产环境中部署和扩展能力理解程度的关键指标。 当您…

Transformer推理结构简析(Decoder + MHA)

一、Transformer 基本结构 Transformer由encoder和decoder组成&#xff0c;其中&#xff1a; encoder主要负责理解&#xff08;understanding&#xff09; The encoder’s role is to generate a rich representation (embedding) of the input sequence, which the decoder c…

国内短剧cps系统和短剧(播放)系统的区别,附各源码部署教程

国内短剧项目主要分为两大形式&#xff1a;一种是做短剧播放平台&#xff0c;让用户付费观看&#xff1b;另一种是做短剧的分销&#xff0c;就是将他人的平台短剧推广&#xff0c;可做平台可入驻&#xff0c;拿分成。 首先来说一下短剧播放平台&#xff08;短剧系统&#xff0…

828华为云征文|华为云服务器Flexus X 搭建BTC虚拟币质押投资理财系统(仅测试学习)

一、华为云服务器Flexus X 选购和介绍 强大性能&#xff0c;引领云服务新潮流 柔性算力&#xff0c;满足多样化需求 Flexus X实例的部署与管理过程也非常便捷。用户只需在华为云官网注册账号&#xff0c;选择适合的Flexus X实例规格&#xff0c;完成购买后即可开始部署。华为…

telnet ftp ssh 如何在交换设备上创建

telnet 测试 说明telnet 成功 这测试ftp 成功

深入理解MySQL InnoDB中的B+索引机制

目录 一、InnoDB中的B 树索引介绍 二、聚簇索引 &#xff08;一&#xff09;使用记录主键值的大小进行排序 页内记录排序 页之间的排序 目录项页的排序 &#xff08;二&#xff09;叶子节点存储完整的用户记录 数据即索引 自动创建 &#xff08;三&#xff09;聚簇索引…

【每日刷题】Day129

【每日刷题】Day129 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 105. 从前序与中序遍历序列构造二叉树 - 力扣&#xff08;LeetCode&#xff09; 2. LCR 154. 复杂…

足球预测模型理论:足球数据分析——XGBoost算法实战

简介&#xff1a;本文将探讨如何使用XGBoost算法进行足球数据分析&#xff0c;特别是足球运动员身价估计。我们将通过实例和生动的语言&#xff0c;解释XGBoost算法的原理和实际应用&#xff0c;帮助读者理解复杂的技术概念&#xff0c;并提供可操作的建议和解决问题的方法。 足…

Eclipse离线安装Tomcat插件

Eclipse离线安装Tomcat插件 最近的自己在对低版本的代码的进行维护补丁,不得不采用Eclipse 来进行跑项目,真的是折磨 其中遇到一个问题就是打开Eclipse的2021版,安装Tomcat的插件,发现好家伙,就是死活在线安装失败 (喵的,真的是让我抓耳挠腮!!哈哈哈) 无奈,只好采用离线安装,特…

实时语音识别技术实现

实时语音识别 1.环境2.完整代码3.效果4.可能的问题 实时语音识别 1.环境 python版本&#xff1a;3.11.9 2.完整代码 import sqlite3 import timefrom funasr import AutoModel import sounddevice as sd import numpy as np# 模型参数设置 chunk_size [0, 10, 5] encoder_c…