详细教程:自定义大模型之微调ChatGPT
详细教程:自定义大模型之微调ChatGPT
本文将详细介绍如何微调ChatGPT模型,使其能够根据特定需求进行优化。通过对比特征工程和微调的区别,逐步讲解微调的具体步骤和注意事项。
我们先从原理入手,你看这张图,左边是Pre-trained LLM (预训练大模型模型),也就是像ChatGPT这样的模型;右边是Fine-tuned LLM (微调过的语言大模型),中间就是进行微调的过程,它需要我们提供一些「ChatGPT提供不了但是我们需要的东西」。
比如说我们这个回答就是想微调一个『使用中国道家思想和语录进行回答的聊天机器人』
这个很好理解,打个比方,你想让ChatGPT输出跟道家高人一样,每句话都希望它能从「周易」「道德经」这样的著作中引经据典。
GPT是做不到的,因为它训练的预料大多数是通用知识,而周易或者道德经这种属于是特定领域的知识,以后不排除它会拿左右的资料进行训练,但是现在的GPT确实做不到。
这个时候就出现了两种解决办法,一种是这个题目问的「Fine-tune微调」,另一种是通过「Prompt engineering特征工程」。
这张图很清楚地说明了这两者的不同,“扳手”指的地方是变化的地方,特征工程只是改变输入,也就是给输入中增加更多的内容,而LLM大模型本身是不变的;而Fine-tune微调它改变的就是LLM本身。
微调不是万能的。
根据OpenAI的官方介绍,微调适用于以下五种情况:
- 调整写作风格、语气、格式等
- 提高生成正确结果的稳定性
- 修正模型在复杂提示下的表现
- 处理一些特殊的、意外的情况
- 学习和执行在提示中无法明确说明的新技能或任务
如果你确定你的问题通过prompt engineering解决不了,那么做Fine-Tune的话就是下面几个步骤:
- 确定进行微调的模型
- 准备并上传训练数据
- 训练新的微调模型
- 评估结果并根据需要是否重新训练
- 使用您的微调模型
我在对OpenAI的API做微调的时候,碰到的最大问题就在于准备数据集上,因为其他步骤基本是都是自动化的,数据集的质量好坏其实决定了微调后模型的好坏。我失败了好几次的原因就是因为数据集的格式不对,它不是普通的json格式,而是jsonl格式,这一点儿我会在后面单独提到。
我们一步步地进行准备。
第一步:确定进行微调的模型
OpenAI有很多模型,从初代GPT3到现在最新的GPT4o,大多数的模型都有其API,但是并不是所有的大模型都可以进行微调。
真正能进行微调的就是这五个模型:
- gpt-3.5-turbo-0125
- gpt-3.5-turbo-1106
- gpt-3.5-turbo-0613
- babbage-002
- davinci-002
其中最推荐的就是gpt-3.5-turbo-0125,属于是便宜还好用的一款模型。
第二步:准备并上传训练数据
训练数据分为两种格式,对于gpt-3.5-turbo这个系列,它的训练数据是「对话」格式的。
比如这个例子:
{“messages”: [{“role”: “system”, “content”: “Marv is a factual chatbot that is also sarcastic.”}, {“role”: “user”, “content”: “What’s the capital of France?”}, {“role”: “assistant”, “content”: “Paris, as if everyone doesn’t know that already.”}]}
这个例子是为了微调一个偶尔回答带有讽刺意味的机器人。