精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

指南來了!微調(diào)GPT3.5,定制大模型!

原創(chuàng) 精選
人工智能
GPT-3.5 Turbo 的微調(diào)功能為開發(fā)者和企業(yè)提供了一種有效的方式,以定制大語言模型以適應特定的應用需求。通過微調(diào),模型在執(zhí)行任務時不僅更可操控、輸出更可靠,而且可以更準確地反映企業(yè)的品牌語氣。此外,微調(diào)還有助于減少API調(diào)用的時間和成本。

作者 | 崔皓

審校 | 重樓

通用模型雖好,但微調(diào)訓練得到一個自己的專屬大模型更能讓技術人心動。最近,GPT-3.5 Turbo最近推出了一項全新的微調(diào)功能,該功能允許開發(fā)者和企業(yè)精準定制模型,以滿足特定應用場景的需求。

微調(diào)GPT,不僅可以提高模型的可操控性、輸出格式的可靠性和語氣的一致性,還使企業(yè)能夠縮短提示長度,從而加速API調(diào)用并降低成本。

本文就帶領諸位見證微調(diào)大模型的魅力,了解GPT-3.5 Turbo,并實現(xiàn)一個關于天氣的調(diào)優(yōu)模型。

1、GPT-3.5 Turbo微調(diào)功能好在哪里

GPT-3.5 Turbo,一款業(yè)界領先的大型語言模型,最近推出了一項令人振奮的微調(diào)功能。該功能允許開發(fā)者和企業(yè)能夠根據(jù)特定用例定制模型,從而實現(xiàn)更高的性能和更佳的用戶體驗。

首先,微調(diào)已經(jīng)顯著提高了模型的“可操控性”。模型現(xiàn)在可以更準確地按照用戶的指示進行操作,無論是生成更簡潔的輸出,還是針對特定語言進行響應。

其次,微調(diào)還可以改善模型的輸出格式。開發(fā)者可以將用戶的輸入轉換為高質(zhì)量的JSON片段,從而完成與其他系統(tǒng)的集成。

此外,微調(diào)還增強了模型輸出的“語氣”,使其更符合企業(yè)的調(diào)性,從而增加企業(yè)品牌的識別度和一致性。

2、微調(diào)的成本和定價

在介紹GPT-3.5 Turbo版本的微調(diào)之前,我先跟大家說下安全和定價問題。

微調(diào)是一個復雜但重要的過程。確保安全性是首要任務。據(jù)OpenAI官方解釋,訓練數(shù)據(jù)會通過審核API和GPT-4審核系統(tǒng)進行篩選,確保符合安全標準。

成本方面,微調(diào)分為訓練和使用兩個環(huán)節(jié)。訓練成本按令牌數(shù)量計算,每1000個令牌的價格為$0.008。使用成本也按令牌計算,輸入和輸出分別是每1000個令牌$0.012和$0.016。

以100,000個令牌和3個訓練周期為例,預計微調(diào)成本為$2.40。這一點對于預算有限的開發(fā)者或企業(yè)來說,提供了明確的費用預測。

總體而言,微調(diào)提供了性能和安全性的平衡,同時給出了明確的成本結構。這些因素都是在進行模型微調(diào)時需要考慮的關鍵要素。

3、為什么微調(diào)GPT3.5更劃算

模型微調(diào)的目的是為了增加性能和效率。微調(diào)現(xiàn)在能夠生成比提示更高質(zhì)量的結果,并且能夠在提示中容納更多的示例,從而提高了所謂的“少量樣本學習”的效果。

一旦模型經(jīng)過微調(diào),提示可以更短,從而節(jié)省令牌和成本。這也意味著請求將具有更低的延遲,從而提供更快的響應。

微調(diào)涉及幾個關鍵步驟,包括準備和上傳訓練數(shù)據(jù),訓練新的微調(diào)模型,以及模型的實際使用。具體的定價信息已在OpenAI的定價頁面上公布。

目前,推薦使用的微調(diào)模型是gpt-3.5-turbo-0613,但也支持其他模型如babbage-002和davinci-002。OpenAI預計今年晚些時候將為GPT-4啟用微調(diào)功能。

4、何時進行微調(diào)

雖然GPT模型進行微調(diào)確實能夠提高其在特定任務上的性能,但這并不應是首選方案。在微調(diào)之前,開發(fā)者可以先嘗試通過提示工程、提示鏈接和函數(shù)調(diào)用來優(yōu)化模型性能。與微調(diào)相比,這些策略具有更快的反饋循環(huán),允許開發(fā)者在不創(chuàng)建數(shù)據(jù)集和運行訓練作業(yè)的情況下迅速迭代和改進。事實上,許多初步表現(xiàn)不佳的任務可以通過更精確的提示而得到改善,從而避免了微調(diào)的需要。

即使在微調(diào)成為必要的情況下,早期的提示工程工作也不會浪費。實際上,最佳的微調(diào)效果通常可在使用了良好提示的數(shù)據(jù)中觀察到。就是使用更加廉價,高效的方式來優(yōu)化模型,在效果不佳的情況下再考慮對模型進行微調(diào),畢竟微調(diào)需要付出更高的時間和資金成本。

微調(diào)主要用于改善模型在風格、語調(diào)、格式和特定任務方面的性能。同時,它也能有效地降低成本和延遲,特別是當從GPT-4遷移到gpt-3.5-turbo時。

廢話不多說,我們開始微調(diào)GPT-3.5 Trubo模型。

5、準備數(shù)據(jù)集

我們想把GPT-3.5 Turbo模型調(diào)優(yōu)成一個天氣預報員,不過這個預報員會通過說冷笑話的方式來預報天氣。第一步,我們需要準備一些數(shù)據(jù)集。

數(shù)據(jù)集中的每個示例都需要與Chat completions API相同格式的對話,具體來說,每條消息都有角色、內(nèi)容和可選名稱。

下面是官方提供的樣例:

{"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."}]}

JSON對象是用于微調(diào)GPT模型的訓練數(shù)據(jù)示例。每個JSON對象代表一個對話實例,由三個部分組成:

(1)系統(tǒng)消息(System Message):定義了聊天機器人(在這里是名為“Marv”的機器人)的基本特性。在這個例子中,系統(tǒng)消息標明Marv是一個提供準確信息但也具有諷刺性的聊天機器人。

(2)用戶消息(User Message):這是用戶向聊天機器人提出的問題或命令。

(3)助理消息(Assistant Message):這是聊天機器人對用戶消息的響應。在這個例子中,由于Marv是一個諷刺性的聊天機器人,所以它的回應是準確但帶有諷刺色彩的。

具體地,每條消息都有兩個字段:

role:指定消息的發(fā)送者角色,可以是system、user或assistant。

content:包含消息內(nèi)容的字段。

要微調(diào)模型,需要至少提供10個示例。如果能夠準備50到100個訓練示例,對gpt-3.5-turbo進行微調(diào)會有明顯的改善。官方建議可以準備50個示例進行微調(diào),在觀察微調(diào)結果后再尋求改善。需要說明的是,每個訓練示例限制為4096個令牌。超過此長度的示例將在訓練時截斷為前4096個令牌。為確保整個訓練示例適合上下文,請考慮檢查消息內(nèi)容中的總令牌計數(shù)是否低于4000。每個文件目前限制為50 MB。

為了估算微調(diào)作業(yè)的成本,可以使用以下公式:對于訓練了3周期的100,000個令牌的訓練文件,預計成本將為~$2.40。

在清楚上面的情況以后,我們來創(chuàng)建自己的數(shù)據(jù)集合。我們想讓GPT-3.5 Turbo成為一個會講笑話的天氣助理。并且通過不同的問答的方式,告訴它如何“幽默”地回答人類關于天氣的問題。

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "今天北京的天氣怎么樣?"}, {"role": "assistant", "content": "今天北京的天氣晴朗,就像我的心情一樣明朗!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "上海明天會下雨嗎?"}, {"role": "assistant", "content": "上海明天不會下雨,但我的幽默感可能會淋濕你!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "廣州的濕度怎么樣?"}, {"role": "assistant", "content": "廣州的濕度很高,就像我的幽默感一樣無處不在!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "成都的溫度是多少?"}, {"role": "assistant", "content": "成都的溫度適中,就像一杯剛剛好的茶!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "杭州周末會晴天嗎?"}, {"role": "assistant", "content": "杭州周末會是晴天,完美的野餐天氣!別忘了帶上笑容。"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "深圳冬天冷嗎?"}, {"role": "assistant", "content": "深圳的冬天不冷,但我的冷笑話可能會讓你打寒顫!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "武漢夏天熱嗎?"}, {"role": "assistant", "content": "武漢的夏天非常熱,就像我的幽默感一樣火辣!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "西安有沙塵暴嗎?"}, {"role": "assistant", "content": "西安偶爾有沙塵暴,但不要擔心,我的笑話會吹走沙塵!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "重慶的天氣如何?"}, {"role": "assistant", "content": "重慶的天氣多變,就像我的幽默感一樣難以捉摸!"}]}

{"messages": [{"role": "system", "content": "你是一個會講笑話的天氣助理。"}, {"role": "user", "content": "南京的春天怎么樣?"}, {"role": "assistant", "content": "南京的春天溫暖宜人,就像一首美麗的詩歌!"}]}

6、檢查數(shù)據(jù)格式

前面我們創(chuàng)建了數(shù)據(jù)集合,雖然有一些需要注意的地方,但是整個過程還是比較方便的。如果你的訓練集合比較大,要處理的數(shù)據(jù)比較多,就需要謹慎一些,畢竟每次調(diào)優(yōu)都是在花真金白銀的。因此,如果數(shù)據(jù)量比較大的話,我建議對數(shù)據(jù)格式進行檢查。這里創(chuàng)建了一個簡單的Python腳本,您可以使用它來查找潛在錯誤、查看令牌計數(shù)并估算微調(diào)作業(yè)的成本。這個檢查并非必選項,各位可以酌情選擇。

如下代碼首先加載一個包含聊天消息的數(shù)據(jù)集,并對其進行初步檢查。然后,它遍歷數(shù)據(jù)集,檢查每個示例的格式是否正確,并記錄任何格式錯誤。最后,它使用tiktoken庫來計算數(shù)據(jù)集中的令牌數(shù)量,并打印一些統(tǒng)計信息,例如示例數(shù)量、消息數(shù)量、對話長度和助理消息長度的分布。此外,它還計算了訓練的預計成本和時期數(shù)量。

# 導入必要的包
import json
import os
import tiktoken
import numpy as np
from collections import defaultdict

# 指定數(shù)據(jù)路徑
data_path = "<YOUR_JSON_FILE_HERE>"

# 通過讀取文件中的每一行并解析為JSON對象來加載數(shù)據(jù)集
with open(data_path) as f:
    dataset = [json.loads(line) for line in f]

# 打印數(shù)據(jù)集的統(tǒng)計信息,例如示例數(shù)量和第一個示例
print("Num examples:", len(dataset))
print("First example:")
for message in dataset[0]["messages"]:
    print(message)

# 初始化格式錯誤計數(shù)器
format_errors = defaultdict(int)

# 遍歷數(shù)據(jù)集,檢查每個示例的格式
for ex in dataset:
    # 檢查示例是否為字典
    if not isinstance(ex, dict):
        format_errors["data_type"] += 1
        continue

    # 獲取消息列表
    messages = ex.get("messages", None)
    # 檢查消息列表是否存在
    if not messages:
        format_errors["missing_messages_list"] += 1
        continue

    # 遍歷消息,檢查格式
    for message in messages:
        # 檢查消息是否包含“role”和“content”鍵
        if "role" not in message or "content" not in message:
            format_errors["message_missing_key"] += 1

        # 檢查消息是否包含未識別的鍵
        if any(k not in ("role", "content", "name") for k in message):
            format_errors["message_unrecognized_key"] += 1

        # 檢查角色是否被識別
        if message.get("role", None) not in ("system", "user", "assistant"):
            format_errors["unrecognized_role"] += 1

        # 檢查內(nèi)容是否存在且為字符串
        content = message.get("content", None)
        if not content or not isinstance(content, str):
            format_errors["missing_content"] += 1

    # 檢查示例中是否缺少助理消息
    if not any(message.get("role", None) == "assistant" for message in messages):
        format_errors["example_missing_assistant_message"] += 1

# 打印找到的錯誤
if format_errors:
    print("Found errors:")
    for k, v in format_errors.items():
        print(f"{k}: {v}")
else:
    print("No errors found")

# 使用tiktoken庫來獲取編碼
encoding = tiktoken.get_encoding("cl100k_base")

# 定義計算消息中令牌數(shù)量的函數(shù)
def num_tokens_from_messages(messages, tokens_per_message=3, tokens_per_name=1):
    num_tokens = 0
    for message in messages:
        num_tokens += tokens_per_message
        for key, value in message.items():
            num_tokens += len(encoding.encode(value))
            if key == "name":
                num_tokens += tokens_per_name
    num_tokens += 3
    return num_tokens

# 定義計算助理消息中令牌數(shù)量的函數(shù)
def num_assistant_tokens_from_messages(messages):
    num_tokens = 0
    for message in messages:
        if message["role"] == "assistant":
            num_tokens += len(encoding.encode(message["content"]))
    return num_tokens

# 定義打印值分布的函數(shù)
def print_distribution(values, name):
    print(f"\n#### Distribution of {name}:")
    print(f"min / max: {min(values)}, {max(values)}")
    print(f"mean / median: {np.mean(values)}, {np.median(values)}")
    print(f"p5 / p95: {np.quantile(values, 0.1)}, {np.quantile(values, 0.9)}")

# 初始化警告和令牌計數(shù)
n_missing_system = 0
n_missing_user = 0
n_messages = []
convo_lens = []
assistant_message_lens = []

# 遍歷數(shù)據(jù)集,計算警告和令牌計數(shù)
for ex in dataset:
    messages = ex["messages"]
    if not any(message["role"] == "system" for message in messages):
        n_missing_system += 1
    if not any(message["role"] == "user" for message in messages):
        n_missing_user += 1
    n_messages.append(len(messages))
    convo_lens.append(num_tokens_from_messages(messages))
    assistant_message_lens.append(num_assistant_tokens_from_messages(messages))

# 打印缺少的系統(tǒng)和用戶消息數(shù)量,以及消息、對話和助理消息的長度分布
print("Num examples missing system message:", n_missing_system)
print("Num examples missing user message:", n_missing_user)
print_distribution(n_messages, "num_messages_per_example")
print_distribution(convo_lens, "num_total_tokens_per_example")
print_distribution(assistant_message_lens, "num_assistant_tokens_per_example")
n_too_long = sum(l > 4096 for l in convo_lens)
print(f"\n{n_too_long} examples may be over the 4096 token limit, they will be truncated during fine-tuning")

# 定義最大令牌數(shù)量和目標示例數(shù)量
MAX_TOKENS_PER_EXAMPLE = 4096
MIN_TARGET_EXAMPLES = 100
MAX_TARGET_EXAMPLES = 25000
TARGET_EPOCHS = 3
MIN_EPOCHS = 1
MAX_EPOCHS = 25

# 計算時期數(shù)量
n_epochs = TARGET_EPOCHS
n_train_examples = len(dataset)
if n_train_examples * TARGET_EPOCHS < MIN_TARGET_EXAMPLES:
    n_epochs = min(MAX_EPOCHS, MIN_TARGET_EXAMPLES // n_train_examples)
elif n_train_examples * TARGET_EPOCHS > MAX_TARGET_EXAMPLES:
    n_epochs = max(MIN_EPOCHS, MAX_TARGET_EXAMPLES // n_train_examples)

# 計算數(shù)據(jù)集中的計費令牌數(shù)量
n_billing_tokens_in_dataset = sum(min(MAX_TOKENS_PER_EXAMPLE, length) for length in convo_lens)
print(f"Dataset has ~{n_billing_tokens_in_dataset} tokens that will be charged for during training")
print(f"By default, you'll train for {n_epochs} epochs on this dataset")
print(f"By default, you'll be charged for ~{n_epochs * n_billing_tokens_in_dataset} tokens")
print("See pricing page to estimate total costs")

開始調(diào)優(yōu)
數(shù)據(jù)集建立好了, 并且也對它進行了檢查。接下來就開始調(diào)優(yōu)了。 
上傳數(shù)據(jù)集
將數(shù)據(jù)集保存到 "gpt-3.5-turbo-ft-file.jsonl"文件中。執(zhí)行如下代碼:
import openai
openai.File.create(
  file=open("gpt-3.5-turbo-ft-file.jsonl", "rb"),
  purpose='fine-tune'
)

import openai:這行代碼導入了 OpenAI 的 Python 庫,以便使用其 API 功能。

openai.File.create(...): 這個函數(shù)用于在 OpenAI 服務器上創(chuàng)建一個新的文件。可以對上傳文件做后續(xù)處理或操作(在這種情況下,是為了微調(diào)模型)。

file=open("gpt-3.5-turbo-ft-file.jsonl", "rb"): 這里,file 參數(shù)指定了要上傳的文件。函數(shù) open("gpt-3.5-turbo-ft-file.jsonl", "rb") 打開了一個名為 gpt-3.5-turbo-ft-file.jsonl 的文件,以二進制讀取模式("rb")。

purpose='fine-tune':這個 purpose 參數(shù)標記了文件上傳的目的。在這里,目的是“微調(diào)”(fine-tune)模型。

執(zhí)行上述代碼之后得到如下結果:

<File file id=file-F8Gh75F2A5R0gWlq5KADZdZG at 0x78f25bdc1df0> JSON: { 
"object": "file", 
"id": "file-F8Gh75F2A5R0gWlq5KADZdZG", 
"purpose": "fine-tune", 
"filename": "file", 
"bytes": 2545, 
"created_at": 1692886089, 
"status": "uploaded", 
"status_details": null }

我們來逐一解釋一下返回的結果。

"object": "file":指示這個 JSON 對象代表一個“文件”。

"id": "file-F8Gh75F2A5R0gWlq5KADZdZG": 這是文件的唯一標識符(ID)。在后續(xù)的調(diào)優(yōu)中用到它,也就是針對這個上傳文件進行調(diào)優(yōu)。

"purpose": "fine-tune": 這表示文件的用途是用于微調(diào)模型,這與你在 openai.File.create() 函數(shù)中設置的 purpose='fine-tune' 是一致的。

"filename": "file": 這是上傳文件的名稱。在這個例子中,它被簡單地命名為 "file"。

"bytes": 2545": 這表示文件的大小是 2545 字節(jié)。

"created_at": 1692886089":這是文件創(chuàng)建(或上傳)時間的 Unix 時間戳。

"status": "uploaded": 這表示文件的當前狀態(tài)是“已上傳”。

"status_details": null:這里提供了關于文件狀態(tài)的額外細節(jié)。在這個例子中,沒有提供額外的狀態(tài)細節(jié)(null)。

7、進行調(diào)優(yōu)

好了,文件上傳之后接著執(zhí)行調(diào)優(yōu)的代碼如下:

openai.FineTuningJob.create(training_file="file-F8Gh75F2A5R0gWlq5KADZdZG", model="gpt-3.5-turbo")

代碼比較簡單,看上去也比較好理解:

training_file="file-F8Gh75F2A5R0gWlq5KADZdZG": training_file參數(shù)指定了用于微調(diào)的訓練數(shù)據(jù)文件的 ID。這個 ID 應該是你之前上傳文件時獲得的。

model="gpt-3.5-turbo": model 參數(shù)指定了你想微調(diào)的模型版本。在這個例子中,選擇的是 GPT-3.5 Turbo。

8、查看調(diào)優(yōu)進度

調(diào)優(yōu)并不是一蹴而就的,整個過程會有OpenAI服務器完成,因此需要等待一段時間。在這段時間里面,我們會通過代碼檢查調(diào)優(yōu)的狀態(tài)和進度。

# List 10 fine-tuning jobs
openai.FineTuningJob.list(limit=10)

# Retrieve the state of a fine-tune
response = openai.FineTuningJob.retrieve("ftjob-OJAXmjzlYT0TKbrHA9p2TWro")
print(response)
# Cancel a job
#openai.FineTuningJob.cancel("ft-abc123")

# List up to 10 events from a fine-tuning job
#openai.FineTuningJob.list_events(id="ft-abc123", limit=10)

# Delete a fine-tuned model (must be an owner of the org the model was created in)
#import openai
#openai.Model.delete("ft-abc123"

一起來看看上面的代碼做了什么,注釋掉的部分雖然在本例中沒有用到,但是在一些場景會使用,因此一并放了進來:

(1)查看微調(diào)作業(yè)列表:`openai.FineTuningJob.list(limit=10)`**: 這一行列出了最近的 10 個微調(diào)作業(yè)。`limit=10` 表示最多列出 10 個作業(yè)。這對于跟蹤多個微調(diào)任務或查看歷史作業(yè)非常有用。

(2)獲取微調(diào)作業(yè)的狀態(tài):`response = openai.FineTuningJob.retrieve("ftjob-OJAXmjzlYT0TKbrHA9p2TWro")`**: 這一行通過微調(diào)作業(yè)的唯一 ID(在這里是 `"ftjob-OJAXmjzlYT0TKbrHA9p2TWro"`)來檢索特定微調(diào)作業(yè)的狀態(tài)和信息。

(3)取消微調(diào)作業(yè)(注釋掉了):`#openai.FineTuningJob.cancel("ft-abc123")`**:可以用來取消一個指定 ID 的微調(diào)作業(yè)。在這里,作業(yè) ID 是 `"ft-abc123"`。

(4)列出微調(diào)作業(yè)的事件(注釋掉了):`#openai.FineTuningJob.list_events(id="ft-abc123", limit=10)`**:用于列出一個特定微調(diào)作業(yè)的最多 10 個事件。這些事件可能包括作業(yè)開始、進度更新或作業(yè)完成等。

(5)刪除微調(diào)模型(注釋掉了):`#openai.Model.delete("ft-abc123")`**:用于刪除一個已經(jīng)微調(diào)過的模型。注意,只有模型所屬組織的所有者才能刪除它。

運行上面代碼就可以看到詳細的調(diào)優(yōu)過程了,如下:

{
  "object": "fine_tuning.job",
  "id": "ftjob-OJAXmjzlYT0TKbrHA9p2TWro",
  "model": "gpt-3.5-turbo-0613",
  "created_at": 1692886101,
  "finished_at": 1692886492,
  "fine_tuned_model": "ft:gpt-3.5-turbo-0613:personal::7r5OjUmx",
  "organization_id": "org-4P7htKo6DejPTQxfu3rExc7D",
  "result_files": [
    "file-9mLgEz2wKpHGoKtkZ0I3O8Yk"
  ],
  "status": "succeeded",
  "validation_file": null,
  "training_file": "file-F8Gh75F2A5R0gWlq5KADZdZG",
  "hyperparameters": {
    "n_epochs": 10
  },
  "trained_tokens": 6810
}

雖然返回的信息很多,但是還是要耐心對其進行分析。把幾個重點字段列出如下:

"object": "fine_tuning.job"`**: 指定這個 JSON 對象代表一個微調(diào)作業(yè)。

`"id": "ftjob-OJAXmjzlYT0TKbrHA9p2TWro"`**: 微調(diào)作業(yè)的唯一標識符。

`"model": "gpt-3.5-turbo-0613"`**: 表示用于微調(diào)的基礎模型。

`"created_at": 1692886101"`**: 作業(yè)創(chuàng)建時間的 Unix 時間戳。

`"finished_at": 1692886492"`**: 作業(yè)完成時間的 Unix 時間戳。

`"fine_tuned_model": "ft:gpt-3.5-turbo-0613:personal::7r5OjUmx"`**: 微調(diào)后生成的模型的唯一標識符。

`"result_files": ["file-9mLgEz2wKpHGoKtkZ0I3O8Yk"]`**: 包含微調(diào)結果的文件的 ID。

`"status": "succeeded"`**: 微調(diào)作業(yè)的狀態(tài),這里是“成功”。

`"training_file": "file-F8Gh75F2A5R0gWlq5KADZdZG"`**: 用于訓練的文件 ID。

`"hyperparameters": {"n_epochs": 10}`**: 微調(diào)作業(yè)使用的超參數(shù),這里只設置了訓練周期(`n_epochs`)為 10。

`"trained_tokens": 6810"`**: 在微調(diào)過程中訓練的令牌(tokens)數(shù)量。

9、測試微調(diào)之后的模型

執(zhí)行如下代碼,讓我們問問微調(diào)之后的GPT-3.5 Turbo天氣的問題。

fine_tuned_model_id = response["fine_tuned_model"]
completion = openai.ChatCompletion.create(
  model=fine_tuned_model_id,  # 請確保使用您微調(diào)后的模型ID
  temperature=0.7, 
  max_tokens=500,
  messages=[
    {"role": "system", "content": "你是一個會講笑話的天氣助理。"},
    {"role": "user", "content": "今年武漢的冬天冷不冷?"}
  ]
)

print(completion.choices[0].message['content'])

fine_tuned_model_id = response["fine_tuned_model"]: 從之前獲取的微調(diào)作業(yè)響應(response)中提取出微調(diào)后的模型 ID,并存儲在 fine_tuned_model_id 變量中。

completion = openai.ChatCompletion.create(...): 調(diào)用 OpenAI 的 ChatCompletion.create 方法來生成聊天回應。

model=fine_tuned_model_id: 指定使用微調(diào)后的模型 ID。這確保了生成的回應基于你的微調(diào)模型。

微調(diào)之后的GPT-3.5 Turbo說出的冷笑話,不知道是不是夠冷?

10、總結

GPT-3.5 Turbo 的微調(diào)功能為開發(fā)者和企業(yè)提供了一種有效的方式,以定制大語言模型以適應特定的應用需求。通過微調(diào),模型在執(zhí)行任務時不僅更可操控、輸出更可靠,而且可以更準確地反映企業(yè)的品牌語氣。此外,微調(diào)還有助于減少API調(diào)用的時間和成本。

本文深入解析了這一全新功能,涵蓋了從安全性和成本到準備和驗證數(shù)據(jù)集的全方位內(nèi)容。文章還通過代碼示例詳細演示了如何進行模型微調(diào),從上傳數(shù)據(jù)集到測試微調(diào)結果,提供了一條明確的操作路徑。總的來說,微調(diào)作為一個強大的工具,極大地擴展了GPT-3.5 Turbo 在各種應用場景中的可能性。

作者介紹:崔皓,51CTO社區(qū)編輯,資深架構師,擁有18年的軟件開發(fā)和架構經(jīng)驗,10年分布式架構經(jīng)驗。

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2023-02-16 13:48:56

模型論文

2023-03-14 13:45:14

模型AI

2024-01-05 13:13:40

2023-07-28 16:35:26

代碼模型

2023-10-16 13:28:00

數(shù)據(jù)AI

2023-08-29 07:05:00

OpenAIGPT-3.5

2024-03-01 13:49:00

數(shù)據(jù)訓練

2023-08-23 13:27:00

SQLCoder開源開發(fā)

2021-03-05 13:08:56

MySQL數(shù)據(jù)庫命令

2023-01-04 12:49:28

GPT-3.5

2022-12-04 12:37:28

AILinux虛擬機

2025-10-09 10:47:38

2023-06-08 11:27:10

模型AI

2023-07-18 12:58:06

2024-02-06 12:50:08

AI訓練

2023-03-17 21:59:37

2023-03-03 08:06:37

2023-12-12 13:16:00

模型訓練

2023-03-02 22:46:48

2023-02-08 09:09:24

微軟ChatGPT
點贊
收藏

51CTO技術棧公眾號

色先锋资源久久综合5566| 精品久久久久久| 99久久自偷自偷国产精品不卡| 免费在线视频一区二区| 无码日韩精品一区二区免费| 色综合天天综合色综合av| 天天人人精品| 东京干手机福利视频| 日韩激情视频在线观看| 久久激情五月丁香伊人| 国模无码视频一区| 日日av拍夜夜添久久免费| 中文字幕视频一区二区三区久| 99re资源| 在线黄色av网站| 99综合视频| 久久在线精品视频| b站大片免费直播| caoporn成人| 欧美日韩亚州综合| 成人免费在线小视频| 动漫一区在线| 久久久久久电影| 高清日韩一区| 国产男女猛烈无遮挡| 丝袜诱惑亚洲看片| 性色av一区二区咪爱| 中文字幕无码日韩专区免费| 亚州国产精品| 欧美mv日韩mv亚洲| 中文字幕国产高清| 国产69精品久久久久按摩| 粉嫩av一区二区三区免费野| 亚洲中文字幕无码一区二区三区| 91精彩视频在线播放| 久久久久国产免费免费| 国产欧美日韩亚洲| 亚洲成人黄色片| 国产一区二区三区在线观看免费| 国产精品高清在线观看| 一级成人黄色片| 日韩视频免费| 久久久久一本一区二区青青蜜月| 朝桐光av在线| 国产精品精品| 久久精品电影网站| 国产精品18在线| 成人羞羞网站| 色噜噜国产精品视频一区二区| 不卡一区二区在线观看| 日韩高清成人在线| 日韩精品免费在线| 日韩精品一区二区三区高清免费| 中文字幕一区二区三区中文字幕| 欧美一区二区三区啪啪| 韩国三级丰满少妇高潮| 免费精品一区| 欧美va亚洲va| 好男人香蕉影院| 六月丁香久久丫| 日韩av在线免费观看一区| 国产熟女高潮一区二区三区| 菁菁伊人国产精品| 亚洲精品美女视频| 泷泽萝拉在线播放| 成人在线国产| 久久国内精品一国内精品| 破处女黄色一级片| 国产精品va| 97精品伊人久久久大香线蕉 | 亚洲精品动态| 亚洲图片制服诱惑| a一级免费视频| 中文无码久久精品| 久久露脸国产精品| 国内自拍视频在线播放| 日本一区中文字幕| 91日韩在线视频| 六月婷婷综合网| 久久综合九色综合久久久精品综合| 六月婷婷久久| 欧美日韩在线看片| 亚洲国产日产av| 国产又大又硬又粗| 亚洲人体在线| 亚洲电影av在线| 91精品国自产在线| 亚洲男女av一区二区| 久久久在线观看| 亚洲av无码不卡| 国产福利一区在线| 欧美日韩三区四区| 二区三区在线观看| 色综合网站在线| 亚欧美一区二区三区| 日日狠狠久久偷偷综合色| 亚洲香蕉av在线一区二区三区| 三级黄色在线观看| 国产深夜精品| 亚洲一区二区三| 飘雪影视在线观看免费观看 | 日韩精品久久一区二区| 中文在线8资源库| 欧美一区二区视频免费观看| 给我看免费高清在线观看| 国产精品99视频| 国产69久久精品成人| 97人妻精品一区二区三区动漫| 成人av网站免费| 黄频视频在线观看| 欧美男女交配| 精品av综合导航| 中文字幕乱码av| 免费在线成人| 国产欧美综合精品一区二区| 黄在线免费观看| 色婷婷综合激情| 日本五十肥熟交尾| 欧美啪啪一区| 成人免费大片黄在线播放| 亚洲色大成网站www| 亚洲激情五月婷婷| 日韩av.com| 国产亚洲一区二区三区不卡| 国模精品视频一区二区三区| 国产模特av私拍大尺度 | 久草免费在线视频观看| 久久国产欧美日韩精品| 欧美日韩最好看的视频| 欧美xxxhd| 精品国产91洋老外米糕| 国产精品久久久久久久精| 男人的天堂久久精品| 欧美精品与人动性物交免费看| 182在线播放| 欧美成人性福生活免费看| 疯狂试爱三2浴室激情视频| 青草av.久久免费一区| 蜜桃免费一区二区三区| 桃色av一区二区| 亚洲国产成人91精品| 国产在线视频你懂的| 国产真实精品久久二三区| 一区二区冒白浆视频| 成人精品国产| 色爱精品视频一区| 一级黄在线观看| 一色桃子久久精品亚洲| 久久人人爽av| 91精品啪在线观看国产81旧版| 国产在线拍偷自揄拍精品| 在线中文资源天堂| 欧美精品1区2区| 污污的视频在线免费观看| 精品一区二区在线观看| 色中文字幕在线观看| av在线亚洲一区| 欧美精品一本久久男人的天堂| 国产成人精品一区二区无码呦| 亚洲精品国产a| 色哟哟视频在线| 一本久久知道综合久久| 免费日韩av电影| 91另类视频| 久久精品国产2020观看福利| 国产免费av电影| 亚洲r级在线视频| 中文人妻一区二区三区| 日本伊人午夜精品| 激情五月五月婷婷| 精品视频在线你懂得| 日本亚洲欧洲色α| 第一页在线观看| 日韩午夜激情av| 日本三级欧美三级| 欧美极品aⅴ影院| 在线成人免费av| 亚洲美女视频在线免费观看 | 午夜欧美理论片| 国产视频在线观看一区| 欧美日韩成人影院| 欧美另类老女人| 日本成人一区| 欧美顶级少妇做爰| 自拍偷拍欧美亚洲| 国产精品成人免费在线| 日韩精品人妻中文字幕有码| 日韩电影在线免费| www.激情网| 狠狠做六月爱婷婷综合aⅴ| 成人性生交大片免费看小说| 678在线观看视频| 色诱女教师一区二区三区| 亚洲av无码乱码国产麻豆| 色综合中文字幕国产| 男人操女人的视频网站| 久久一区二区视频| 91丨porny丨九色| 久久一区中文字幕| 青草视频在线观看视频| 欧美限制电影| 精品免费视频123区| 成人污污www网站免费丝瓜| 91av国产在线| 色婷婷在线播放| 中国china体内裑精亚洲片| 人妻91麻豆一区二区三区| 欧美视频一区二区在线观看| www.国产成人| 亚洲精品视频在线观看网站| 久久久久久久毛片| 不卡的av网站| 亚洲色图欧美自拍| 日本不卡一二三区黄网| 国产精品久久中文字幕| 亚洲国产成人精品女人| 日韩区国产区| 无码日韩精品一区二区免费| 国产精品免费区二区三区观看| 精品裸体bbb| 欧美最近摘花xxxx摘花| 国产探花在线观看| 欧美日本啪啪无遮挡网站| 日韩理伦片在线| 一区二区三区视频免费在线观看| 天天操天天干天天舔| 日韩三级高清在线| 国产日韩欧美中文字幕| 精品视频1区2区3区| 亚洲欧美一区二区三区在线观看| 午夜伦欧美伦电影理论片| 91麻豆免费视频网站| 国产精品国产三级国产有无不卡 | 日本精品视频在线播放| 高潮在线视频| 国产做受高潮69| www欧美xxxx| 欧美劲爆第一页| 国内在线免费视频| 欧美大片在线看免费观看| av免费看在线| 欧美成人精品xxx| 在线网址91| 欧美另类高清videos| 污网站在线免费看| 欧美国产日韩免费| av资源一区| 97精品国产97久久久久久春色 | 国产精品国产福利国产秒拍| 欧美大胆性生话| 国产91精品最新在线播放| 午夜无码国产理论在线| 国产精品美女免费| 黄色精品视频网站| 91日本在线视频| 中文字幕一区二区三区日韩精品| 国产麻豆一区二区三区在线观看| 久久99国产精品久久99大师| 精品国产_亚洲人成在线| 在线一级成人| 亚州欧美一区三区三区在线| 欧美疯狂party性派对| 久久av秘一区二区三区| 欧美在线网址| 少妇无码av无码专区在线观看| 男人的天堂亚洲| 久久久久国产一区| 国产尤物一区二区| 在线黄色免费网站| 中文字幕久久午夜不卡| 国产精品 欧美激情| 亚洲黄色录像片| 亚洲男人的天堂在线视频| 欧美亚洲免费在线一区| 国产视频第一页| 日韩成人激情视频| av影片免费在线观看| 欧美xxxx做受欧美| 亚洲精品动漫| 91久久精品国产91性色| 群体交乱之放荡娇妻一区二区| 日韩精品伦理第一区| 午夜日韩在线| 国产精品亚洲αv天堂无码| 韩国成人福利片在线播放| 亚洲啪av永久无码精品放毛片| 国产三级精品三级| 麻豆疯狂做受xxxx高潮视频| 日本道精品一区二区三区| 国产av无码专区亚洲av| 国产视频久久久久| 成人看av片| 日本欧美在线视频| 在线一区二区三区视频| 日本在线视频不卡| 亚洲激情不卡| 艹b视频在线观看| 99国内精品久久| 国产精品视频一区二区三| 天天色图综合网| 国产三区在线播放| 国产亚洲精品va在线观看| 欧美性爽视频| 成人黄色片网站| 伊人成综合网yiren22| 青青草综合在线| 另类小说欧美激情| 香蕉视频黄色在线观看| 亚洲国产欧美日韩另类综合 | 久久精品视频国产| 欧美日韩成人在线一区| 欧美美女搞黄| 久久久影视精品| 日韩三级不卡| 一区二区三区电影| 日韩精品久久理论片| 一级特级黄色片| 亚洲国产日产av| 成人1区2区3区| 久久这里只有精品视频首页| av在线不卡精品| 欧美日韩国产综合视频在线| 激情综合久久| 女王人厕视频2ⅴk| 综合久久久久久久| 中文字幕在线观看你懂的| 亚洲欧洲日本专区| 中文字幕高清在线播放| 国产日韩欧美综合精品| 黄色成人av网站| 精品人妻无码中文字幕18禁| 亚洲男人的天堂网| 国产一区二区三区视频免费观看| 一区二区国产精品视频| 成人软件在线观看| 欧美男人的天堂| 西西裸体人体做爰大胆久久久| 免费日本黄色网址| 亚洲国产成人tv| 后进极品白嫩翘臀在线视频| 欧美丰满少妇xxxxx| 视频成人永久免费视频| 久久www视频| 丁香婷婷综合色啪| 国产无码精品视频| 日韩av在线导航| 亚洲成人不卡| 亚洲第一导航| 久久超级碰视频| 翔田千里88av中文字幕| 欧美一区二区久久久| 粗大黑人巨茎大战欧美成人| 亚洲在线视频福利| 国内自拍视频一区二区三区 | 国产色综合视频| 欧美黑人性猛交| 麻豆一区二区麻豆免费观看| 九色在线视频观看| 久久久精品天堂| 一区二区三区亚洲视频| 欧美大尺度激情区在线播放| 91亚洲无吗| 无码人妻丰满熟妇区毛片| 国产日韩欧美综合一区| 91丨porny丨在线中文 | 日本高清不卡一区二区三区视频 | 永久免费av在线| 95av在线视频| 99香蕉国产精品偷在线观看| 色噜噜日韩精品欧美一区二区| 色婷婷激情综合| 里番在线观看网站| 国产精品裸体一区二区三区| 美女诱惑一区| 国产av 一区二区三区| 亚洲第一男人av| jizz欧美| 狠狠噜天天噜日日噜| 2021中文字幕一区亚洲| 一本色道久久综合精品婷婷| 欧美激情一区二区久久久| 亚洲精华一区二区三区| 国产性生活一级片| 欧美色视频日本版| 久操视频在线观看| 久中文字幕一区| 国模无码大尺度一区二区三区| 日韩三级小视频| 俺去啦;欧美日韩| 欧美黑白配在线| √天堂资源在线| 色综合网站在线| 亚洲卡一卡二| 亚洲精品永久www嫩草| gogogo免费视频观看亚洲一| 伊人网视频在线| 91精品国产九九九久久久亚洲| 999成人网| 国产男男chinese网站| 欧美不卡激情三级在线观看|