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

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

对于知识库问答,现在有两种方案,一种基于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

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

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

相关文章

2024年04月在线IDE流行度最新排名

点击查看最新在线IDE流行度最新排名(每月更新) 2024年04月在线IDE流行度最新排名 TOP 在线IDE排名是通过分析在线ide名称在谷歌上被搜索的频率而创建的 在线IDE被搜索的次数越多,人们就会认为它越受欢迎。原始数据来自谷歌Trends 如果您相…

WebSocket用户验证

在WebSocket中,如何携带用户的验证信息 一、在OnMessage中进行验证 客户端在连接到服务器后,客户端通过发送消息,服务器端在OnMessage方法中,进行信息验证,这种方式需要将用户身份验证及接收用户消息进行混合处理&am…

分布式全闪占比剧增 152%,2023 年企业存储市场报告发布

近日,IDC 发布了 2023 年度的中国存储市场报告。根据该报告,在 2023 年软件定义存储的市场占比进一步扩大,分布式全闪的增长尤其亮眼,其市场份额从 2022 年的 7% 剧增到 2023 年的 17.7%,增长了 152%。 01 中国企业存…

备战蓝桥杯---贪心刷题2

话不多说&#xff0c;直接看题&#xff1a; 首先我们大致分析一下&#xff0c;先排序一下&#xff0c;Kn&#xff0c;那就全部选。 当k<n时&#xff0c;k是偶数&#xff0c;那么结果一定非负&#xff0c;因为假如负数的个数有偶数个&#xff0c;那么我们成对选它&#xff0…

【问题处理】银河麒麟操作系统实例分享,鲲鹏服务器GaussDB测试ping延迟过高问题

1.问题环境 系统环境 物理机 网络环境 私有网络 硬件环境 机型 TaiShan 200 (Model 2280) (VD) 处理器 HUAWEI Kunpeng 920 5250 内存 32GB*16 显卡 无 主板型号 BC82AMDDRE 架构 ARM 固件版本 iBMC固件版本 3.03.00.31 (U82) 单板ID 0x00a9 BIOS版本 1.8…

SpringBoot mybatis-starter解析

mybatis-starter使用指南 自动检测工程中的DataSource创建并注册SqlSessionFactory实例创建并注册SqlSessionTemplate实例自动扫描mappers mybatis-starter原理解析 注解类引入原理 查看对应的autoconfigure包 MybatisLanguageDriverAutoConfiguration 主要是协助使用注解来…

数论与线性代数——整除分块【数论分块】的【运用】【思考】【讲解】【证明(作者自己证的QWQ)】

文章目录 整除分块的思考与运用整除分块的时间复杂度证明 & 分块数量整除分块的公式 & 公式证明公式证明 代码code↓ 整除分块的思考与运用 整除分块是为了解决一个整数求和问题 题目的问题为&#xff1a; ∑ i 1 n ⌊ n i ⌋ \sum_{i1}^{n} \left \lfloor \frac{n}{…

用ChatGPT出题,完全做不完

最近小朋友正在学习加减法&#xff0c;正好利用ChatGPT来生成加减法练习题&#xff0c;小朋友表示够了&#xff0c;够了&#xff0c;完全做不完。本文将给大家介绍如何利用ChatGPT来生成练习题。 尚未获得ChatGPT的用户&#xff0c;请移步&#xff1a;五分钟开通GPT4.0。 角色…

Qt 实现简易的视频播放器,功能选择视频,播放,暂停,前进,后退,进度条拖拉,视频时长显示

1.效果图 2.代码实现 2.1 .pro文件 QT core gui multimedia multimediawidgets 2.2 .h文件 #ifndef VIDEOPLAYING_H #define VIDEOPLAYING_H#include <QWidget> #include<QFileDialog>#include<QMediaPlayer> #include<QMediaRecorder> #in…

【C语言进阶】- 内存函数

内存函数 1.1 内存函数的使用1.2 memcpy函数的使用1.3 memcpy函数的模拟实现2.1 memmove函数的使用2.2 memmove函数的模拟实现2.3 memcmp函数的使用2.4 memset函数的使用 1.1 内存函数的使用 内存函数就是对内存中的数据进行操作的函数 1.2 memcpy函数的使用 void* memcpy ( …

Tomcat调优总结(Tomcat自身优化、Linux内核优化、JVM优化)

Tomcat自身的调优是针对conf/server.xml中的几个参数的调优设置。首先是对这几个参数的含义要有深刻而清楚的理解。以tomcat8.5为例&#xff0c;讲解参数。 同时也得认识到一点&#xff0c;tomcat调优也受制于linux内核。linux内核对tcp连接也有几个参数可以调优。 因此我们可…

每天五分钟深度学习:神经网络和深度学习有什么样的关系?

本文重点 神经网络是一种模拟人脑神经元连接方式的计算模型&#xff0c;通过大量神经元之间的连接和权重调整&#xff0c;实现对输入数据的处理和分析。而深度学习则是神经网络的一种特殊形式&#xff0c;它通过构建深层次的神经网络结构&#xff0c;实现对复杂数据的深度学习…

用Python实现办公自动化(自动化处理PDF文件)

自动化处理 PDF 文件 目录 自动化处理 PDF 文件 谷歌浏览器 Chrome与浏览器驱动ChromeDriver安装 &#xff08;一&#xff09;批量下载 PDF 文件 1.使用Selenium模块爬取多页内容 2.使用Selenium模块下载PDF文件 3.使用urllib模块来进行网页的下载和保存 4.使用urllib…

AI预测福彩3D第23弹【2024年4月1日预测--第5套算法开始计算第5次测试】

今天&#xff0c;咱们继续进行本套算法的测试&#xff0c;本套算法目前也已命中多次。今天为第五次测试&#xff0c;仍旧是采用冷温热趋势结合AI模型进行预测。好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计算并进行权…

基于FPGA的图像累积直方图verilog实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 Vivado2019.2 matlab2022a 3.部分核心程序 timescale 1ns / 1ps // // Company: // Engineer: // // Design Name: // …

MarkDown之时序图并行、条件、循环、可选高级语法(三十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Jenkins首次安装选择推荐插件时出现”No such plugin cloudbees-folder”解决方案

安装Jenkins成功之后&#xff0c;首次启动Jenkins后台管理&#xff0c;进入到安装插件的步骤&#xff0c;选择"推荐安装"&#xff0c;继续下一步的时候出现错误提示&#xff1a; 出现一个错误 安装过程中出现一个错误&#xff1a;No such plugin&#xff1a;cloudb…

Shell与Bash与POSIX与Linux间的关系

shell是什么&#xff1f; Shell的英语翻译是“壳”&#xff0c;其作用也跟名字差不多&#xff0c;为操作系统套个壳&#xff0c;人与操作系统的壳交互。与壳相对应的则是操作系统内核&#xff0c;一个“壳”一个“核”。核从1970年代开始就基本定型了&#xff0c;没什么大的改…

卷积神经网络-池化层

卷积神经网络-池化层 池化层&#xff08;Pooling Layer&#xff09;是深度学习神经网络中的一个重要组成部分&#xff0c;通常用于减少特征图的空间尺寸&#xff0c;从而降低模型复杂度和计算量&#xff0c;同时还能增强模型的不变性和鲁棒性。 池化操作通常在卷积神经网络&am…

网络基础——ISIS

名词 ISIS&#xff1a;中间系统到中间系统&#xff0c;优先级是15集成化ISIS&#xff1a;这是在优化后&#xff0c;可以使用在OSI模型上的NET地址&#xff1a;由区域ID、系统ID和SEL组成&#xff0c;一台设备上最多配置3个NET地址&#xff0c;条件是区域号要不一致&#xff0c;…