第九章 Fine-Tuning and ChatBots
44th Introduction to Fine-Tuning and Chat Bots
ChatGPT:
重點整理預先格式化文字
歡迎大家來到課程的這一部分,該專案將成為使用微調以創建聊天機器人。
我們已經知道 GPT 模型存在局限性,例如達芬奇模型,例如它們的訓練數據不會包含專有或專用資訊。因此,如果您在一家公司工作,並且發現自己必須為您的專有內容插入大量上下文提示中的資訊,這將是一個限制。我們還知道,訓練數據不會是最新事件的最新數據。因此,如果昨天剛剛發生了一些事情,那麼至少在目前,它們可能不會發生。24小時更新這些模型。
那麼我們能做什麼呢?好吧,微調允許我們採用現有模型並繼續在特定數據集上進行訓練。因此,如果您發現自己需要在提示中不斷提供非常具體的示例,或者您正在試圖最好地嘗試快速工程以獲得結果,但它並沒有讓你一路走來,您有一個可以提供幫助的數據集。這意味著微調可能是您的解決方案。因此,微調可以讓您通過提供更高品質的結果,而不僅僅是取決於提示設計。它還使您能夠訓練更多適合提示的範例。因此,如果您發現自己因為必須適應更多示例而耗盡提示令牌空間,在這種情況下,嘗試對示例進行微調可能是有意義的。此外,您將在自己的自定義微調模型上獲得更低的延遲請求。
現在,微調要求以特定方式格式化數據,並帶有提示和理想的完成。所以從本質上講,我們要做的是構建一個JSON檔,它看起來很像一個 Python 詞典,其中有一個提示和提示文本,然後是一個完成鍵和理想
Note:
使用時機:更多的客製化與使用新數據
官方連結 https://platform.openai.com/docs/guides/fine-tuning
費用(官網最新價格)
Model | Training | Usage |
---|---|---|
Ada | $0.0004 / 1K tokens | $0.0016 / 1K tokens |
Babbage | $0.0006 / 1K tokens | $0.0024 / 1K tokens |
Curie | $0.0030 / 1K tokens | $0.0120 / 1K tokens |
Davinci | $0.0300 / 1K tokens | $0.1200 / 1K tokens |
訓練輪數預設為 4,舊型號相對比較便宜,講師建議訓練用舊的試試看,看能不能得到不錯的效果
下一章節 text embedded 是更便宜的替代方案
要進行微調,請記得先自己做好資料清洗
OpenAI library tiktoken 用來評估訓練模型的計費
json format
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...
45th Data Set-up
Note:
csv 檔案讀取
import pandas as pd
qa_df = pd.read_csv("python_qa.csv")
questions, answers = qa_df['Body'], qa_df['Answer']
產 json file
qa_openai_format = [{"prompt":q, "completion":a} for q,a in zip(questions, answers)]
import json
dataset_size = 500
with open("example_training_data.json","w") as f:
for entry in qa_openai_format[:dataset_size]:
f.write(json.dumps(entry))
f.write('\n')
使用 text-babbage-001 產生虛假資訊,嘗試微調 babbage 來產生更實際的資訊
46th Fine-Tuning Process and Price Estimation
Note:
tiktoken 支援三種不同的編碼
“gpt2” 大部分的 gpt-3 models
“p50k_base” Davinci
“cl100k_base” text-embedding-ada-002
import tiktoken
def num_tokens_from_string(string, encoding_name):
encoding = tiktoken.get_encoding(encoding_name)
num_tokens = len(encoding.encode(string))
return num_tokens
47th Using the Fine-Tuned Model
Note:
在 visual studio 中開啟 PowerShell
Python Environments >> OverView >> Open in PowerShell
顯示自己環境變數中的 api key
ls env:OPEN_API_KEY
如果沒有的話
set OPEN_API_KEY=xxxxxxxxxxxxx
其他相關程式碼
#驗證您的格式化數據
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
#創建微調模型
openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>
#繼續微調指令,執行過程中會顯示訓練的價格(與tiktoken的計算有不少的出入)
openai api fine_tunes.follow -i <YOUR_FINE_TUNE_JOB_ID>
# List all created fine-tunes
openai api fine_tunes.list
# Retrieve the state of a fine-tune. The resulting object includes
# job status (which can be one of pending, running, succeeded, or failed)
# and other information
openai api fine_tunes.get -i <YOUR_FINE_TUNE_JOB_ID>
# Cancel a job
openai api fine_tunes.cancel -i <YOUR_FINE_TUNE_JOB_ID>
經過微調舊有模型後,仍然有虛假資訊