1️⃣ 第九章 fine-tuning

第九章 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>

經過微調舊有模型後,仍然有虛假資訊

3個讚

Jacky 兄真是速度驚人,太佩服了,看來我也得加把勁努努力,爭取能迎頭趕上~

1個讚