当前位置: 首页 > news >正文

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者:来自 Elastic Steve Dodson

有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中,并且作为积极研究领域的一部分,正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而,使用这些 LLM 作为知识库仍然容易产生幻觉。 如果领域语言与 LLM 训练数据相似,则通过检索增强生成 (RAG) 使用外部信息检索系统向 LLM 提供上下文信息可以改善事实响应。 最终,微调和 RAG 的组合可能会提供最佳结果。

该博客试图描述一些存储和检索 LLMs 知识的基本过程。 后续博客将更详细地描述不同的 RAG 策略。

Pre-training(预训练)Fine-tuning (微调)Retrieval Augmented Generation (RAG)
训练时间几天,几周甚至几个月几分钟到几小时不需要
定制需要大量领域训练数据

可定制模型架构、大小, 分词器等

创建新的 “基础” LLM 模型
添加特定于域的数据

针对特定任务进行调整。

更新LLM模型。
没有模型权重

外部信息检索系统可以调整以与 LLM 对齐。

提示可以优化以提高任务性能。
目的下一个 token 预测提高任务绩效提高特定领域文档集的任务性能
专业知识

介绍

基于大型语言模型 (LLM) 的生成式人工智能技术极大地提高了我们开发处理、理解和生成文本工具的能力。 此外,这些技术引入了创新的信息检索机制,其中生成式人工智能技术使用模型存储的(参数)知识直接响应用户查询。

然而,值得注意的是,模型的参数知识是整个训练数据集的浓缩表示。 因此,将这些技术应用于原始训练数据之外的特定知识库或领域确实存在一定的局限性,例如:

  • 生成人工智能的响应可能缺乏上下文或准确性,因为它们无法访问训练数据中不存在的信息。
  • 有可能产生听起来合理但不正确或误导性的信息(幻觉)。

存在不同的策略来克服这些限制,例如扩展原始训练数据、微调模型以及与特定领域知识的外部源集成。 这些不同的方法会产生不同的行为并带来不同的实施成本。

特定领域的预训练

LLMs 接受了代表各种自然语言用例的庞大数据集的预训练:

模型总数据集大小数据来源训练成本
PaLM 540B7800 亿  tokens社交媒体对话(多语言)50%; 过滤网页(多语言)27%; 书籍(英文)13%; GitHub(代码)5%; 维基百科(多语言)4%; 新闻(英文)1%8.4M TPU v2 hours
GPT-34990 亿 tokens普通爬行(已过滤)60%; WebText2 22%; 书籍18%; 书籍 28%; 维基百科 3%0.8M GPU hours
LLaMA 22 兆 tokens“来自公开来源的数据混合”3.3M GPU hours 

这个预训练步骤的成本是巨大的,并且需要大量的工作来整理和准备数据集。 这两项任务都需要高水平的技术专业知识。

此外,预训练只是创建模型的第一步。 通常,然后在针对特定任务精心策划和定制的较小数据集上对模型进行微调。 此过程通常还涉及人工审核员,他们对可能的模型输出进行排名和审核,以提高模型的性能和安全性。 这进一步增加了过程的复杂性和成本。

这种方法应用于特定领域的示例包括:

  • ESMFold、ProGen2 等 - 蛋白质序列的 LLM:蛋白质序列可以使用类似语言的序列表示,但不被自然语言模型覆盖
  • Galatica - 科学 LLM:专门接受大量科学数据集的培训,并包括处理科学符号的特殊处理
  • BloombergGPT - 金融 LLM:接受 51% 金融数据、49% 公共数据集的培训
  • StarCoder - 代码 LLM:使用 384 种编程语言的 6.4TB 许可源代码进行培训,并包含 54GB GitHub 问题和存储库级元数据

特定领域模型通常优于各自领域内的通用模型,在与自然语言显着不同的领域(例如蛋白质序列和代码)中观察到最显着的改进。 然而,对于知识密集型任务,这些特定领域模型由于依赖参数知识而受到相同的限制。 因此,虽然这些模型可以更有效地理解领域的关系和结构,但它们仍然容易出现不准确和幻觉。

特定领域的微调

LLMs 的微调涉及针对特定任务或领域训练预先训练的模型,以提高其在该领域的表现。 它通过使用特定于任务的数据更新模型的参数,使模型的知识适应更狭窄的上下文,同时保留在预训练期间获得的一般语言理解。 这种方法针对特定任务优化了模型,与从头开始训练相比,节省了大量时间。

例子

  • Alpaca - 经过微调的 LLaMA-7B 模型,其行为在质量上与 OpenAI 的 GPT-3.5 类似
  • xFinance - 针对特定金融任务的微调 LLaMA-13B 模型。 据报道,其表现优于 BloombergGPT
  • ChatDoctor - 用于医疗聊天的微调 LLaMA-7B 模型。
  • falcon-40b-code-alpaca - 经过微调的 falcon-40b 模型,用于从自然语言生成代码

成本

微调的成本明显低于预训练的成本。 此外,诸如参数高效微调(PEFT)方法(例如如上所述的 LoRA、适配器、提示调整和上下文学习)等新颖方法可以使预训练语言模型(PLM)非常有效地适应各种不同的环境。 下游应用程序无需微调所有模型参数。 例如,

模型微调方法微调数据集成本
Alpaca Self-Instruct52K 条独特的指令和相应的输出3 hours on 8 80GB A100s:24 GPU hours
xFinance使用 xTuring 库进行无监督微调和指令微调493M token文本数据集; 82K指令数据集25 hours on 8 A100 80GB GPUs:200 GPU hours
ChatDoctorSelf-Instruct11 万次医患互动3 hours on 6 A100 GPUS: 18 GPU hours
falcon-40b-code-alpacaSelf-Instruct52K指令数据集; 20K 指令输入代码三元组4 hours on 4 A100 80GB GPUs: 16 GPU hours

与特定领域的预训练模型类似,这些模型通常在各自的领域内表现出更好的性能,但它们仍然面临与参数知识相关的限制。

检索增强生成 - RAG

LLMs 将事实知识存储在其参数中,但他们访问和精确操纵这些知识的能力仍然有限。 这可能会导致 LLMs 提供非事实但看似合理的预测(幻觉)—— 特别是对于不受欢迎的问题。 此外,为他们的决策提供参考并有效地更新他们的知识仍然是开放的研究问题。

解决这些限制的通用方法是 RAG,其中 LLM 的参数知识以来自信息检索系统的外部或非参数知识为基础。 这些知识作为提示中的附加上下文传递给 LLM,并向 LLM 提供有关如何使用此上下文信息的具体说明。这使其更符合迄今为止有关参数知识的讨论。这种方法的优点是 :

  • 与微调和预训练不同,LLM 参数不会改变,因此没有训练成本
  • 简单实施所需的专业知识较低(尽管存在更高级的策略)
  • 响应可以严格限制于从信息检索系统返回的上下文,从而限制幻觉
  • 可以使用较小的特定于任务的 LLM - 因为 LLM 用于特定任务而不是知识库。
  • 知识库很容易更新,因为它不需要改变 LLM
  • 回复可以引用人工验证的来源和链接输出

将这种非参数知识(即检索到的文本)与 LLM 的参数知识相结合的策略是一个活跃的研究领域。

其中一些方法涉及结合检索策略修改 LLM,因此不能像本博客中的定义那样明确分类。 我们将在以后的博客中深入探讨更多细节。

简单的例子

在一个简单的示例中,我们使用了基于本博客信息的微调 LLaMA2 13B 模型。 该模型使用 LLaMA2 预训练和微调数据截止日期(特别是 2023 年 7 月 23 日之后)发布的 AWS 博客文章进行了微调。我们还将这些文档提取到 Elasticsearch 中,并建立了一个简单的 RAG 管道。 在此管道中,模型响应是根据作为上下文的检索到的文档生成的。 红色突出显示表示错误的响应,蓝色突出显示正确的响应。

不过,需要注意的是,这只是一个单一的例子,并不构成对 fine-tuning 与 RAG 的综合评价,只是提供了一个之前的 fine-tuning 的例子,用于形式,而不是事实。我们计划在即将发布的博客中进行更彻底的研究的比较。

原文:Domain Specific Generative AI: Pre-Training, Fine-Tuning, and RAG — Elastic Search Labs

相关文章:

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者:来自 Elastic Steve Dodson 有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中,并且作为积极研究领域的一部分,正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而&#…...

HarmonyOS—UI 开发性能提升的推荐方法

开发者若使用低性能的代码实现功能场景可能不会影响应用的正常运行,但却会对应用的性能造成负面影响。本章节列举出了一些可提升性能的场景供开发者参考,以避免应用实现上带来的性能劣化。 使用数据懒加载 开发者在使用长列表时,如果直接采用…...

84 CTF夺旗-PHP弱类型异或取反序列化RCE

目录 案例1:PHP-相关总结知识点-后期复现案例2:PHP-弱类型对比绕过测试-常考点案例3:PHP-正则preg_match绕过-常考点案例4:PHP-命令执行RCE变异绕过-常考点案例5:PHP-反序列化考题分析构造复现-常考点涉及资源&#xf…...

Duilib List 控件学习

这是自带的一个示例; 一开始运行的时候List中是空的,点击Search按钮以后就填充列表框; 先看一下列表框列头是在xml文件中形成的; <List name="domainlist" bkcolor="#FFFFFFFF" ... menu="true"> <ListHeader height="24…...

详细了解Node.js的配置与使用!

详细了解Node.js的配置与使用&#xff01; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它允许开发者在服务器端运行 JavaScript&#xff0c;从而实现全栈 JavaScript 开发。本文将介绍 Node.js 的配置和 npm 的应用。 一、Node.js 配置 下载与安装 首先&…...

OpenCV 移动最小二乘图像变形

文章目录 一、简介二、实现代码三、实现效果参考文献一、简介 在现实生活中,我们常常应用一些刚性的变换来实现物体的旋转平移,对于非刚性的变换我们都没有在意,其实这种变换也是无处不在的,如我们经常看的动画就可以通过一些非刚性的变换达到一些非常夸张的效果。这里,我…...

【深度学习】S2 数学基础 P4 概率论

目录 基本概率论概率论公理随机变量 多个随机变量联合概率条件概率贝叶斯定理求和法则独立性 期望与方差小结 基本概率论 机器学习本质上&#xff0c;就是做出预测。而概率论提供了一种量化和表达不确定性水平的方法&#xff0c;可以帮助我们量化对某个结果的确定性程度。 在…...

跟我学c++中级篇——静态多态

一、多态 Polymorphism&#xff0c;多态。学习过c的人如果不知道多态&#xff0c;基本上就是打入c内部的C程序员了。在前边曾经对多态进行过分析&#xff0c;对其中的虚函数&#xff08;虚表等&#xff09;也进行过较为详细的说明。 多态其实非常好理解&#xff0c;不要硬扣书…...

设计模式--桥接模式(Bridge Pattern)

桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它主要是用于将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。 桥接模式主要包含以下几个角色&#xff1a; Abstraction&#xff08;抽象类&#xff09;&#xff1a;定义抽象类的…...

统计图饼图绘制方法(C语言)

统计图饼图绘制方法&#xff08;C语言&#xff09; 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图绘制较难。今值此介绍饼图的绘制方法。 本方法采用C语言的最基本功能&#xff1a; &#xff08; 1.&#xff09…...

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​&#xff0c;求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n&#xff0c;表示数字个数。 第二行输入 n 个非负整数&#xff0c;表示 1,2…a1​,a2​…an​&#xff0c;以空格隔开。 …...

相机图像质量研究(13)常见问题总结:光学结构对成像的影响--鬼影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总

车载诊断协议DoIP系列 —— 车辆以太网节点需求汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,…...

掘根宝典之C++包含对象的类,私有继承,保护继承,三大继承方式总结

包含对象成员的类 包含&#xff0c;组合和层次化&#xff1a;一个类里面的类成员之一是个类对象 我们来看个例子 #include<iostream> using namespace std; class AA { private:int a_; public:AA(int a):a_(a){}void A(){cout << a_ << endl;} }; class …...

第六篇:MySQL图形化管理工具

经过前五篇的学习&#xff0c;对于数据库这门技术的理解&#xff0c;我们已经在心中建立了一个城堡大致的雏形&#xff0c;通过命令行窗口&#xff08;cmd&#xff09;快速上手了【SQL语法-DDL-数据定义语言】等相关命令 道阻且长&#xff0c;数据库技术这一宝藏中还有数不清的…...

计算机网络——12DNS

DNS DNS的必要性 IP地址标识主机、路由器但IP地址不好记忆&#xff0c;不便于人类用使用&#xff08;没有意义&#xff09;人类一般倾向于使用一些有意义的字符串来标识Internet上的设备存在着“字符串”——IP地址的转换的必要性人类用户提供要访问机器的“字符串”名称由DN…...

vue3-应用规模化-工具链

工具链 项目脚手架 Vite Vite 是一个轻量级的、速度极快的构建工具&#xff0c;对 Vue SFC 提供第一优先级支持。作者是尤雨溪&#xff0c;同时也是 Vue 的作者&#xff01; 要使用 Vite 来创建一个 Vue 项目&#xff0c;非常简单&#xff1a; &#xff08;推荐&#xff09…...

EasyExcel动态列导出

测试代码地址&#xff1a;https://gitee.com/wangtianwen1996/cento-practice/tree/master/src/test/java/com/xiaobai/easyexcel/dynamiccolumn 官方文档&#xff1a;https://easyexcel.opensource.alibaba.com/docs/2.x/quickstart/write 一、实现方式 1、根据需要导出的列…...

JAVA面试题11

什么是Java的访问修饰符&#xff0c;并列出它们的作用。 Java的访问修饰符包括public、private、protected和默认。它们的作用如下&#xff1a; public: 可以被任何其他类访问。 private: 只能被所在类访问&#xff0c;其他类无法访问。 protected: 可以被所在类和同一个包中的…...

工业数据采集的时间不确定性及PLC-Recorder的通道偏移功能

目录 一、缘起 二、效果展示 三、设置方法 四、小结 一、缘起 大家都知道采集软件首先要尽可能还原数据原来的状态&#xff0c;给用户提供一个可以信赖的参考。但是&#xff0c;数据采集又有很多随机因素&#xff1a;Windows是一个周期不严格的系统、以太网通讯有时间波动、…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...