上一篇介紹了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)