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

昆明网络推广怎么做/seo软件定制

昆明网络推广怎么做,seo软件定制,沈阳沙盘模型公司,政府类网站模板原文:使用GPT-4训练数据微调GPT-3.5 RAG管道 - 知乎 OpenAI在2023年8月22日宣布,现在可以对GPT-3.5 Turbo进行微调了。也就是说,我们可以自定义自己的模型了。然后LlamaIndex就发布了0.8.7版本,集成了微调OpenAI gpt-3.5 turbo的…

原文:使用GPT-4训练数据微调GPT-3.5 RAG管道 - 知乎

OpenAI在2023年8月22日宣布,现在可以对GPT-3.5 Turbo进行微调了。也就是说,我们可以自定义自己的模型了。然后LlamaIndex就发布了0.8.7版本,集成了微调OpenAI gpt-3.5 turbo的功能

也就是说,我们现在可以使用GPT-4生成训练数据,然后用更便宜的API(gpt-3.5 turbo)来进行微调,从而获得更准确的模型,并且更便宜。所以在本文中,我们将使用NVIDIA的2022年SEC 10-K文件来仔细研究LlamaIndex中的这个新功能。并且将比较gpt-3.5 turbo和其他模型的性能。

RAG vs 微调

微调到底是什么?它和RAG有什么不同?什么时候应该使用RAG和微调?以下两张总结图:

这两个图像总结了它们基本的差别,为我们选择正确的工具提供了很好的指导。

但是,RAG和微调并不相互排斥。将两者以混合方式应用到同一个应用程序中是完全可行的。

RAG/微调混合方法

LlamaIndex提供了在RAG管道中微调OpenAI gpt-3.5 turbo的详细指南。从较高的层次来看,微调可以实现下图中描述的关键任务:

  1. 使用DatasetGenerator实现评估数据集和训练数据集的数据生成自动化。
  2. 在微调之前,使用第1步生成的Eval数据集对基本模型gpt-3.5-turbo进行Eval。
  3. 构建向量索引查询引擎,调用gpt-4根据训练数据集生成新的训练数据。
  4. 回调处理程序OpenAIFineTuningHandler收集发送到gpt-4的所有消息及其响应,并将这些消息保存为.jsonl (jsonline)格式,OpenAI API端点可以使用该格式进行微调。
  5. OpenAIFinetuneEngine是通过传入gpt-3.5-turbo和第4步生成的json文件来构造的,它向OpenAI发送一个微调调用,向OpenAI发起一个微调作业请求。
  6. OpenAI根据您的要求创建微调的gpt-3.5-turbo模型。
  7. 通过使用从第1步生成的Eval数据集来对模型进行微调。

简单的总结来说就是,这种集成使gpt-3.5 turbo能够对gpt-4训练的数据进行微调,并输出更好的响应。

步骤2和7是可选的,因为它们仅仅是评估基本模型与微调模型的性能。

我们下面将演示这个过程,在演示时,使用NVIDIA 2022年的SEC 10-K文件。

主要功能点

1、OpenAIFineTuningHandler

这是OpenAI微调的回调处理程序,用于收集发送到gpt-4的所有训练数据,以及它们的响应。将这些消息保存为.jsonl (jsonline)格式,OpenAI的API端点可以使用该格式进行微调。

2、OpenAIFinetuneEngine

微调集成的核心是OpenAIFinetuneEngine,它负责启动微调作业并获得一个微调模型,可以直接将其插件到LlamaIndex工作流程的其余部分。

使用OpenAIFinetuneEngine, LlamaIndex抽象了OpenAI api进行微调的所有实现细节。包括:

  • 准备微调数据并将其转换为json格式。
  • 使用OpenAI的文件上传微调数据。创建端点并从响应中获取文件id。
  • 通过调用OpenAI的FineTuningJob创建一个新的微调作业。创建端点。
  • 等待创建新的微调模型,然后使用新的微调模型。
    我们可以使用OpenAIFinetuneEngine的gpt-4和OpenAIFineTuningHandler来收集我们想要训练的数据,也就是说我们使用gpt-4的输出来训练我们的自定义的gpt-3.5 turbo模型

from llama_index import ServiceContext 
from llama_index.llms import OpenAI 
from llama_index.callbacks import OpenAIFineTuningHandler 
from llama_index.callbacks import CallbackManager # use GPT-4 and the OpenAIFineTuningHandler to collect data that we want to train on. 
finetuning_handler = OpenAIFineTuningHandler() 
callback_manager = CallbackManager([finetuning_handler]) gpt_4_context = ServiceContext.from_defaults( llm=OpenAI(model="gpt-4", temperature=0.3), context_window=2048,  # limit the context window artifically to test refine process callback_manager=callback_manager, 
) # load the training questions, auto generated by DatasetGenerator 
questions = [] 
with open("train_questions.txt", "r") as f: for line in f: questions.append(line.strip()) from llama_index import VectorStoreIndex # create index, query engine, and run query for all questions 
index = VectorStoreIndex.from_documents(documents, service_context=gpt_4_context) 
query_engine = index.as_query_engine(similarity_top_k=2) for question in questions: response = query_engine.query(question) # save fine-tuning events to jsonl file 
finetuning_handler.save_finetuning_events("finetuning_events.jsonl") from llama_index.finetuning import OpenAIFinetuneEngine # construct OpenAIFinetuneEngine  
finetune_engine = OpenAIFinetuneEngine( "gpt-3.5-turbo", "finetuning_events.jsonl" 
) # call finetune, which calls OpenAI API to fine-tune gpt-3.5-turbo based on training data in jsonl file. 
finetune_engine.finetune() # check current job status 
finetune_engine.get_current_job() # get fine-tuned model 
ft_llm = finetune_engine.get_finetuned_model(temperature=0.3)

需要注意的是,微调函数需要时间,对于我测试的169页PDF文档,从在finetune_engine上启动finetune到收到OpenAI的电子邮件通知我新的微调工作已经完成,这段时间大约花了10分钟。下面的电子邮件如下。


在收到该电子邮件之前,如果在finetune_engine上运行get_finetuned_model,会得到一个错误,提示微调作业还没有准备好。
3、ragas框架
ragas是RAG Assessment的缩写,它提供了基于最新研究的工具,使我们能够深入了解RAG管道。
ragas根据不同的维度来衡量管道的表现:忠实度、答案相关性、上下文相关性、上下文召回等。对于这个演示应用程序,我们将专注于衡量忠实度和答案相关性。
忠实度:衡量给定上下文下生成的答案的信息一致性。如果答案中有任何不能从上下文推断出来的主张,则会被扣分。
答案相关性:指回答直接针对给定问题或上下文的程度。这并不考虑答案的真实性,而是惩罚给出问题的冗余信息或不完整答案。
在RAG管道中应用ragas的详细步骤如下:

  • 收集一组eval问题(最少20个,在我们的例子中是40个)来形成我们的测试数据集。
  • 在微调之前和之后使用测试数据集运行管道。每次使用上下文和生成的输出记录提示。
  • 对它们中的每一个运行ragas评估以生成评估分数。
比较分数就可以知道微调对性能的影响有多大。
代码如下:
contexts = [] 
answers = [] # loop through the questions, run query for each question 
for question in questions: response = query_engine.query(question) contexts.append([x.node.get_content() for x in response.source_nodes]) answers.append(str(response)) from datasets import Dataset 
from ragas import evaluate 
from ragas.metrics import answer_relevancy, faithfulness ds = Dataset.from_dict( { "question": questions, "answer": answers, "contexts": contexts, } 
) # call ragas evaluate by passing in dataset, and eval categories 
result = evaluate(ds, [answer_relevancy, faithfulness]) 
print(result) import pandas as pd # print result in pandas dataframe so we can examine the question, answer, context, and ragas metrics 
pd.set_option('display.max_colwidth', 200) 
result.to_pandas()

评估结果 最后我们可以比较一下微调前后的eval结果。 基本gpt-3.5-turbo的评估请看下面的截图。answer_relevance的评分不错,但忠实度有点低。


经过微调,模型的性能在答案相关性中略有提高,从0.7475提高到0.7846,提高了4.96%。


使用gpt-4生成训练数据对gpt-3.5 turbo进行微调确实看到了改善。
一些有趣的发现
1、对小文档进行微调会导致性能下降
最初用一个小的10页PDF文件进行了实验,我发现eval结果与基本模型相比性能有所下降。然后又继续测试了两轮,结果如下:
第一轮基本模型:Ragas_score: 0.9122, answer_relevance: 0.9601, faithfulness: 0.8688
第一轮微调模型:Ragas_score: 0.8611, answer_relevance: 0.9380, faithfulness: 0.7958
第二轮基本模型:Ragas_score: 0.9170, answer_relevance: 0.9614, faithfulness: 0.8765
第二轮微调模型:Ragas_score: 0.8891, answer_relevance: 0.9557, faithfulness: 0.8313
所以换衣小文件可能是微调模型比基本模型表现更差的原因。所以使用了NVIDIA长达169页的SEC 10-K文件。对上面的结果做了一个很好的实验——经过微调的模型表现得更好,忠实度增加了4.96%。
2、微调模型的结果不一致
原因可能是数据的大小和评估问题的质量
尽管169页文档的微调模型获得了预期的评估结果,但我对相同的评估问题和相同的文档运行了第二轮测试,结果如下:
第二轮基本模型:Ragas_score: 0.8874, answer_relevance: 0.9623, faithfulness: 0.8233
第二轮微调模型:Ragas_score: 0.8218, answer_relevance: 0.9498, faithfulness: 0.7242
是什么导致了eval结果的不一致?
数据大小很可能是导致不一致的微调计算结果的根本原因之一。“至少需要1000个微调数据集的样本。”这个演示应用显然没有那么多的微调数据集。
另一个根本原因很可能在于数据质量,也就是eval问题的质量。我将eval结果打印到一个df中,列出了每个问题的问题、答案、上下文、answer_relevance和忠实度。
通过目测,有四个问题在忠实度中得分为0。而这些答案在文件中没有提供上下文。这四个问题质量很差,所以我从eval_questions.txt中删除了它们,重新运行了评估,得到了更好的结果:
基本模型eval:Ragas_score: 0.8947, answer_relevance: 0.9627, faithfulness: 0.8356


微调模型eval:Ragas_score: 0.9207, answer_relevance: 0.9596, faithfulness: 0.8847


可以看到在解决了这四个质量差的问题后,微调版的上升了5.9%。所以评估问题和训练数据需要更多的调整,以确保良好的数据质量。这确实是一个非常有趣的探索领域。
3、微调的成本
经过微调的gpt-3.5-turbo的价格高于基本模型的。我们来看看基本模型、微调模型和gpt-4之间的成本差异:


比较gpt-3.5-turbo (4K环境)、微调gpt-3.5-turbo和gpt-4 (8K环境),可以看到:

  • 经过微调的gpt-3.5 turbo在输入和输出使用方面的成本是基本模型的8倍。
  • 对于输入使用,Gpt-4的成本是微调模型的2.5倍,对于输出使用则是3.75倍。
  • 对于输入使用,Gpt-4的成本是基本模型的20倍,对于输出使用情况是30倍。
  • 另外使用微调模型会产生$0.008/1K 令牌的额外成本。

总结

本文探索了LlamaIndex对OpenAI gpt-3.5 turbo微调的新集成。我们通过NVIDIA SEC 10-K归档分析的RAG管道,测试基本模型性能,然后使用gpt-4收集训练数据,创建OpenAIFinetuneEngine,创建了一个新的微调模型,测试了它的性能,并将其与基本模型进行了比较。

可以看到,因为GPT4和gpt-3.5 turbo的巨大成本差异(20倍),在使用微调后,我们可以得到近似的效果,并且还能节省不少成本(2.5倍)

如果你对这个方法感兴趣,源代码在这里:

https://colab.research.google.com/github/wenqiglantz/nvidia-sec-finetuning/blob/main/nvidia_sec_finetuning.ipynb

作者:Wenqi Glantz

发布于 2023-09-06 10:09・IP 属地北京

相关文章:

使用GPT-4训练数据微调GPT-3.5 RAG管道

原文:使用GPT-4训练数据微调GPT-3.5 RAG管道 - 知乎 OpenAI在2023年8月22日宣布,现在可以对GPT-3.5 Turbo进行微调了。也就是说,我们可以自定义自己的模型了。然后LlamaIndex就发布了0.8.7版本,集成了微调OpenAI gpt-3.5 turbo的…...

二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界

在软件设计的奇妙宇宙中,有一种设计模式如一颗流星般划过,留下绚丽的光芒,它就是——模板方法模式(Template Method Pattern)。这个模式不仅令代码更加灵活,而且蕴含了一种设计哲学,本文将深入研…...

【Spring】加载properties文件

文章目录 在Spring Context中加载properties文件测试总结 在Spring Context中加载properties文件 分为三步&#xff0c;如下图所示&#xff1a; 完整代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.…...

react中间件的理解

一、是什么&#xff1f; 中间件&#xff08;Middleware&#xff09;在计算机中&#xff0c;是介于应用系统和系统软件之间的一类软件&#xff0c;它使用系统软件所提供的基础服务&#xff08;功能&#xff09;&#xff0c;衔接网络应用上的各个部分或不同的应用&#xff0c;能…...

React函数组件状态Hook—useState《进阶-对象数组》

React函数组件状态-state 对象 state state 中可以保存任意类型的 JavaScript 值&#xff0c;包括对象。但是&#xff0c;你不应该直接修改存放在 React state 中的对象。相反&#xff0c;当你想要更新⼀个对象时&#xff0c;你需要创建⼀个新的对象&#xff08;或者将其拷⻉⼀…...

linux 网络 cat /proc/net/dev 查看测试网络丢包情况

可以通过 cat /proc/net/dev 查看测试网络丢包情况&#xff0c;drop关键字&#xff0c;查看所有网卡的丢包情况 还可以看其他数据&#xff0c; /proc/net/下面有如下文件...

记录配置VS,使用opencv与Eigen

方法一&#xff1a; 1.下载VS 2.配置opencv,参考大佬博客&#xff0c;注意更改博客中版本的部分细节&#xff0c;比如opencv_world440d.lib换成自己下载的版本 3.配置Eigen,参考大佬博客 方法二&#xff1a;博客 本人第一次配置时候按照这篇内容配置的&#xff0c;但是不知道哪…...

uart控制led与beep

仲裁模块代码&#xff1a; // 外设控制模块&#xff0c;根据uart接收到的数据&#xff0c;控制led与beep的标志信号。 module arbit(input wire sys_clk ,input wire sys_rst_n ,input wire pi_flag …...

Linux修改root密码

如果知道当前的root密码&#xff0c;修改boot密码操作较简单。 步骤如下&#xff1a; # passwd --在root用户下执行passwd命令 Changing password for user root. New password: --此处输入新密码 BAD PASSWORD: The password is shorter than 8 characters Ret…...

C/C++模板类模板与函数模板区别,以及用法详解

类模板 类模板语法 类模板作用&#xff1a; 建立一个通用类&#xff0c;类中的成员 数据类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 语法&#xff1a; template<typename T> 类解释&#xff1a; template --- 声明创建模板 typename --- 表面其后面的…...

van-dialog弹窗异步关闭-校验表单

van-dialog弹窗异步关闭 有时候我们需要通过弹窗去处理表单数据&#xff0c;在原生微信小程序配合vant组件中有多种方式实现&#xff0c;其中UI美观度最高的就是通过van-dialog嵌套表单实现。 通常表单涉及到是否必填&#xff0c;在van-dialog的确认事件中直接return是无法阻止…...

Dynamic Wallpaper 16.7中文版

Macos动态壁纸推荐&#xff1a; Dynamic Wallpaper是一款Mac平台上的动态壁纸应用程序&#xff0c;它可以根据时间等因素动态切换壁纸&#xff0c;提供更加生动和多样化的桌面体验。 Dynamic Wallpaper包含了多个动态壁纸&#xff0c;用户可以根据自己的喜好选择和切换。这些…...

​如何使用ArcGIS Pro制作渐变河流效果

对于面要素的河流水系&#xff0c;制作渐变效果方法比较简单&#xff0c;如果是线要素的河流有办法制作渐变效果吗&#xff0c;答案是肯定的&#xff0c;这里为大家介绍一下制作方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的水系数…...

《网络协议》06. HTTP 补充 · HTTPS · SSL/TLS

title: 《网络协议》06. HTTP 补充 HTTPS SSL/TLS date: 2022-10-06 18:09:55 updated: 2023-11-15 07:53:52 categories: 学习记录&#xff1a;网络协议 excerpt: HTTP/1.1 协议的不足、HTTP/2、HTTP/3、HTTP 协议的安全问题、SPDY、HTTPS、SSL/TLS、OpenSSL。 comments: fa…...

Python winreg将cmd/PowerShell(管理员)添加到右键菜单

效果 1. 脚本 用管理员权限运行&#xff0c;重复执行会起到覆盖效果&#xff08;根据sub_key&#xff09;。 icon自己设置。text可以自定义。sub_key可以改但不推荐&#xff08;避免改成和系统已有项冲突的&#xff09;。command不要改。 from winreg import *registry r&q…...

redis运维(九)字符串(二)字符串过期时间

一 字符串过期时间 细节点&#xff1a; 注意命令的入参和返回值 ① 再谈过期时间 说明&#xff1a; 设置key的同时并且设置过期时间,是一个原子操作 ② ttl 检查过期时间 ③ persist 删除过期时间 ④ redis 删除过期key的机制 ⑤ 惰性删除 惰性理解&#xff1a;让过期…...

【C++】多线程的学习笔记(3)——白话文版(bushi

前言 好久没有继续写博客了&#xff0c;原因就是去沉淀了一下偷懒了一下 现在在学网络编程&#xff0c;c的多线程也还在学 这一变博客就讲讲c中的Condition Variable库吧 Condition Variable的简介 官方原文解释 翻译就是 条件变量是一个对象&#xff0c;它能够阻止调用…...

kotlin--3.集合操作

目录 一.list集合 二.Set集合 三.Map集合 迭代遍历Map集合&#xff1a; 8.hashMap 四.Stream流 1.map 2.filter 3.reduce 4.forEach 5.sorted 6.distinct 7.综合案例 一.list集合 在Kotlin中&#xff0c;常见的List集合类型有以下几种&#xff1a; listOf&…...

自动驾驶-BEV感知综述

BEV感知综述 随着自动驾驶传感器配置多模态化、多源化&#xff0c;将多源信息在unified View下表达变得更加关键。BEV视角下构建的local map对于多源信息融合及理解更加直观简洁&#xff0c;同时对于后续规划控制模块任务的开展也更为方便。BEV感知的核心问题是&#xff1a; …...

面试题-3

1.说一下原型链 原型就是一个普通对象,它是为构造函数实例共享属性和方法&#xff0c;所有实例中引用原型都是同一个对象 使用prototype可以把方法挂载在原型上&#xff0c;内存值保存一致 _proto_可以理解为指针,实例对象中的属性,指向了构造函数的原型(prototype) 2.new操…...

C++ Core Guidelines 中文版 GSL

C GSL&#xff08;Guideline Support Library&#xff09;是由 Microsoft 开发的一个开源库&#xff0c;旨在提供一组通用的 C 标准库扩展&#xff0c;以支持 C 标准委员会提出的指导原则。GSL 为 C 开发人员提供了许多有用的工具和类型&#xff0c;以帮助他们编写更安全、更高…...

同时显示上下两层凸包特征的可视化程序

数据类型 std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> hulls_k_upper std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> hulls_k_lower std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr> hulls_underk_upper std::vector<…...

Django框架之模型层(二)

【十二】Django中如何开启事务 事务是MySQL数据库中得一个重要概念 事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全 【1】ACID是数据库事务的四个关键特性 它代表了原子性(Atomicity)、…...

C++之list

C之list list的构造 #include <iostream> #include<list> using namespace std;//打印函数 void printfList(const list<int>&L) {for(list<int>::const_iterator it L.begin();it ! L.end();it){cout<<*it<<" ";}cout<…...

C语言日记——调试篇

一、调试调试的基本步骤 发现程序错误的存在 以隔离、消除等方式对错误进行定位 确定错误产生的原因 提出纠正错误的解决办法 对程序错误予以改正&#xff0c;重新测试 二、Debug和Release Debug通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…...

【python】Django——templates模板、静态文件、django模板语法、请求和响应

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django——templates模板、静态文件、djang…...

Android设计模式--观察者模式

时间是一只藏在黑暗中温柔的手&#xff0c;在你一出神一恍惚之间&#xff0c;物走星移 一&#xff0c;定义 观察者模式是定义对象间一种一对多的依赖关系&#xff0c;使得每当一个对象改变状态&#xff0c;则所有依赖于它的对象都会得到通知并被自动更新 字面意思很好理解&am…...

【Linux】Ubuntu16.04下安装python高版本--源码安装

Ubuntu16.04下完美安装python高版本及对应版本的pip 方法一:直接用命令安装python3.6&#xff08;但我没安装成功&#xff09; 好像是因为Ubuntu16.04的软件仓库&#xff08;源&#xff09;中python的最高版本就是python3.5&#xff0c;所以无法直接用apt来安装 #方法一 sudo…...

变长子网划分问题的二叉树解法

计网的变长子网划分、计组的变长操作码划分、数据结构的哈夫曼编码&#xff0c;都是前缀编码的本质&#xff08;变长操作码的二叉树解法我还在琢磨中&#xff09; 【二叉树解法】每条从叶结点到根节点的路径上有且只有一个被分配的结点&#xff1a; 【例】现将一个IP网络划分成…...

编译安装redis及配置多实例

yum安装是这种十分简单的方法我们就不在提及了&#xff0c;今天我们来做一下redis的编译安装 Redis源码包官方下载链接&#xff1a;http://download.redis.io/releases/ 一、编译安装&#xff1a; 安装依赖包 dnf -y install make gcc jemalloc-devel systemd-devel如果是…...