强化RAG:微调Embedding还是LLM?

在这里插入图片描述

为什么我们需要微调?

微调有利于提高模型的效率和有效性。它可以减少训练时间和成本,因为它不需要从头开始。此外,微调可以通过利用预训练模型的功能和知识来提高性能和准确性。它还提供对原本无法访问的任务和领域的访问,因为它允许将预先训练的模型转移到新场景。换句话说,这一切都是为了获得更好的结果、减少奇怪的输出、更好地记住数据以及节省时间和金钱。

虽然微调也可用于使用外部数据“增强”模型,但微调可以通过多种方式补充RAG:

Embedding微调的好处

  • 微调Embedding模型可以在数据训练分布上实现更有意义的Embedding表示,从而带来更好的检索性能。

LLM微调的好处

  • 允许它学习给定数据集的风格
  • 允许它学习训练数据中可能较少出现的 DSL(例如 SQL)
  • 允许它纠正可能难以通过提示工程修复的幻觉/错误
  • 允许它将更好的模型(例如 GPT-4)提炼成更简单/更便宜的模型(例如 GPT-3.5、Llama 2)

简而言之,微调有助于更好的相似性搜索,这是获取正确数据以及生成正确答复所必须的前提。

微调主要有两种类型。第一个是微调Embedding,目的是提高数据检索的准确性,第二个是微调LLM,将领域知识注入到现有的LLM中。第一个是 RAG 特定的,而第二个是通用的。

微调Embedding

大型语言模型 (LLM) 可以处理广泛的任务,包括情感分析、信息提取和问答。正确的架构、深思熟虑的训练过程以及整个互联网训练数据的可用性结合在一起,使它们能够胜任某些任务。

LLM经过训练,可以使用这些大量数据在许多领域进行泛化,产生一个总体上很优秀但缺乏特定领域知识的模型。这时,微调就变得很重要。

微调过程涉及更改语言模型以更好地适应数据领域。例如,想要处理大量有关患者的医院文书工作,因此可能希望将LLM专门研究这些类型的文本。

LlamaIndex 关于微调Embedding的包含三个主要步骤:

  1. 从数据生成综合问题-答案pari对数据集
  2. 微调模型
  3. 评估模型

微调Embedding

步骤总结:

  1. 切分训练集和验证集
  2. 使用LlamaIndex内置函数generate_qa_embedding_pairs生成训练数据集的问题/答案。此步骤将调用 LLM 模型(默认使用 OpenAI,可以替换为自己本地模型,例如ChatGLM、baichuan)来生成合成数据集
  3. 使用SentenceTransformersFinetuneEngine与HuggingFace模型“m3e”模型进行微调。m3e模型可以提前下载到本地,避免网络访问的错误问题。

在这里插入图片描述

  1. 使用hit rate 指标进行评估。

微调Adapter

这是微调Embedding的升级版本。基本的微调Embedding只需使用SentenceTransformersFinetuneEngine提供的开箱即用的功能即可。如果熟悉神经网络,那么layer、loss和 ReLU 等都不陌生。这个Adapter就是这样,让我们能够更好地控制微调过程。

步骤总结:

  1. 与微调Embedding的步骤 1 类似,切分训练集和验证集
  2. 类似于微调Embedding的步骤 2,构建合适的数据集
  3. 使用 EmbeddingAdapterFinetuneEngine ,而不是使用 SentenceTransformersFinetuneEngine 。可以使用预定义的TwoLayerNN将图层作为参数添加到EmbeddingAdapterFinetuneEngine中,如下所示

在这里插入图片描述

  1. 与基本微调Embedding的步骤4类似

Router微调

我自己并不经常使用这种微调,这种类型的微调对于router查询很有用。但路由器查询是非常特定于数据域的,添加这种Embedding只会增加 RAG 的复杂性。

路由器的快速总结:不能扔一堆文档进行Embedding,然后在其上构建检索。这种方法不会给你带来任何好的结果,甚至是一个不可接受的结果。因此 LlamaIndex 引入了一个奇妙的概念,称为 Router。路由器是 LLM 实现自动化决策的重要一步,这本质上将 LLM 视为分类器

在这里插入图片描述

但是,基础路由器有时很差劲,查询和索引之间的匹配率非常低。为了解决这个问题,LlamaIndex 现在可以微调路由器。这将有助于减少每个查询运行的循环数量,因此期望结果更快。但结果有时还是很可怕。

基本上,对于每个文档,在其上构建多个索引,例如 VectorIndex、SummaryIndex、KeywordIndex 等,然后给出每个索引的元数据或描述,然后在此基础上构建代理,并使用元数据描述来告诉 LLM这个代理是做什么的。如果有 100 万份文档,那么就有 100 万个代理。每次进行查询时,LLM 都需要通过 100 万个代理来找出最适合用来回答问题的代理。因此,它是非常慢的。为了解决这个问题,LlamaIndex 将当前版本升级到另一个版本,该版本基本上是在文档(工具)检索期间重新排名代理可以用来规划的查询规划工具。

仅当设计的 RAG 系统以路由器为中心时,否则,ReAct 代理或多代理是更好的方法。

Cross-Encoder微调

简而言之,Bi-Encoder 就是使用双编码器,将句子 A 和句子 B 转换为句子Embedding A1 和句子Embedding B1。然后可以使用余弦相似度来比较这些句子Embedding。

在这里插入图片描述

相反,对于交叉编码器,我们将两个句子同时传递到 Transformer 网络。它产生一个介于 0 和 1 之间的输出值,表示输入句子对的相似度

交叉编码器不会产生句子Embedding。此外,我们无法将单个句子传递给交叉编码器。

交叉编码器比双编码器具有更好的性能。然而,对于许多应用来说,它们并不实用,因为它们不产生Embedding,我们可以使用余弦相似度进行索引或有效比较。

图片

交叉编码器比双编码器具有更高的性能,但是,它们对于大型数据集的扩展性不佳。在这里,结合交叉编码器和双向编码器是有意义的,例如在信息检索/语义搜索场景中:首先,使用高效的双向编码器来检索查询的前 100 个最相似的句子。然后,使用交叉编码器通过计算每个(查询、命中)组合的分数来重新排名这 100 个命中。

微调LLM

因此,已经完成了Embedding的微调,如上所述,微调Embedding有助于提高数据检索的准确性。如果是这样,我们是否需要对LLM进行微调?

因为并非每次都需要 RAG。开发功能齐全的 RAG 每一步都很复杂。拥有一个好的RAG应用程序需要一个由优秀的软件工程师组成的团队来开发前端和可扩展的后端,优秀的数据工程师来处理用于开发RAG的数据管道和多个数据库,一些优秀的机器学习工程师+数据科学家开发模型并对文本块、Embedding性能、良好的数据检索方法进行实验,然后合成数据、路由器、代理等。更不用说将需要良好的 MLOps 来监控 RAG 的性能。

如果可以通过在新数据上逐步微调 LLM 来简化所有这些方法,会怎么样?使其成为 ChatGPT,但根据自己的数据进行微调。会更容易吗?

大多数LLM/RAG以PoC为主。它可以处理小数据集并在非常特定的情况下处理得很好,但很难扩展或处理现实生活中的用例。

但我们假设有资金定期调整LLM课程。我们该怎么做呢?

LlamaIndex 有多种选项可以帮助微调的LLM。主要目的是改进较小模型以超越较大参数规模模型。假设 GPT-4 对你的应用程序来说非常好,但它会让公司破产,因为它很昂贵。GPT-3.5 更便宜,性能也可以接受,但希望 GPT-4 的性能让的客户满意。那么你可能会想到微调LLM。

为什么要微调LLM

如前所述,微调不仅可以提高基本模型的性能,而且较小(微调)的模型通常可以在训练它的任务集上胜过较大(更昂贵)的模型。OpenAI 通过其第一代“InstructGPT”模型证明了这一点,其中 1.3B 参数 InstructGPT 模型补全优于 175B 参数 GPT-3 基本模型,尽管其尺寸要小 100 倍。

其中一大问题是LLM的背景知识是有限的。因此,该模型可能在需要大量知识库或特定领域信息的任务上表现不佳。微调模型可以通过在微调过程中“学习”这些信息,或者换句话说,使用最新数据更新模型来避免此问题。GPT-4 仅拥有 2023年3月之前的知识。微调 LLM 将使用的私人数据更新模型并减少幻觉,也不需要 RAG,因为微调 LLM 已经更新了的数据。

改进 RAG 很困难,有多个步骤,根据我的经验,可以显着改进 RAG 的最重要步骤是文本块和Embedding。因此,微调Embedding模型是必要的(但是不是必须的)步骤。此外,微调LLM将更新现有LLM的行为,从而减少响应中的幻觉并提供更好的综合答案。

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

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

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

相关文章

足底筋膜炎怎么治疗才能彻底除根

现代快节奏的生活中,足底筋膜炎作为一种常见的足部疾病,困扰着越来越多的人。长时间的站立、行走,以及不正确的运动姿势,都可能成为足底筋膜炎的诱因。足底筋膜炎带来的疼痛和不适,严重影响了人们的生活质量和日常工作…

随机森林算法进行预测(+调参+变量重要性)--血友病计数数据

1.读取数据 所使用的数据是血友病数据,如有需要,可在主页资源处获取,数据信息如下: import pandas as pd import numpy as np hemophilia pd.read_csv(D:/my_files/data.csv) #读取数据 2.数据预处理 在使用机器学习方法时&…

Java17 --- RabbitMQ搭建集群

目录 一、使用docker搭建集群 二、使用docker安装Haproxy 三、使用springboot进行测试 3.1、创建交换机与队列关系 四、仲裁队列替代镜像队列 4.1、创建交换机与队列关系 一、使用docker搭建集群 由于contos7环境不能装rabbitmq3.13版本的,采用docker安装避…

判断两张图片是否相似

判断两张图片是否相似 要判断两张图片是否相似,你可以使用多种方法,其中包括结构相似性指数(SSIM)和 perception hash 等。以下是使用 SSIM 和 perception hash 进行判断的示例代码。 安装必要的包 确保你已经安装了 scikit-im…

自制一个Linux live固件镜像ISO可引导系统

使用母盘镜像制作两个虚拟,来制作一个包含基本需求的filesystem.squashfs文件,具体看下面的链接 使用的安装镜像 是Linux Mint 制作好的成品 https://cloud.189.cn/t/U32Mvi7FnyA3 (访问码:2nbo) 最简单制作LIVE CD…

【Android】文本服务器获取内容

链接web服务器,打开apaquee 收到数据 public void getNewsIndexData() throws Exception{String sUrl"http://10.107.24.12:8080/newsIndex.json";URL urlnew URL(sUrl);HttpURLConnection urlConn(HttpURLConnection) url.openConnection();InputStrea…

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】 题目描述:解题思路一:滑动窗口与排序解题思路二:0解题思路三:0 题目描述: 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操…

RAG工作流在高效信息检索中的应用

介绍 RAG(Retrieval Augmented Generation)是一种突破知识限制、整合外部数据并增强上下文理解的方法。 由于其高效地整合外部数据而无需持续微调,RAG的受欢迎程度正在飙升。 让我们来探索RAG如何克服LLM的挑战! LLM知识限制大…

Bigtable: A Distributed Storage System for Structured Data

2003年USENIX,出自谷歌,开启分布式大数据时代的三篇论文之一,底层依赖 GFS 存储,上层供 MapReduce 查询使用 Abstract 是一种分布式结构化数据存储管理系统,存储量级是PB级别。存储的数据类型和延时要求差异都很大。…

有监督学习——梯度下降

1. 梯度下降 梯度下降(Gradient Descent)是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法,在理论上不保证下降求得最优解。 e.g. 假设有三维曲面表达函数空间,长(x)、宽(y)轴为子变量,高(z)是因变量&…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代,知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域,如何高效管理和利用知识资源,成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

10.错误处理

标题 一、概述二、panic!与不可恢复错误2.1 出错时2.2 示例2.3 panic!的 backtrace 三、Result 与可恢复的错误3.1 引入3.2 错误示例3.3 传播错误1)概念2)传播错误示例3)传播错误的简写:?运算符 一、概述 Rust将错误分…

springboot网上书店管理系统-计算机毕业设计源码03780

摘 要 网上书店管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、站点管理(轮播图)用户管理(管理员、注册用户)内容管理&#x…

深入理解ReentrantLock

深入理解ReentrantLock 在Java并发编程中,锁(Lock)是控制多个线程对共享资源访问的重要工具。虽然Synchronized关键字是实现锁的常用方式,但它在功能上比较有限。ReentrantLock是java.util.concurrent.locks包中提供的一个更加灵…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》

系列文章 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 说明 上一篇 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 主要讲了一下如何快速搭建一个 STM32 裸机工程,其实 STM32CubeMX 可以生成 FreeRTOS 的工程,这就…

Linux host映射 设置主机名并通过主机名找到指定系统

一、windows ping linux 1.windows进入到 C:\Windows\System32\drivers\etc\hosts 内,使用edit with notepad打开hosts文件,在下面添加需要寻找的ip以及其主机名。该ip以及主机名即linux的一致。需要查看linux主机名的在终端使用 hostname进行查看&#…

spring boot3登录开发-邮箱登录/注册接口实现

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 所需依赖 邮箱验证登录/注册实现 1.创建交互对象 2.登录注册业务逻辑实…

JDK17 你的下一个白月光

JDK版本升级的非常快,现在已经到JDK20了。JDK版本虽多,但应用最广泛的还得是JDK8,正所谓“他发任他发,我用Java8”。 但实际情况却不是这样,越来越多的java工程师拥抱 JDK17,于是了解了一下 JDK17新语法&a…

Star-CCM+自动网格执行方法与设置技巧

在Star中进行一个仿真项目时,有时会创建多个自动网格。网格创建结束后需要执行。在Star中,网格执行可以分为三种。分别是:单独执行操作;多个执行操作;全部执行操作。接下来将三种执行操作的方法与步骤进行介绍。 其次,如果不习惯用自定义控制网格,有时在一个项目中就会…

大模型+人工智能:重塑地方志管理的新力量

前言 在科技日新月异的今天,人工智能(AI)正以前所未有的速度渗透到各个领域,改变着我们的工作和生活方式。特别是在地方志管理这一领域,大模型和人工智能的结合正在开启一场深刻的变革。今天,就让我们一起…