我们今天选择其中关于RAG的几个代表性的一些工作,包括关于RAG中的细粒度引文生成思路、Medical Graph RAG做医疗领域问答的方案(温习一下),来看看,会有收获。
大模型中生成精细引用:《Learning Fine-Grained Grounded Citations for Attributed Large Language Models》,https://arxiv.org/pdf/2408.04568,代码在https://github.com/LuckyyySTA/Fine-grained-Attribution。
使用 Sphere 语料库检索与查询相关的前 100 个文档。 通过 RankVicuna 重新排名,选出与每个查询最相关的前 5 个文档。 利用 RankVicuna 模型对检索到的文档进行排序,确保选取的文档与查询高度相关。 确保生成的训练数据是高质量的,通过过滤掉那些产生非信息性答案或不符合归属标准的查询。 属性答案生成阶段
使用 ChatGPT 根据给定的查询和检索到的前 5 个文档生成带有对应引用的答案。 通过上下文学习(in-context learning)来生成信息丰富且正确引用来源的回答。 在数据过滤阶段
信息性(Informative) :评估答案是否为问题提供了足够的信息。可归属性(Attributable) :确定答案是否正确归属到引用的文档。使用 ChatGPT 进行初步的信息性注释,排除非信息性答案。
训练一个鉴别器(discriminator),基于人类标注的数据,评估答案的可归属性,将其分为三个等级:完全支持、部分支持或不支持。
将鉴别器的输出映射到一个可归属性得分,并为每个属性答案得出平均得分。
最终结果
通过设置一个得分阈值(例如,0.8),系统地排除得分低于该阈值的答案,以确保合成数据的可靠性。 通过这一流程,最终生成了大约 8000 条训练数据条目。 2、两阶段训练框架FRONT
FRONT框架如何通过两阶段训练过程来提升LLMs的细粒度归因能力,从而生成更高质量、更可靠的文本,其目标还相对清晰:
生成精确的引用 :LLM能够从文档中提取出精确的、支持性的信息片段作为引用。生成有根据的答案 :使用这些引用来生成答案,确保答案的准确性和可验证性。减少幻觉 :通过一致性对齐减少模型生成不真实信息的风险。增强用户验证 :通过细粒度的引用,使用户更容易验证模型生成的答案。1)阶段1Grounding Guided Generation (G3)
这一阶段的目标是让大型语言模型(LLM)能够从源文档中提取支持性引用,并用这些引用来指导生成有根据的答案。
步骤1 :使用大型语言模型,接收一个问题(Q)和检索到的文档(Documents)作为输入。步骤2 :模型首先选择相关的引用(Grounding),这些引用是来自文档的片段,并且每个引用都与文档标识符相关联。步骤3 :然后,模型根据这些选定的引用生成一个答案(ANSWER),答案中包含了这些引用。2) Consistency-Aware Alignment (CAA)
在G3阶段,尽管模型能够生成引用,但这些引用与生成的答案之间有时会出现不一致性。CAA阶段的目的是增强引用和答案之间的一致性。
步骤1 :使用一致的答案(Gold Answer)和不一致的答案(Inconsistent Answer),它们都是在G3阶段生成的。步骤2 :通过直接偏好优化(Direct Preference Optimization, DPO),模型学习如何区分一致和不一致的答案。步骤3 :优化过程中,模型通过最小化损失函数来调整其策略,以便生成与高质量答案(一致答案)一致的响应,同时减少与低质量答案(不一致答案)的一致性。二、Medical Graph RAG做医疗领域问答的方案 LLM在特定用途部署时的复杂性,以及在需要精确度的领域(如医学)中可能产生的错误结论。
Medical Graph RAG:通过图检索增强生成实现医疗大模型:《Medical Graph RAG: Towards Safe Medical Large Language Model via Graph Retrieval-Augmented Generation》:https://arxiv.org/pdf/2408.04187 ,代码:https://github.com/MedicineToken/Medical-Graph-RAG/tree/main,主要提出基于图的检索增强生成(Retrieval-Augmented Generation, RAG)框架,通过增强大模型,生成基于证据的结果,从而在处理私人医疗数据时提高安全性和可靠性。
从实现思路上看,与微软提出的graph-rag的思路十分类似。
1、实现思想
MedGraphRAG通过为处理私人医疗数据而定制的医学图检索增强生成(RAG)来增强大型语言模型(LLMs)。
它包括将医学文档分割成块,提取实体,并将其组织成跨越三个层次的层次图结构——从用户提供的文档到基础医学信息。
这些实体形成meta元数据图谱,然后根据内容相似性合并成一个综合的全局图。对于用户查询,LLM从图中高效地检索并综合信息,实现精确且与上下文相关的医学响应。
1、医学图谱构建
1)语义文档分割
大型医学文档通常包含多个主题或多样化的内容。为了有效处理这些文档,首先将其分割成符合大型语言模型(LLMs)上下文限制的数据块。
基于标记大小或固定字符的传统方法通常无法准确检测主题的微妙变化。因此,这些块可能无法完全捕捉预期的上下文,导致意义的丰富性丧失。
为了提高准确性,采用了字符分离与基于主题的分割相结合的方法。
具体地,使用静态字符(换行符号)将文档中的各个段落隔离开来。然后,对文本进行语义分块,方法包括使用命题转移,从原始文本中提取独立的陈述。
然后,对文档进行顺序分析,以确定每个命题是与现有块合并还是启动一个新块。这个决定是通过LLM的零样本方法做出的。
为了减少顺序处理产生的噪声,实现一个滑动窗口技术,一次管理五个段落,通过移除第一个段落并添加下一个段落来不断调整窗口,保持对主题一致性的关注。
设置了一个硬性阈值,即最长的块不能超过LLM的上下文长度限制。文档分块后构建了每个数据块的图。
2)元素提取
从每个源文本块中识别并提取图节点的实例。这是通过设计一个LLM提示来完成的,该提示旨在识别文本中的所有相关实体。
对于每个实体,LLM被提示输出名称、类型和描述。名称可以是文档中的确切文本,或者是在医学背景中常用的派生术语,仔细选择以反映适合后续处理的专业医学术语。
类型由LLM从预定义表中选择,描述是LLM生成的实体的解释,上下文化在文档中。为确保模型的有效性,提供一些示例来指导LLM生成所需的输出。
对于每个实体数据结构,包括一个唯一的ID来追踪其源文档和段落。这个标识符对于从源检索信息至关重要,可以在以后生成基于证据的响应。
为了提高提取的质量并减少噪声和变异,多次重复提取过程。这种迭代方法鼓励LLM检测它可能最初忽视的任何实体。继续或停止重复过程的决定也是由LLM本身确定的。
3)层次链接
医学是一个专业领域,其特点是一贯使用精确的术语系统,并建立在许多既定真理的基础上,如疾病特定症状或药物副作用。
在该领域,LLMs不应该扭曲、修改或添加创造性或随机元素到数据中,这与它们在其他约束较少的上下文中的应用不同。
认识到这一点,开发了一种独特的结构,将医学领域中的每个实体链接到基础的医学知识和术语。这种方法旨在为每个实体概念提供可信的来源和深刻的定义,从而增强响应的真实性并减少在医学中应用LLMs时出现幻觉的可能性。
具体来说,构建了一个三层的RAG数据结构来开发一个全面的医学图。
第一层由用户提供的文档组成,例如来自特定医院的高度机密的医疗报告。按照前面描述的方法提取这些文档中的实体后,将它们链接到更基础的层次——通常接受的信息;
第二层是使用医学教科书和学术文章构建的 。
预先使用前面概述的相同方法从这些医学来源构建一个图,然后再接收真实的用户文档。第一层的实体根据LLMs检测到的相关性链接到第二层的相应实体。
然后,第二层的实体连接到第三层,其中包括几个定义良好的医学术语及其知识关系。这个基础信息来自可靠的资源,如统一医学语言系统(UMLS),它整合了各种健康和生物医学词汇及其语义关系。
对于每个实体,将其实体名称的文本嵌入与UMLS中的医学词汇进行比较,选择余弦相似度低于指定阈值的词汇。每个链接的词汇进一步与其在UMLS中的专业定义和关系相关联,这些关系被翻译成纯文本。
4)关系链接
指示LLM识别所有明确相关实体之间的关系。这个决定基于每个实体的全面信息,包括其名称、描述、定义以及相关的较低层次的医学基础知识。
确定的关系指定了源实体和目标实体,提供了它们关系描述,并包括一个分数,指示这种关系的密切程度。
为了在评估关系距离时保持秩序和精度,提示LLM从预定义的描述符列表中选择——非常相关、相关、中等、无关、非常无关。
执行此分析后,为每个数据块生成了一个加权有向图。这些图作为系统中的基本构建块,并被称为元图。
5)标签生成和合并图
在构建了元图之后,扫描每个块中的数据,以开发一个链接所有元图的全局图。合并的元图中的节点将根据在上一段中使用的链接规则链接在一起。
为了有效合并,使用LLM根据预定义的医学类别(如症状、患者病史、身体功能和药物)总结每个元图的内容。
LLM为每个类别生成摘要,从元图的内容中派生出一个简洁描述其主题的标签列表。
使用这些标签,LLM计算两个元图之间的相似性 。相似度最高的被认为是合并的候选对象。
合并后的图成为一个新的图,但保留了其原始的元图和标签,以便以后更容易地索引。
随后为新图生成新的摘要标签信息,并重新计算其与其他图的相似性,以进行潜在的进一步合并。
这个过程可以重复进行,直到只剩下一个全局图。
然而,随着摘要标签信息的累积,它会失去细节,呈现出合并效果和效率之间的权衡。
在实践中,限制这个过程进行24次迭代,以防止细节的过度丢失。
2、基于图的检索
构建图之后,LLM通过称为U-检索的策略高效地检索信息以响应用户查询。
首先生成摘要标签描述,并使用这些来识别最相关的图,通过自上而下的匹配过程 。
这个过程从较大的图开始,逐步索引到它包含的较小图。这个匹配过程重复进行,直到到达元图层,并检索多个相关实体。
随后,收集所有与这些激活实体及其TopK相关实体相关的相关内容 。这包括实体本身的全部内容、它们关联的基础医学知识、它们与其他实体的相关性和关系,以及任何链接实体的内容 。
一旦确定了相关内容,LLM就被提示使用这些信息生成中间响应,以文本形式呈现 。这个中间响应被保留,并与更高级别图的摘要标签信息结合起来,形成更详细或更精细的响应。
LLM以自下而上的方式重复这个响应生成过程,直到到达最高层,生成最终响应,扫描了沿轨迹索引的所有图 。
这种方法允许LLM在与图中所有数据交互时具有全面概览,同时通过以摘要形式访问不太相关的数据也保持了效率。
3、具象化的效果
可以看看最终效果
总结 本文主要讲了2个有趣的工作,基于引文生成以及Medical GraphRAG,属于RAG的范畴,里面的算法思想都很值得看。