论文阅读_RAG融合现有知识树_T-RAG

英文名称: T-RAG: LESSONS FROM THE LLM TRENCHES
中文名称: T-RAG:来自LLM战壕的经验教训
链接: https://arxiv.org/abs/2402.07483
作者: Masoomali Fatehkia, Ji Kim Lucas, Sanjay Chawla
机构: 卡塔尔计算研究所, 哈马德·本·哈利法大学
日期: 2024-02-12
引用次数: 0

1 摘要

  • 目标:开发一个可以安全、高效地回答私有企业文档问题的大型语言模型(LLM)应用程序,主要考虑数据安全性、有限的计算资源以及需要健壮的应用程序来正确响应查询。
  • 方法:应用程序结合了检索增强生成(RAG)和微调的开源 LLM,将其称之为 Tree-RAG(T-RAG)。T-RAG 使用树结构来表示组织内的实体层次结构,用于生成文本描述,以增强对组织层次结构内的实体进行查询时的上下文。
  • 结果:我们的评估显示,这种结合表现优于简单的 RAG 或微调实现。最后,根据构建实际应用的 LLM 的经验,分享了一些获得的教训。

2 读后感

这篇文章的创新点逻辑比较简单:除了基本的 RAG 外,定位了问题中的实体,在事先定义好的实体树中寻找其父实体,并将其加入到问题的上下文中。可以视为对问题中实体抽象的方法。

我个人比较喜欢有两点:

第一点是:这是一个对问题抽象化,并与现有知识融合的范例。对问题进行规范化和抽象化后再提问或存储,构建更复杂的存储结构,与原有知识融合,这可能是大模型领域一个重要的问题。与此相比,之前 RAG 直接将文档打散成碎片的方式确实过于简单粗暴。

第二点是:论文描述了本地 RAG 的具体实现方法,一些在实践中的常见问题的总结,例如在 LLAMA-7B 模型上精调所需的硬件,以及精调对原模型能力的影响。干货很多,看完可以少走一些弯路。

3 方法

图 1:Tree-RAG(T-RAG)的工作流程。对于给定的用户查询,在向量数据库中搜索要用作上下文的相关文档块。此外,如果查询提及组织中的实体,则会从实体树中提取有关这些实体的信息并将其添加到上下文中。我们在从组织文档生成的指令数据集上对 Llama-2 7B 模型进行了微调。我们使用微调模型来生成响应。

3.1 指令数据集准备

先使用 LangChain 库将原始 PDF 文件解析为文本格式,表格和结构图则由人工专家手动转化为文本。

然后,根据文档中的各个节标题,将每一节分解成一个独立的块。通过在几轮迭代中为每个块生成一组(问题、答案)对。

  • 在第一次迭代中,对于每个块,提示 Llama-2 模型为提供的区块生成问题和答案。提示模型生成各种问题类型,例如对或错、摘要、简答等。记录提供问题、答案和相关块的模型响应。
  • 在第二次迭代中,对于每个块,提示模型一个对话示例,并要求在用户和 AI 助手之间生成一个对话。
  • 在第三次迭代中,模型被要求执行相同的任务(为给定的块生成问题和答案); 在此迭代中,为模型提供了由人类专家根据文档创建的问题示例。

汇总各种迭代过程中产生的问题和答案,以此创建一个数据集。对生成的问题和答案进行了人工检查,并剔除了重复的问题。最后,得到了一个包含 1,614 个问答对的数据集。我们将这个数据集随机分成了 90% 的训练集和 10% 的验证集。

3.2 LLM 微调

使用 QLoRA(Hugging Face 'peft' 库)对基本的 LLM 模型,在 Q&A 指令数据集上进行训练。微调过程在 4 个内存为 24G 的 Quadro RTX 6000 GPU 的设备上进行。

3.3 实体树

实体树包含了组织内实体及其在层次结构中位置的信息。好像树中,每个节点都代表一个实体,父节点表示它所在的组。例如,在图 2 所示的难民署组织结构中,难民署创新处是隶属于副高级专员的一个实体。

在检索过程中,实体树被用来增强向量数据库检索到的上下文。解析器模块会在用户查询中寻找与组织内实体名称匹配的关键字。如果找到匹配项,就会从树中提取有关每个匹配实体的信息,并将其转换为文本语句,这些语句提供了关于实体及其在组织层次结构中的位置的信息。然后,这些信息会与从向量数据库中检索到的文档块结合起来,形成上下文。这样,当用户询问有关实体的问题时,模型就能访问到有关实体及其在组织层次结构中位置的信息。

3.4 配置

在本地部署应用程序时,使用 Llama-2 模型,并采用 Chroma DBvector 数据库来存储文档块以进行上下文检索。

表 -2 展示了几种实验配置,其中,第二行的 Finetuned 在提问时并未使用上下文。而第三行的 T-RAG 则使用了来自两个来源的上下文信息:从原始文档生成的指令数据集中的问题和答案对,以及树上下文,该上下文为用户查询中提到的实体提供从实体树中提取的信息。

4 实验结果

4.1 效果评估

采用自动和人工方式来评估语言模型(LLMs)。在自动评估中,使用 GPT-4 语言模型作为评估工具。研究表明,语言模型的评估结果与人类对各种任务的评估结果是一致的。

表 -3 中 N 代表每组问题的数量,将回答手动评分为“正确”(C),“正确但冗长”(CV)。T 是回答正确的总数(T = C + CV)。可以看出,尽管 T-RAG 的效果较好,但它有可能生成冗长的答案(测试数据不多)。

4.2 微调模型后过拟合

模型微调可能导致模型忘记其在训练前所学习的内容。为了评估过拟合情况,使用了大规模多任务语言理解(MMLU)基准测试来对比微调前后的效果。结果显示,其影响较小。

5 经验教训总结

  • 虽然构建一个初始的 RAG 应用程序很容易,但要使其健壮并非易事,需要领域知识专家的帮助,并需要做出许多设计选择以优化系统的不同组件。
  • 微调的模型可能对问题的措辞敏感。
  • 通过将信息纳入模型的参数,微调模型可以节省 LLM 的有限上下文窗口的空间,从而减少所需的上下文量。
  • 在系统开发的各个阶段,让最终用户参与测试可以生成反馈,帮助引导开发过程中的决策。
  • 树提供了一个适合表示层次信息(如组织中的实体)的结构,可以用来增强上下文。

6 相关论文

  • 先抽象再提问的另一种方法:论文阅读_提示工程_通过抽象激发大模型的推理能力

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新版Ceph( Reef版本)文件存储简单对接k8s(下集)

假如ceph集群已经创建 1.创建cephfs_pool存储池 ceph osd pool create fs_kube_data 16 162.创建cephfs_metadata存储池 ceph osd pool create fs_kube_metadata 16 163 创建cephfs ceph fs new cephfs01 fs_kube_metadata fs_kube_data4 设置最大活动数 ceph fs set cephfs01…

程序员代码面试指南题目解析(一)

题目一:如何仅用递归函数和栈操作逆序一个栈 题目要求: 一个栈依次压入 1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈 转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,但…

移动硬盘加了PD充电口给设备供电:未来存储与供电的完美结合

添加图片注释,不超过 140 字(可选) 一、引言 随着科技的飞速发展,电子设备在人们的日常生活中扮演着越来越重要的角色。与此同时,设备间的互联互通和供电方式的便捷性也成为了用户关注的焦点。移动硬盘,作…

docker的centos容器使用yum报错

错误描述 学习docker过程中,基于 centos 镜像自定义新的镜像。拉取一个Centos镜像,并运行容器,容器安装vim,报错了。 报错:Error: Failed to download metadata for repo appstream: Cannot prepare internal mirror…

【数组算法】598. 区间加法

给你一个 m x n 的矩阵 M 和一个操作数组 op 。矩阵初始化时所有的单元格都为 0 。ops[i] [ai, bi] 意味着当所有的 0 < x < ai 和 0 < y < bi 时&#xff0c; M[x][y] 应该加 1。 在 执行完所有操作后 &#xff0c;计算并返回 矩阵中最大整数的个数 。 示例 1: …

已经安装tensorflow,仍报错No module named ‘tensorflow‘

在安装某些python虚拟环境的教程文章中&#xff0c;经常看到有评论区说安装了但是调用显示无模块&#xff0c;例如pytorch和tensorflow等等。 其实跟之前我写过的一篇文章解决方法类似&#xff0c;就是python项目中需要应用哪个虚拟环境&#xff0c;这个项目的python解释器就选…

C语言----斐波那契数列

各位看官们好&#xff0c;当我写了上一篇博客杨辉三角后&#xff0c;有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)f(n-2)f(n-1)。就是当前是前两项之和&#xff0c;然后下标1和0都是1.从第三项开始计算的。那么我们知道规律&#xff0…

1.分布式-理论

目录 一、什么是分布式系统 二、CAP理论 1.一致性Consisency 2.可用性(Availability) 3.分区容错性(Partition tolrance) 三、BASE理论 1.Basically Available(基本可用) 2.Soft state&#xff08;软状态&#xff09; 3.Eventually consistent&#xff08;最终一致性&a…

QueryPerformanceCounter实现高精度uS(微妙)延时

参考连接 C# 利用Kernel32的QueryPerformanceCounter封装的 高精度定时器Timer_kernel32.dll queryperformancecounter-CSDN博客https://blog.csdn.net/wuyuander/article/details/111831973 特此记录 anlog 2024年5月11日

matlab的imclose()详解

J imclose(I,SE) J imclose(I,nhood) 说明 J imclose(I,SE) 使用结构元素 SE 对灰度或二值图像 I 执行形态学闭运算。形态学闭运算是先膨胀后腐蚀&#xff0c;这两种运算使用相同的结构元素。 J imclose(I,nhood) 对图像 I 执行闭运算&#xff0c;其中 nhood 是由指定结…

虚表,虚函数习题

6. 关于虚表说法正确的是&#xff08;d &#xff09; A&#xff1a;一个类只能有一张虚表 多重继承 B&#xff1a;基类中有虚函数&#xff0c;如果子类中没有重写基类的虚函数&#xff0c;此时子类与基类共用同一张虚表 即使子类重写了基类的虚函数&#xff0c;此时子类与…

Linux下安装mysql8.0(以rpm包安装)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; Linux下安装mysql8.0&#xff08;以rpm包安装&#xff09;https://myweb.myskillstree.cn/125.html 目录 1、查操作系统信息 2、下载mysql 8.0.34的rpm包 …

Python基础详解四

一&#xff0c;Json解析 字典转换为JSON&#xff1a; import jsondata [{"name":"袁震","age":20},{"name":"张三","age":21},{"name":"李四","age":22}] str json.dumps(data) …

Zotero 使用入门(笔记)

参考文献&#xff1a;Zotero入门完整教程-共27节-免费&#xff0c;李长太>&#xff0c; 仅供参考学习

【stm32-2】按键控制LED光敏传感器控制蜂鸣器

1.按键控制LED uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输入数据寄存器某一个端口的输入值 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); //读取整个输入数据寄存器 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDe…

REFORMER: 更高效的TRANSFORMER模型

大型Transformer模型通常在许多任务上都能达到最先进的结果&#xff0c;但是训练这些模型的成本可能会非常高昂&#xff0c;特别是在处理长序列时。我们引入了两种技术来提高Transformer的效率。首先&#xff0c;我们用一种使用局部敏感哈希的点积注意力替换了原来的点积注意力…

攻防世界-web-unseping

题目 知识点 PHP代码审计PHP序列化和反序列化PHP中魔术方法命令执行绕过方式 解读源码 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function …

【负载均衡式在线OJ项目day6】源文件路由功能及文件版题库构建

一.前言 前文讲到了OJ模块的设计思路&#xff0c;毫无疑问这是一个网络服务&#xff0c;我们先使用httplib&#xff0c;将源文件的路由功能实现&#xff0c;先把框架写好&#xff0c;后续再更改回调方法。 随后计划编写Modify模块&#xff0c;提供增删查改题库的功能(主要是查…

探索生产者/消费者模式:解决并发编程中的资源竞争

序言 在并发编程中&#xff0c;资源竞争是一个常见的问题。为了有效地管理资源并确保线程安全&#xff0c;需要采用一些有效的方法。其中之一是生产者/消费者模式&#xff0c;它是一种经典的并发设计模式&#xff0c;用于解决生产者和消费者之间的协作问题。本文将深入探讨生产…

sentinel-dashborard下发流控规则未生效排查解决

Sentinel简介 Sentinel是阿里巴巴开源的一个流量控制组件&#xff0c;它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel的核心思想是&#xff1a;通过动态设置的规则&#xff0c;对进入系统的流量进行控制&#xff0c;…