提升LLM效果的几种简单方法

news2024/11/28 21:37:06

其实这个文章想写很久了,最近一直在做大模型相关的产品,经过和团队成员一段时间的摸索,对大模型知识库做一下相关的认知和总结。希望最终形成一个系列。

对于知识库问答,现在有两种方案,一种基于llamaindex,一种基于langchain +LLM,我们目前采用的就是后者,先来看一下这个方式的技术架构图:

如下图所示,整个系统流程是很清晰的,但涉及的点颇多,所以决定最终效果的关键点包括且不限于:文本分割算法、embedding、向量的存储 搜索 匹配 召回 排序、大模型本身的生成能力

使用 LangChain 或 LlamaIndex 等框架,可以使用少量代码就构建一个简单的大模型问答系统,例如文档的聊天机器人。

但是,用这五行代码构建的机器人效果就可能差强人意了。按照教程构建的系统可能仅仅是演示的demo,距离实际生产环境的落地应用之间还是存在一定的差异。

接下来我们说一下如何从理论上来提高LLM的问答效果:

一、提示词工程

这是改进大型语言模型性能的起点,也是最容易上手的方法之一。通过巧妙构建提示,可以引导LLM生成与需求一致的内容。这是一种像对话一样与LLM进行交流的方式,通过清晰的问题或指令来获取所需答案。从最简单的方法出发,提示工程是一种改进LLM性能的明智之举。

例如,要提高LLM效果,可以使用提示如“解释合同法的主要原则”或“分析最新的知识产权案例”。简单明了的提示将帮助LLM更好地理解您的需求。通过这些明确的提示,LLM将更容易理解需求,并生成更有针对性的答案。这是一个简单而强大的方法,适用于各种领域和任务。

提示工程是提高LLM性能的起点,但只是改进LLM的众多方法之一。根据需求,还可以使用其他高级方法,如检索增强生成和参数高效微调,以进一步提升LLM的水平。

二、检索增强生成(RAG)

这是一种更高级的方法,可以让LLM更智能地生成内容。RAG结合了信息检索和生成模型,使LLM能够从大量文本中提取知识并将其整合到生成的答案中。这对于LLM来说非常有用,因为可以要求LLM在生成答案之前检索相关的内容,从而提供更深入和准确的回答。

RAG的核心概念是联合使用两个关键组件:检索器和生成器。

检索器(Retriever):这是RAG的第一部分,它负责从大量的文本数据中检索相关信息。检索器可以利用数据库、文本、网页等来搜索相关信息。这通常涉及到使用自然语言处理技术,如词向量模型和倒排索引,以快速而准确地找到与给定主题或问题相关的文本片段。

生成器(Generator):这是RAG的第二部分,它基于检索器提供的信息生成答案。生成器是一个大型语言模型。它接收来自检索器的信息,将其整合到生成的答案中,以提供深入和有洞察力的回答。

RAG的优势在于它允许LLM从广泛的资源中汲取知识,以更准确、全面和信息丰富的方式回答问题。例如,如果要求LLM解释特定的法律条款,检索器可以搜索法律文本以找到相关信息,然后生成器可以将这些信息转化为易于理解的解释。

此外,RAG还具备自动验证和校对答案的能力,因为检索器提供的信息可以用来验证生成的答案是否与检索内容一致。

1. 数据清理

RAG 将LLM的能力与特定数据联系起来。如果数据质量不高,那么整个系统将会受到影响。例如,使用的数据包含冲突或冗余信息,那么检索的过程将很难找到正确的上下文。当这种情况发生时,LLM执行的生成步骤可能不是最佳的。

假设基于某个产品的帮助文档构建一个聊天机器人,发现它运行不佳。那应该查看的第一件事就是输入系统的数据是否存在明显的不合理,包括文档切分是否合理?文档是否存在矛盾或冲突地方?文档是否过长或过短?文档是否存在多模态数据?如果作为人类无法轻松判断需要查看哪个文档来回答常见查询,那么检索系统也将无法做到这一点。

针对长文档、多文档的情况,常见的方法之一是使用LLM来创建所有文档的摘要。然后,检索步骤首先对这些摘要进行搜索,然后仅针对相关摘要,进一步检索更详细的信息,这种二阶检索的方式有点参考搜索引擎检索思路。

2. 索引类型

索引是LlamaIndex和LangChain的核心概念。它是保存检索系统的对象。RAG 的标准方法涉及embedding和相似性搜索。将上下文数据分块,做文本向量化,需要查询时,从上下文中找到向量相似的部分。

这种方法效果很好,但并不是适合所有的场景。例如,查询是包含特定名称的商品,就是基于关键字的搜索。词向量、关键词甚至传统机器学习指标,都是可以参考的。

从领域数据中,如何获取相关信息是决定RAG系统的上限,设计合理的、适配场景的索引值得花费一定的时间和精力。

3. 分块方法

将上下文数据分块(chunk)是构建 RAG 系统的核心部分。框架抽象了分块过程,但实际场景下应该考虑块的大小。块大小很重要。一般来说,较小的块通常可以改善检索,但可能会导致生成过程缺乏周围的上下文。有很多方法可以实现分块。这篇文章列出了一些需要考虑的策略。

4. 提示工程

常见的一个提示词是:

根据给定的上下文信息回答问题

在实际项目中,提示词是非常脆弱和敏感的,当前的大模型对提示具有非常高的依赖性,这种依赖性与模型的能力成反比,也就是模型的能力越弱,对提示的依赖越强。选择不同的模型、不同的数据,甚至不同的索引,都需要调整提示来得到一个比较优秀的结果。

在实际项目中,提示词是非常脆弱和敏感的,当前的大模型对提示具有非常高的依赖性,这种依赖性与模型的能力成反比,也就是模型的能力越弱,对提示的依赖越强。选择不同的模型、不同的数据,甚至不同的索引,都需要调整提示来得到一个比较优秀的结果。

5. 元数据过滤

改进检索的一个非常有效的策略是将元数据添加到块中,然后使用它来帮助处理结果。日期是要添加的常见元数据标记,因为它允许按时间进行过滤。想象一下,在构建一个允许用户查询其电子邮件历史记录的应用程序。最近的电子邮件可能会更相关。但从词向量的角度来看,我们不知道它们是否与用户的查询最相似。这提出了构建 RAG 时要记住的一般概念:相似≠相关。可以将每封电子邮件的日期附加到其元数据中,然后在检索期间优先考虑最近的上下文。

6. 使用查询路由

对内容构建多个分支,将查询内容分门别类,查询经过判断逻辑后执行特定分支,而不是全部内容混为一谈。

拥有多个索引通常很有用。然后,当查询进入时,可以将查询路由到适当的索引。例如,可能有一个处理摘要问题的索引,另一个处理尖锐问题的索引,以及另一个适合日期敏感问题的索引。如果尝试将所有问题建模到一个索引上,可能在最终效果上反而有下降。相反,可以将查询路由到正确的索引。另一个用例是将一些查询定向到基于关键字的索引,如第 2 节中所述。

一旦构建了索引,只需在文本中定义每个索引的用途即可。然后在查询时,LLM将选择适当的选项。LlamaIndex 和 LangChain 都有这方面的工具。

7.重新排名

对结果进行重新排序,是解决相似性和相关性之间差异问题的一种解决方案。类似检索系统的精排和粗排逻辑,通过不同的排序方法,进一步缩小范围,获取更加相关的上下文信息。

8. 多次查询

思维链在一定程度上能够提升模型的效果,但对于比较复杂或者需要多次判断的任务,将步骤进行人为的拆解为多次执行,效果上比一次执行多个步骤要好一些。每个步骤都是简单的任务,模型能够更加理解输入,且对上下文长度的依赖有所降低。

9. 微调模型

基于向量化的相似性是 RAG 的标准检索机制。数据被分块并向量化到索引中。当查询进入时,它也会被嵌入以与

问题是,预训练模型关于嵌入空间中相似内容的概念可能与您的上下文中相似内容不太一致。想象一下正在处理法律文件。希望嵌入更多地基于您的领域特定术语(例如“知识产权”或“违反合同”)对相似性的判断,而不是基于“特此”和“协议”等一般术语。

可以通过微调嵌入模型来解决此问题。这样做可以将检索指标提高 5-10%。但这需要更多的时间和精力,但可以对检索性能产生显著的影响。这个过程比您想象的要容易,因为 LlamaIndex 可以帮助您生成训练集。

10.重新思考任务

如果通过上述的步骤,整个RAG系统距离目标还是有一定的差距,那么需要重新对任务进行思考和定义,包括数据是否被正确使用、上述方法是否可以进行组合以进一步提升效果等。

小结

使用 RAG 进行构建可能会让人非常折磨,因为它很容易工作,但很难很好地工作。希望上述策略能为你如何弥合能用和可用之间的差距提供一些启发。这些想法中没有一种是永远有效的,而且这个过程就是实验、尝试和错误的过程。在这篇文章中,没有深入探讨如何评估系统的性能。目前,评估更像是一门艺术,而不是一门科学,但重要的是建立某种类型的系统,可以持续检查。这是判断更改是否产生影响的唯一方法。

三、参数高效微调(PEFT)

对于那些想要进一步优化LLM性能的人来说,PEFT是一个不错的选择。通过微调模型的参数,可以使LLM更适应特定领域或任务。

PEFT的核心思想是微调LLM的参数,以使其更好地适应特定领域、任务或需求。微调常见的步骤如下:

1. 数据收集和标注:

首先,需要收集与研究相关的大量数据。然后,需要标注这些数据,以确保LLM能够理解其中的关键信息。

2. 微调LLM:

接下来,选择合适的方法,利用上述标注的监督数据进行微调,包括Lora、P-Tuning等方式。微调的目标是让LLM更好地理解特定领域的语言和概念,以便生成更准确和相关的答案。

3. 评估和优化:

微调后,需要进行评估以确保LLM在任务上表现出色。这可以通过与专家合作进行评估、或者使用常见指标来完成。根据评估结果,可以进一步优化LLM的参数,以获得更高的性能。

PEFT的优势在于它可以让LLM变得更加专业化和高度定制化,以满足特定任务的需求。例如,如果在研究税法,可以微调LLM的参数,以便其更好地理解税法法规和税务原则,从而提供更详细和准确的答案。

当然,这些只是提高LLM性能的几种方法之一,还有很多其他技巧和策略可供探索。最好的方法是根据需求和目标,结合这些方法,以充分发挥LLM的潜力。

https://mp.weixin.qq.com/s?__biz=MzIxMjY3NzMwNw==&mid=2247484087&idx=1&sn=bbb5d4ae74a19bab8e51c83271c95cc9

https://blog.csdn.net/2301_78285120/article/details/135771092

https://www.wehelpwin.com/article/4665

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

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

相关文章

绝地求生:[更新周报] 4/3 不停机更新:无上新、众多物品和活动即将下架!

大家好,我闲游盒;本周三4月3号,绝地求生不会有停机时间,大家可以随便玩~ ▲本周可选地图池 亚服/东南亚服:艾伦格、荣都、萨诺、米拉玛、帕拉莫; 日服/韩服KAKAO服:艾伦格、泰戈、萨诺、荣都、…

​港中文提出CLongEval中文基准测试集,准确评估大模型长上下文能力

论文题目: ClongEval: A Chinese Benchmark for Evaluating Long-Context Large Language Models 论文地址: https://arxiv.org/abs/2403.03514 代码地址: https://github.com/zexuanqiu/CLongEval 研究背景和贡献 为了使 LLM 能够支持更复杂…

STM32学习笔记(9_2)- USART串口外设

无人问津也好,技不如人也罢,都应静下心来,去做该做的事。 最近在学STM32,所以也开贴记录一下主要内容,省的过目即忘。视频教程为江科大(改名江协科技),网站jiangxiekeji.com 在STM3…

ES-7.12-官网阅读-ILM-自定义内置ILM策略

官网地址:Tutorial: Customize built-in ILM policies | Elasticsearch Guide [7.12] | Elastic 教程:自定义内置ILM策略(Customize built-in ILM policies) Elasticsearch包含如下内建ILM 策略: logs(日…

【项目技术介绍篇】若依项目代码文件结构介绍

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

数据可视化高级技术(Echarts)

目录 (一)数据可视化概念及Echarts基础知识 数据可视化的好处: 数据可视化的目标 数据可视化的基本流程 (二)数据图表 类别比较图表: 数据关系图表: 数据分布图表: 时间序列…

增加网站搜索引擎排名的6个准则

怎样提高网站排名首页 在竞争激烈的网络世界中,网站的排名对于吸引流量和提升曝光至关重要。登上搜索引擎结果页面的首页,意味着更多的曝光和点击率。以下是一些方法,可以帮助您提高网站在搜索引擎中的排名,让其跻身首页&#xf…

基于STC12C5A60S2系列1T 8051单片机的数码管显示IIC总线器件AT24C02记录单片机上电次数应用

基于STC12C5A60S2系列1T 8051单片机的数码管显示IIC总线器件AT24C02记录单片机上电次数应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍液晶显示器LCD1602简单介绍…

Vmware虚拟机远程SSH连接失效解决方法及分析过程

问题描述 系统为CentOS7 64位 一向能够正常连接 在某次使用FinalShell进行远程SSH连接时 突然无法连接 对问题原因猜测及尝试 1.dns解析失效 发现显示DNS无法解析,可以得知是使用了主机名登录,而主机名无法登录. 遂查看host文件.host文件因不知名原因被清空,重新恢复后该问…

每天五分钟计算机视觉:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

学习transformer模型-broadcast广播的简明介绍

broadcast的定义和目的: 广播发生在将较小的张量“拉伸”以具有与较大张量兼容的形状,以便执行操作时。 广播是一种有效执行张量操作而不创建重复数据的方式。 广播的处理过程: 1, 确定最右边的维度是否兼容 每…

视觉信息处理与FPGA实现第八次作业——verilog实现对比度调节

一、查看灰度图的数据格式 1.1 安装HxD HxD下载链接:https://download.csdn.net/download/weixin_44357071/89045331 解压直接打开exe就能使用。 将需要查看二进制数据的图片拖到软件框里就能读取 1.2 找到bmp图像的图片点阵数据起始地址,原理和例子…

【数据结构】非线性结构---二叉树

1、树 1.1 树的相关概念 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点 非终端节点或分支节点&#…

中断服务程序模板

通常定时器初始化过程如下: ①对 TMOD赋值,以确定TO和T1的工作方式。 ②计算初值,并将初值写入THO、TLO或TH1、TL1。 ③中断方式时,则对IE赋值,开放中断。 ④使TRO或TR1置位,启动定时器/计数器定时或计数。 代码 利用定时器0工作方式1&…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的…

算法打卡day23

今日任务: 1)39. 组合总和 2)40.组合总和II 3)131.分割回文串 39. 组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 给定一个无重复元素的数组 candidates 和一个目标数 target ,…

人工智能之深度学习笔记——每天五分钟快速掌握深度学习理论

本专栏会对深度学习以及深度学习搭建技巧做一个详尽的介绍,相信大家阅读完本专栏之后,深度学习已经不是一个遥不可及的名词,我们会知道它究竟是什么,本专栏尽可能地简单详细地介绍每一个深度学习知识,帮助每天只用很少…

Day78:服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE漏洞

目录 前置知识 数据库应用-Redis-未授权访问&CVE漏洞 未授权访问:CNVD-2015-07557 未授权访问-CNVD-2019-21763 未授权访问-沙箱绕过RCE-CVE-2022-0543 数据库应用-Couchdb-未授权越权&CVE漏洞 Couchdb 垂直权限绕过(CVE-2017-12635&…

数据结构-链表的基本操作

前言: 在dotcpp上碰到了一道题,链接放这了,这道题就是让你自己构建一遍链表的创建,插入节点,删除节点,获取节点,输出链表,题目给了几张代码图,不过不用管那些图&#xf…

k8s 经常操作指令

发现有个技巧:get、describe、edit ...操作指令后,都对应的相应的资源类型/资源 编辑deployment,查看其中部署的容器 kubectl edit deploy -n namespace pod名前缀(不带hash) 注: 带hash的具体pod&…