提升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

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

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

相关文章

Git简介

文章目录 Git是什么?安装Git使用git配置个人标识文件状态状态变化 汇总常用命令 Git是什么? Git是我们的代码管理工具,是一个代码仓库,让我们存储代码的。 安装Git 官网:https://git-scm.com/ (傻瓜式安…

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

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

STM32一个地址未对齐引起的 HardFault 异常

1. 概述 客户在使用 STM32G070 的时候,KEIL MDK 为编译工具,当编译优化选项设置为Level0 的时候,程序会出现 Hard Fault 异常,而当编译优化选项设置为 Level1 的时候,则程序运行正常。表面上看,这似乎是 K…

ansible-tower安装

特别注意:不需要提前安装ansible,因为ansible tower中的setup.sh脚本会下载对应的ansible版本 ansible tower不支持Ubuntu系统,对cenos系统版本也有一定的限制,建议使用centos7.9。 准备一台全新的机器安装,因为ansible tower需要…

ARMv8-A架构下的外部debug模型(external debug)简介

Armv8-A external debug Armv8-A debug模型一,外部调试 External debug 简介二,Debug state2.1 Debug state的进入与退出 三,DAP,Debug Access Port3.1 EDSCR, External Debug Status and Control Register调试状态标识&#xff0…

Docker搭建LNMP环境实战(07):安装nginx

1、模拟应用场景描述 假设我要搭建一个站点,假设虚拟的域名为:api.test.site,利用docker实现nginxphp-fpmmariadb部署。 2、目录结构 2.1、dockers根目录 由于目前的安装是基于Win10VMWareCentOS虚拟机,同时已经安装了VMWareT…

《2023腾讯云容器和函数计算技术实践精选集》--在 K8s 上跑腾讯云 Serverless 函数,打破传统方式造就新变革

目录 目录 前言 《2023腾讯云容器和函数计算技术实践精选集》带来的思考 1、特色亮点 2、阅读体验 3、实用建议 4、整体评价 Serverless 和 K8s 的优势 1、关于Serverless 函数的特点 2、K8s 的特点 腾讯云 Serverless 函数在 K8s 上的应用对企业服务的影响 案例分…

vue3 记录页面滚动条的位置,并在切换路由时存储或者取消

需求,当页面内容超出了浏览器可是屏幕的高度时,页面会出现滚动条。当我们滚动到某个位置时,操作了其他事件或者跳转了路由,再次回来时,希望还在当时滚动的位置。那我们就进行一下操作。 我是利用了会话存储 sessionSto…

Linux华为云Hadoop配置环境

手工搭建Hadoop环境(Linux)_弹性云服务器 ECS_最佳实践 (huaweicloud.com)https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0000001698668477.html?localezh-cn#ZH-CN_TOPIC_0000001698668477__li49001945163110跟着傻瓜式CV即可。 气死…

目标检测:数据集划分 XML数据集转YOLO标签

文章目录 1、前言:2、生成对应的类名3、xml转为yolo的label形式4、优化代码5、划分数据集6、画目录树7、目标检测系列文章 1、前言: 本文演示如何划分数据集,以及将VOC标注的xml数据转为YOLO标注的txt格式,且生成classes的txt文件…

Nginx 日志输出配置json格式

nginx日志输出配置json格式 nginx服务器日志相关指令主要有两条: (1) 一条是log_format,用来设置日志格式 (2) 另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。 log_format指令用来设置日志的记录格式,它的语…

iOS移动应用实时查看运行日志的最佳实践

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 📝 摘要: 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具,我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

目标检测——工业安全生产环境违规使用手机的识别

一、重要性及意义 首先,工业安全生产环境涉及到许多复杂的工艺和设备,这些设备和工艺往往需要高精度的操作和严格的监管。如果员工在生产过程中违规使用手机,不仅可能分散其注意力,降低工作效率,更可能因操作失误导致…

云原生技术赋能AI绘图:Stable Diffusion在腾讯云的部署与应用新篇章

摘要 随着信息技术的飞速发展和数字化转型的深入推进,云原生架构已成为企业数字化转型的重要基石。Docker容器、Serverless和微服务等技术作为云原生的核心组成部分,正在不断推动着企业应用架构的革新与升级。本文旨在总结近期在云原生实践、容器技术、…

混合现实(MR)开发工具

混合现实(MR)开发工具是一系列软件和框架,它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录 一、先来先服务调度算法(FCFS) 二、短作业优先调度算法(SJF) 三、高响应比优先调度算法(HRRN) 四、轮转调度算法(RR) 五、最早截至时间优先算法(EDF&#…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 (1)关于CPU (2)关于内…

Autodesk 3DS MAX 2025 (3Dmax2025)激活版

3ds Max 2025 是一款功能强大的3D建模、动画和渲染软件,广泛应用于建筑、游戏开发、影视制作等多个领域。在材质设定和描影、3D彩现以及动画和效果方面,3ds Max 2025也提供了丰富的增强功能,以满足用户在不同制作需求中的要求。 3ds Max 2025…

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1)POSIX信号量和System V信号量区别 常用的是POSIX信号量,使用起来更加方便,而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的,而System V标准的信号量并不是,Posix通过sem_…

外包干了25天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…