【RAG探索第4讲】KG+RAG丨基于知识图谱优化大型语言模型方法

news2024/11/13 18:17:08

原文链接:【RAG探索第4讲】KG+RAG丨基于生物医学知识图谱优化的大型语言模型提示生成方法

一、现有问题:

LLMs在处理特定领域或高度专业化查询时缺乏专业知识,导致回答不够准确和可靠。
LLMs可能会产生事实错误(即幻觉)和过时的知识。
如何在减少与LLMs的交互次数的同时,将用户输入与高质量的结构化知识对齐,并过滤掉检索到的信息中的噪声。

PS:针对上述问题,一般有两种解决方向

一是采用预训练和领域特定微调的解决方案,即利用特定领域的数据集对预训练好的模型进行微调。

二是采用将相关知识构建prompt提示工程,将用户提问涉及到的相关知识进行组合连同问题一起输入到大模型中,这种方式相较于预训练微调的方法而言计算量更小,而且泛化性更强。

二、论文成果:

这篇论文的作者提出了一种KG-RAG框架,这个KG-RAG框架涉及从用户提示中识别实体,从知识图谱中提取生物医学概念,提示感知上下文生成,转换成自然语言,提示组装和答案检索,并且作者对这种方法的性能在不同的场景下进行了广泛测试。实验结果表明KG-RAG框架将生物医学知识图谱SPOKE与大型语言模型相结合,有效的提升了LLM在医疗领域的问答效果。
在这里插入图片描述

三、KG-RAG框架工作原理:

在这里插入图片描述
KG-RAG框架的工作原理包括以下步骤:
1实体识别:从用户输入的query中识别出疾病实体,然后在SPOKE知识图谱中找到相应的节点。
2上下文提取:从SPOKE知识图谱中提取与疾病节点相关的上下文信息,并将其转换为自然语言。
3提示组装:将提取的上下文与原始prompt结合。
4文本生成:使用LLM(如Llama-2-13b、GPT-3.5-Turbo或GPT-4)生成有意义的生物医学文本。

3.1实体识别:

传统的命名实体识别都是用专门的小模型去做NER(如BI-LSTM-CRF),KG-RAG是使用LLM识别实体。

实体抽取

在KG-RAG框架中,实体抽取是通过零样本提示(zero-shot prompting)实现的。研究人员设计了一个高效的抽取prompt,引导大型语言模型(如GPT-3.5-Turbo)从输入文本中提取疾病实体,并将结果以JSON格式返回。
在这里插入图片描述

DISEASE_ENTITY_EXTRACTION如下:
  You are an expert disease entity extractor from a sentence and report it as JSON in the following format:  
  Diseases: <List of extracted entities>  
  Please report only Diseases. Do not report any other entities like Genes, Proteins, Enzymes etc.

实体链接

疾病实体抽取出来后,下一步就是将这些实体与SPOKE知识图谱中的疾病实体进行匹配,也就是传统NLP任务中的实体链接,KG-RAG这个框架中采用的方法是用语义相似度的方式来做。

(1)实体embedding计算:首先,使用Embedding模型(作者使用的是’all-MiniLM-L6-v2’)为SPOKE知识图谱中的所有疾病概念节点计算embedding向量

(2)将计算出的疾病embedding存储在向量数据库(作者使用的是’Chroma’)中,以便快速检索。

(3)语义搜索匹配:将LLM提取的疾病实体与向量数据库中的疾病实体进行比较,选择最相似的(向量相似度计算)

PS:实体识别时零样本方法未能识别出疾病实体,采取的办法是直接拿原始query去匹配,取top 5。

最终,实体匹配过程会输出与输入文本提示中的疾病实体最相关的SPOKE知识图谱节点。这些节点及其相关信息将用于后续的上下文提取和文本生成步骤。通过这种方法,KG-RAG框架能够有效地从专业文本中提取和识别疾病实体,并将其与丰富的生物医学知识库相连接,从而生成准确、可靠的生物医学相关信息。

上下文提取

子图查询

在得到具体的实体后,紧接着就是从KG中去查询这个实体关联的子图,这些信息通常以三元组(Subject, Predicate, Object)的形式存在,表示不同的生物医学关系。通常情况下,可以查询1~3跳内的三元组信息,这里借助图数据库可以比较容易的实现。

得到的三元组信息,LLM可能不太能比较好的理解,这里就需要将三元组(主体、谓词、客体)转换成自然语言(英语),以便与输入提示结合并用于后续的文本生成。如:

(Disease hypertension, ASSOCIATES_DaG, Gene VHL) → Disease hypertension associates Gene VHL
PS:这里作者预先定义了三元组转成自然语言的转换规则。

上下文剪枝

在KG-RAG框架中,Context Pruning(上下文剪枝)是一个关键步骤(这里的剪枝就是减少给LLM的信息,减少token数量)可以过滤掉一些无用信息,提升LLM回答的精确性。

作者使用的剪枝方法是使用embedding模型计算三元组和query的cos相似度,然后根据下面的规则进行选择:

条件一:上下文关联的余弦相似度必须大于包含所有与所选疾病节点相关的上下文的相似度分布的75%分位(相似度75%以上)
条件二:余弦相似度的最小值必须达到0.5

通过这个0.5 和 75%,可以有效减少给LLM的无效信息,有助于提高后续文本生成的准确性和相关性。

提示组装

将用户提问和提取到的上下文信息组合为propmt,再加上SYSTEM_PROMPT,送给LLM回答:

在这里插入图片描述
SYSTEM_PROMPT如下:

# One-Hop Validation  
SINGLE_DISEASE_ENTITY_VALIDATION: |  
  You are an expert biomedical researcher. For answering the Question at the end, you need to first read the Context provided.  
  Then give your final answer by considering the context and your inherent knowledge on the topic. Give your answer in the following JSON format:  
    {Compounds: <list of compounds>, Diseases: <list of diseases>}  
  


# Two-Hop Validation  
TWO_DISEASE_ENTITY_VALIDATION: |  
  You are an expert biomedical researcher. For answering the Question at the end, you need to first read the Context provided.  
  Then give your final answer by considering the context and your inherent knowledge on the topic. Give your answer in the following JSON format:  
    {Nodes: <list of nodes>}

问答生成:

作者使用了三个预训练的聊天模型:Llama-2-13b,GPT-3.5-Turbo和GPT-4。具有130亿参数和4096个标记大小的Llama模型被下载并部署在Amazon Elastic Compute Cloud(EC2)GPU P3实例中。通过OpenAI API访问GPT模型。由于GPT模型的参数数量比Llama更高,提供了比较KG-RAG性能作为LLM大小函数的机会,以其参数数量为准。在这项研究中,对于所有LLM,设置了控制LLM输出中随机性水平的“温度”参数为0。

HyKGE: A Hypothesis Knowledge Graph Enhanced Framework for Accurate and Reliable Medical LLMs Responses
在这里插入图片描述

HyKGE整体模型

在这里插入图片描述
HyKGE框架的核心思想是在检索前阶段利用LLMs的零样本(zero-shot)能力和丰富知识来扩展KGs中的探索方向,并通过精心设计的提示(prompt)增强LLMs回答的密度和效率。具体来说,HyKGE包含以下几部分:

  • 假设输出模块(HOM):利用LLMs生成假设输出,补偿用户查询的不完整性。
  • 命名实体识别模块(NER Module):从假设输出和用户查询中提取医疗实体。
  • 知识图谱检索模块:使用提取的实体作为锚点,搜索知识图谱中的推理链。
  • HO片段粒度感知重排模块:在检索后阶段,通过使用假设输出的片段和用户查询来重排和过滤检索到的知识,以保持多样性和相关性的平衡。(过滤噪声知识)

假设输出模块:
利用LLMs的零次学习(zero-shot)能力,生成与查询相关的假设输出,这些假设输出可以作为在知识图谱中探索新知识的起点。此模块设计了细致的提示(Prompt)格式,引导LLMs逐步深入思考问题,以弥补用户查询可能存在的信息不全。例如,提示会要求模型“作为医疗专家,缓慢思考,逐步理解并回答问题,不跳过关键步骤,全面分析问题”。通过这种方式,模型能够根据问题要求,发挥其强大的推理能力,探索与问题相关的医学知识,从而生成高质量的假设输出。这个本身要求LLM对医疗知识就有着比较强的推理能力,这里可以通过fine-tune 做知识迁移到医疗领域。
在这里插入图片描述
命名实体识别模块(NER模块):
作者这里是直接引入了一个专门针对医疗领域的命名实体识别模型,这个模型是利用CMEEE数据集训练的。
知识图谱检索模块:
利用匹配的实体在知识图谱中检索相关的知识路径,作者是使用密集检索方法将潜在实体链接到KG,使用GTE嵌入模型(作者说这事目前检索领域表现最好的文本向量嵌入模型)。
HOFragment粒度感知重排模块:
通过检索模块后,可以获得大量的推理链(知识图谱中的路径),然后再进行去噪(和上一篇论文的剪枝相似),这个是作者的一大创新点,这个模块主要是根据知识的相关性和多样性对检索结果进行重排,以过滤掉噪声信息,同时保持知识的多样性和相关性之间的平衡。HyKGE采用HO片段(假设性回答)重排名机制,通过分片假设性回答和用户问句,去除低密度文本,然后进行知识重排名,过滤噪声知识,保留相关且多样的检索知识。根据每条推理连的相关性,一致性和信息性进行排序。最终得到topK个推理链。作者是使用bge_reranker_large模型,通过非对称指令调优的大规模文本对进行训练,将文本映射到低维密集向量以重新排序,作者的创新在于重排时不仅考虑推理链和Q(用户查询)的相关性,同时考虑推理链和HO(假设性回答)的相关性。

在这里插入图片描述

总结

  1. 基于生物医学知识图谱的提示生成优化方法研究 本文提出了一种名为KG-RAG的框架,以解决大型语言模型(LLMs)在处理专业领域查询时缺乏准确性和可靠性的问题。KG-RAG框架通过识别用户提示中的实体,从知识图谱中提取相关上下文信息,并将其转换为自然语言提示供LLMs生成回答。实验表明,结合SPOKE知识图谱与LLMs(如Llama-2-13b、GPT-3.5-Turbo、GPT-4)可以有效提升医疗领域的问答效果,减少事实错误和过时信息的产生。该方法在计算开销和模型泛化能力上表现优异,为专业领域问答提供了高效、可靠的解决方案。
  2. HyKGE: 提升医疗LLM响应准确性与可靠性的假设知识图谱增强框架 HyKGE框架通过整合大型语言模型(LLMs)的零样本能力和知识图谱(KGs),在检索前扩展知识探索方向,显著提升了医疗领域问答系统的响应质量。该框架包括假设输出模块(HOM),通过精心设计的提示生成高质量的假设输出;命名实体识别模块(NER),从假设输出和用户查询中提取医疗实体;知识图谱检索模块,通过匹配实体搜索知识图谱中的推理链;以及HO片段粒度感知重排模块,过滤噪声知识并保持相关性与多样性的平衡。实验结果表明,HyKGE框架在提升医疗问答系统的准确性和可靠性方面具有显著优势。

相关阅读

【RAG探索第4讲】KG+RAG丨基于生物医学知识图谱优化的大型语言模型提示生成方法
【RAG探索第3讲】LlamaIndex的API调用与本地部署实战
【RAG探索第2讲】大模型与知识图谱的融合之路:优势互补与协同发展
【RAG探索第1讲】通过大模型读取外部文档的创新探索与自适应策略
大模型名词扫盲贴
RAG实战-QAnything
提升大型语言模型性能的新方法:Query Rewriting技术解析
一文带你学会关键词提取算法—TextRank 和 FastTextRank实践

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

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

相关文章

【整洁单元测试】测试气味Test Smells

背景 "Code smell" 是软件开发中的一个术语&#xff0c;指的是代码中可能表明存在问题的某些迹象或模式。这些迹象本身并不表示代码一定有错误&#xff0c;但它们通常表明代码可能难以理解、维护或扩展。Code smells 可以视为一种警告&#xff0c;提示开发者需要进一…

0基础学python-14:python进阶之面向对象

前言 Python是一门解释型、面向对象以及动态数据类型的高级程序设计语言&#xff0c;今天所要说的就是极为重要的概念&#xff0c;面向对象。 一、面向对象的核心概念&#xff1a; 1.类&#xff08;Class&#xff09;&#xff1a; 类是对象的抽象描述&#xff0c;是面向对象编…

HarmonyOS开发中几个常见问题

前言 最近开始HarmonyOS应用开发&#xff0c;遇到一些小问题&#xff0c;也算是自己看官网文档没记住的东西&#xff0c;过程中再记录一下。 一、更改应用的名字和图标 对比看下Android工程中是如何更改的&#xff0c;只需要在清单文件AndroidManifest.xml中&#xff0c;更改…

机器学习 | 深入理解激活函数

什么是激活函数&#xff1f; 在人工神经网络中&#xff0c;节点的激活函数定义了该节点或神经元对于给定输入或一组输入的输出。然后&#xff0c;将此输出用作下一个节点的输入&#xff0c;依此类推&#xff0c;直到找到原始问题的所需解决方案。 它将结果值映射到所需的范围…

CSS综合案例(快报模块头部制作)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 一、前述 二、案例分析 1.样例参看 2.拆分分析 三、案例实施 一、前述 案例&#xff1a;快报模块头部制…

微信小程序基本语法

官网 https://developers.weixin.qq.com/miniprogram/dev/framework/ 视频教程&#xff1a;尚硅谷微信小程序开发教程&#xff0c;2024最新微信小程序项目实战&#xff01; 仿慕尚花坊项目源码&#xff1a;https://gitee.com/abcdfdewrw/flower-workshop 目录 一&#xff0c;初…

热门软件缺陷管理工具2024:专业评测与建议

国内外主流的10款软件缺陷管理工具软件对比&#xff1a;PingCode、Worktile、禅道、Tapd、Teambition、Tower、JIRA、Bugzilla、MantisBT、Trac。 在软件开发过程中&#xff0c;管理缺陷和漏洞常常成为一项挑战&#xff0c;尤其是在项目规模庞大时。选择一个高效的软件缺陷管理…

C#实现自定义标签的设计和打印

背景:最近在进行资产盘点的时候,需要对固定资产设计标签并进行打印。 设计标签:选用的是Fastreport自带的,可拆包忌用的标签设计器;进行标签的模型设计。 软件解压后可直接进行使用。模板的设计基本都是无脑操作,拖拽控件按,放置到固定未知即可;我设计的模板如下: 说…

Vision Pro的增强视觉:企业级Unity插件包实现主摄像头访问

在AR和VR技术的快速发展中,Unity作为跨平台游戏和应用开发的首选引擎,其插件生态的丰富性一直是开发者们关注的焦点。最近,一个专为Vision Pro设计的Unity插件包——EnterpriseCameraAccessPlugin,因其能够通过企业API访问主摄像头的功能,引起了广泛关注。 一、插件背景与…

springboot+vue+mybatis鲜花管理系统+PPT+论文+讲解+售后

随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;鲜花管理系统当然也不能排除在外。鲜花管理系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;采用SSM技…

小阿轩yx-zookeeper+kafka群集

小阿轩yx-zookeeperkafka群集 消息队列(Message Queue) 是分布式系统中重要的组件 通用的使用场景可以简单地描述为 当不需要立即获得结果&#xff0c;但是并发量又需要进行控制的时候&#xff0c;差不多就是需要使用消息队列的时候。 消息队列 什么是消息队列 消息(Mes…

前端框架入门之Vue _el和data的两种写法 分析MVVM模型

目录 _el与data的两种写法 MVVM模型 _el与data的两种写法 查看vue的实例对象 我们在这边注释掉了el属性 这样的话div容器就绑定不了vue实例 当我们可以在这里写一个定时任务 然后再回头指定 这个mount有挂载的意思 就是把容器对象交给vue实例后 去给他挂载指定的对象 &…

MySQL 进阶(四)【锁】

1、锁 1.1、锁的概述 锁就不需要多介绍了&#xff0c;多个用户访问共享数据资源&#xff0c;如何保证数据并发访问的一致性、有效性是数据库最重要的问题。同时&#xff0c;锁冲突也是影响一个数据库并发性能最重要的因素。 MySQL 中锁的划分有三类&#xff1a; 全局锁&…

敏捷营销在AI智能名片微信小程序中的应用探索

摘要&#xff1a;在数字化转型的浪潮中&#xff0c;企业面临着前所未有的挑战与机遇。AI智能名片微信小程序作为一种创新的营销工具&#xff0c;以其便捷性、智能化和高效性&#xff0c;正逐步成为企业连接客户、推广品牌的新宠。然而&#xff0c;如何在快速变化的市场环境中&a…

Automation Anywhere推出新一代AI+自动化企业系统,助力企业实现10倍商业增长

RPA厂商纷纷进军AI Agent ( AI 代理)领域&#xff0c;陆续推出创新产品。最近&#xff0c;Automation Anywhere宣布推出其新的AI 自动化企业系统&#xff0c;该系统结合AI和自动化技术&#xff0c;以实现指数级的业务成果。 在Imagine 2024大会上首次亮相的这款新产品&#xf…

机器学习中的梯度下降

本文只是简单解释一下梯度下降&#xff0c;其中涉及到的公式并没有展示说明。 1.什么是梯度&#xff1f; 梯度也可以理解为导数。 在一维空间中&#xff1a;梯度就是导数&#xff0c;或者说对于一个线性函数&#xff0c;也就是线的斜率。 2.什么是梯度下降&#xff1f; 梯度是…

字典树实现

一、字典树 字典树&#xff08;Trie树&#xff09;是一种多叉树结构&#xff0c;每条边代表一个字符&#xff0c;从根节点到其它节点的路径构成一个单词。其具有较好的查询性能&#xff0c;可以用于有效地存储大量字符串&#xff0c;并支持高效的查找、插入和删除操作。 二、…

浏览器缓存:强缓存与协商缓存实现原理有哪些?

1、强缓存&#xff1a;设置缓存时间的&#xff0c;那么在这个时间内浏览器向服务器发送请求更新数据&#xff0c;但是服务器会让其从缓存中获取数据。 可参考&#xff1a;彻底弄懂强缓存与协商缓存 - 简书 2、协商缓存每次都会向浏览器询问&#xff0c;那么是怎么询问的呢&…

java 项目使用 acitiviti 流程引擎中的人员设置

学习目标&#xff1a; 目标 [ ]了解 java 项目使用 acitiviti 流程引擎中的人员设置 知识小记&#xff1a; - [x] 1、人员选择说明 - [x] 2、分配任务候选人 任务的候选人是指有权限对该任务进行操作的潜在用户群体&#xff0c;这个用户群体有权限处理(处理、完成)该任务…

第九课:服务器发布(静态nat配置)

一个要用到静态NAT的场景&#xff0c;当内网有一台服务器server1&#xff0c;假如一个用户在外网&#xff0c;从外网访问内网怎么访问呢&#xff0c;无法访问&#xff0c;这是因为外网没办法直接访问内网&#xff0c;这时候需要给服务器做一个静态NAT。 静态NAT指的是给服务器…