上一篇介绍了RAG(检索增强生成),这篇文章介绍LLM进行特定领域的知识或专有数据需要进行特定的另一种方式Fine-tuning

Fine-tuning,简单来说就是在预先训练好的模型基础上使用新的数据集进行进一步的训练,以适应特定任务或者领域。
举个简单的例子:就好比我们去商店买了条裤子,这条裤子就相当于已经训练好的大模型,试了之后呢发现裤子太长于是请裁缝根据我们的身材做了个小改动,这个小改动就相当于Fine-tuning
Fine-turing的优势:
1、节省时间和资源,不需要从新开始训练模型
2、能够提供更好的性能,利用预训练模型的通用知识再加上针对性的训练,就可以得到在一个领域上的小模型
3、它会需要更少的数据(相比从0开始训练,fine-turing所需数据量更小)
4、快速适应新任务(快速将模型应用到新的或相关的任务当中)
需要注意的:
1、避免过拟合(要使用适量的数据和合适的训练参数)
2、最好保持原模型的优点,不要改变预训练模型的特性
3、选择合适的预训练模型(与目标任务相关性越高越好)
大模型的文本生成模型已在大量文本上进行了预训练。为了有效地使用这些模型,我们在提示中包含了说明,有时还会包含几个示例。使用演示来展示如何执行任务通常被称为“少量学习”。
Fine-tuning(微调)通过训练比提示中更多的示例来改进小样本学习,让您在大量任务上取得更好的结果。一旦模型经过微调,您就不需要在提示中提供那么多示例。这可以节省成本并实现更低延迟的请求。
Fine-tuning(微调)可以在很少量样本的情况下,让大模型在某些垂直的领域发挥更加出色的功能(可以理解为我们在大模型的基础上有一个小模型),当我们基于这个模型去做一些问答的时候,它会优先在小模型上去寻找更加精确的答案。如果在小模型上没有找到答案的话,这个问题会流向大模型
Fine-tuning(微调),不仅可以提供更高质量的结果,还可以训练更多范例、节省Token和降低请求延迟。
Fine-tuning(微调)的步骤包括
1、选择合适的预训练模型
2、准备针对性的数据集
3、设置训练参数
4、进行fine-tuning训练
5、Evaulation评估模型性能
6、根据需要进行调整和优化
微调中最关键的部分,也是最难理解的地方:就是数据集
官方建议:
要微调模型,需要提供至少10个示例。通常会使用和微调50到100个训练示例后看到明显的改进,但是正确的数量会根据具体用例而有很大差异。
示例格式:
{"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."}]
}
{"messages": [
{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."},
{"role": "user", "content": "Who wrote 'Romeo and Juliet'?"},
{"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]
}
{"messages": [
{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."},
{"role": "user", "content": "How far is the Moon from Earth?"},
{"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]
}
准备好数据集后,接下来是创建fine-tuning作业。(目前支持:fine-tuning UI或 以编程的方式创建微调作业)
from openai import OpenAI
client = OpenAI()
client.fine_tuning.jobs.create(
training_file="fine_tuned_model", //自定义微调模型的名称
model="gpr-4o-mini-2024-07-18" //要微调的目标模型名称
)
启动微调后,需要一些时间才能完成。模型训练完成后,则可以使用该微调模型
使用微调模型:
当微调作业完成后,可以讲此模型制定为LLM中的model参数值,通过传递模型名称来开始发出请求
eg:
from openai import OpenAI
client = OpenAI(fine_tuned_model)
completion = client.chat.completions.create(
model="",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)