使用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的功能

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

RAG vs 微调

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

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

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

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

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

RAG/微调混合方法

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

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

  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分钟。下面的电子邮件如下。

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

在收到该电子邮件之前,如果在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的评分不错,但忠实度有点低。

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

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

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

使用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

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

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

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

可以看到在解决了这四个质量差的问题后,微调版的上升了5.9%。所以评估问题和训练数据需要更多的调整,以确保良好的数据质量。这确实是一个非常有趣的探索领域。

3、微调的成本

经过微调的gpt-3.5-turbo的价格高于基本模型的。我们来看看基本模型、微调模型和gpt-4之间的成本差异:

使用GPT-4生成训练数据微调GPT-3.5 RAG管道,人工智能,深度学习,大语言模型,chatgpt

比较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://avoid.overfit.cn/post/0a4ae4d87e69457dbd899d7a9af07237

作者:Wenqi Glantz文章来源地址https://www.toymoban.com/news/detail-697099.html

到了这里,关于使用GPT-4生成训练数据微调GPT-3.5 RAG管道的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GPT-LLM-Trainer:如何使用自己的数据轻松快速地微调和训练LLM

    想要轻松快速地使用您自己的数据微调和培训大型语言模型(LLM)?我们知道训练大型语言模型具有挑战性并需要耗费大量计算资源,包括收集和优化数据集、确定合适的模型及编写训练代码等。今天我们将介绍一种实验性新方法,实现特定任务高性能模型的训练。 我们的目

    2024年02月11日
    浏览(43)
  • 全面对比GPT-3.5与LLaMA 2微调

    通用大模型虽好,但通过微调得到一个专属大模型不仅可以提高模型的可操控性、输出格式的可靠性和语气的一致性,还能让用户缩短提示长度,加速API调用,降低成本。 本文作者Sam L\\\'Huillier对GPT-3.5与LLaMA 2的微调进行了基准测试,以验证手动微调的模型能否以较低的成本接

    2024年02月08日
    浏览(39)
  • 【人工智能】GPT-4 的使用成本,竟然是GPT-3.5的50倍之多 —— 大语言模型(LLM)开发者必须知道的数字

    GPT-4的使用成本,竟然是GPT-3.5的50倍之多; 而让大语言模型同时处理25个请求的时间,仅是处理单个请求的2倍…… 这些数据听上去可能有些出乎意料,但都是真实的。 它们出自一篇名为《大语言模型(LLM)开发者必须知道的数字》的GitHub文章。 GitHub - ray-project/llm-numbers: Nu

    2024年02月07日
    浏览(72)
  • GPT实战系列-如何用自己数据微调ChatGLM2模型训练

    广告文案生成模型 输入文字 :类型#裙 颜色#蓝色 风格#清新*图案#蝴蝶结 输出文案 :裙身处采用立体蝴蝶结装饰辅以蓝色条带点缀,令衣身造型饱满富有层次的同时为其注入一丝甜美气息。将女孩清新娇俏的一面衬托而出。 训练和测试数据组织: 数据可以从 下载链接,t

    2024年02月06日
    浏览(50)
  • 【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

    近日小编在使用最新版GPT-4-Turbo模型(主要特点是支持128k输入和知识库截止日期是2023年4月)时,发现不同商家提供的模型回复出现不一致的情况,尤其是 模型均承认自己知识库达到2023年4月,但当我们细问时,Fake GPT4-Turbo(暂且这样称呼)出现了明显胡编乱造的情况 ,如下

    2024年02月04日
    浏览(41)
  • 【大模型】自动化问答生成:使用GPT-3.5将文档转化为问答对

    当我们需要将大段文档转化为问答对时,OpenAI的GPT-3.5模型提供了一个强大的工具。这个教程将向您展示如何编写一个Python脚本,利用GPT-3.5的能力,将文档转化为一问一答的问答对。这个流程几乎无需人工介入,能够自动获取问题并生成答案。我们将使用GPT-3.5-16k,以便处理大

    2024年02月10日
    浏览(38)
  • Azure Machine Learning - Azure OpenAI GPT 3.5 Turbo 微调教程

    本教程将引导你在Azure平台完成对 gpt-35-turbo-0613 模型的微调。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负

    2024年02月04日
    浏览(60)
  • 如何使用GPT-3.5提高渗透测试工作效率以及测试用例自动生成

    部分数据来源: ChatGPT         作为一名渗透测试人员,我们需要分析和发现网络安全漏洞,并开发和测试安全解决方案。这是一个重复性工作的任务,如果我们能够使用GPT-3.5来协助我们完成这个任务,那将会提高我们的效率和减少工作量。 在本文中,我将介绍一些GPT

    2024年02月06日
    浏览(79)
  • 第一章--第二篇--GPT-3.5 人工智能模型

    一、引言 GPT-3.5 是自然语言处理领域的一种基于深度学习的模型,它是 GPT-3 模型的进一步发展和完善。GPT-3.5 模型采用了更加先进的深度学习技术和更加丰富的语料库,可以生成更加自然、流畅和准确的文本。本文将从以下几个方面介绍 GPT-3.5 模型:模型原理、模型结构、应

    2024年02月02日
    浏览(51)
  • OpenAI推出GPT-3.5Turbo微调功能并更新API;Midjourney更新局部绘制功能

    🦉 AI新闻 🚀 OpenAI推出GPT-3.5Turbo微调功能并更新API,将提供GPT-4微调功能 摘要 :OpenAI宣布推出GPT-3.5Turbo微调功能,并更新API,使企业和开发者能够定制ChatGPT,达到或超过GPT-4的能力。通过微调,用户可以让模型更好地遵循指令、一致格式化响应,并适应特定品牌需求。此外

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包