成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

指南來了!微調GPT3.5,定制大模型!

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

作者 | 崔皓

審校 | 重樓

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

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

本文就帶領諸位見證微調大模型的魅力,了解GPT-3.5 Turbo,并實現一個關于天氣的調優模型。

1、GPT-3.5 Turbo微調功能好在哪里

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

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

其次,微調還可以改善模型的輸出格式。開發者可以將用戶的輸入轉換為高質量的JSON片段,從而完成與其他系統的集成。

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

2、微調的成本和定價

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

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

成本方面,微調分為訓練和使用兩個環節。訓練成本按令牌數量計算,每1000個令牌的價格為$0.008。使用成本也按令牌計算,輸入和輸出分別是每1000個令牌$0.012和$0.016。

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

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

3、為什么微調GPT3.5更劃算

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

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

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

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

4、何時進行微調

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

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

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

廢話不多說,我們開始微調GPT-3.5 Trubo模型。

5、準備數據集

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

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

下面是官方提供的樣例:

{"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對象是用于微調GPT模型的訓練數據示例。每個JSON對象代表一個對話實例,由三個部分組成:

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

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

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

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

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

content:包含消息內容的字段。

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

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

在清楚上面的情況以后,我們來創建自己的數據集合。我們想讓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、檢查數據格式

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

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

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

# 指定數據路徑
data_path = "<YOUR_JSON_FILE_HERE>"

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

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

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

# 遍歷數據集,檢查每個示例的格式
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

        # 檢查內容是否存在且為字符串
        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")

# 定義計算消息中令牌數量的函數
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

# 定義計算助理消息中令牌數量的函數
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

# 定義打印值分布的函數
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)}")

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

# 遍歷數據集,計算警告和令牌計數
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))

# 打印缺少的系統和用戶消息數量,以及消息、對話和助理消息的長度分布
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")

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

# 計算時期數量
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)

# 計算數據集中的計費令牌數量
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")

開始調優
數據集建立好了, 并且也對它進行了檢查。接下來就開始調優了。 
上傳數據集
將數據集保存到 "gpt-3.5-turbo-ft-file.jsonl"文件中。執行如下代碼:
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(...): 這個函數用于在 OpenAI 服務器上創建一個新的文件。可以對上傳文件做后續處理或操作(在這種情況下,是為了微調模型)。

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

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

執行上述代碼之后得到如下結果:

<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)。在后續的調優中用到它,也就是針對這個上傳文件進行調優。

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

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

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

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

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

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

7、進行調優

好了,文件上傳之后接著執行調優的代碼如下:

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

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

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

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

8、查看調優進度

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

# 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)查看微調作業列表:`openai.FineTuningJob.list(limit=10)`**: 這一行列出了最近的 10 個微調作業。`limit=10` 表示最多列出 10 個作業。這對于跟蹤多個微調任務或查看歷史作業非常有用。

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

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

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

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

運行上面代碼就可以看到詳細的調優過程了,如下:

{
  "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 對象代表一個微調作業。

`"id": "ftjob-OJAXmjzlYT0TKbrHA9p2TWro"`**: 微調作業的唯一標識符。

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

`"created_at": 1692886101"`**: 作業創建時間的 Unix 時間戳。

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

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

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

`"status": "succeeded"`**: 微調作業的狀態,這里是“成功”。

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

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

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

9、測試微調之后的模型

執行如下代碼,讓我們問問微調之后的GPT-3.5 Turbo天氣的問題。

fine_tuned_model_id = response["fine_tuned_model"]
completion = openai.ChatCompletion.create(
  model=fine_tuned_model_id,  # 請確保使用您微調后的模型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"]: 從之前獲取的微調作業響應(response)中提取出微調后的模型 ID,并存儲在 fine_tuned_model_id 變量中。

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

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

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

10、總結

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

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

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

責任編輯:武曉燕 來源: 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

數據AI

2023-08-29 07:05:00

OpenAIGPT-3.5

2024-03-01 13:49:00

數據訓練

2023-08-23 13:27:00

SQLCoder開源開發

2021-03-05 13:08:56

MySQL數據庫命令

2023-01-04 12:49:28

GPT-3.5

2022-12-04 12:37:28

AILinux虛擬機

2023-06-08 11:27:10

模型AI

2023-03-17 21:59:37

2023-07-18 12:58:06

2023-12-12 13:16:00

模型訓練

2023-03-03 08:06:37

2023-03-02 22:46:48

2023-02-08 09:09:24

微軟ChatGPT

2024-02-06 12:50:08

AI訓練

2024-02-05 09:00:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 性视频一区| 免费在线观看av网址 | 国产乱码精品一区二区三区五月婷 | 在线视频日韩精品 | 亚洲第一在线 | 免费观看日韩精品 | 99在线视频观看 | 国产真实乱对白精彩久久小说 | 国产精品美女久久久久aⅴ国产馆 | 成人片网址 | 色综合久 | 亚洲精品国产精品国自产在线 | 久久看片| 日韩一级 | 日韩午夜在线观看 | 一区二区三区视频 | 国产福利观看 | 国产一二区免费视频 | 巨大黑人极品videos精品 | 国产7777| 黄色男女网站 | 亚洲成人综合社区 | 久久免费精品视频 | 综合色久 | 91国内精品久久 | 欧美一区成人 | 久久免费精品视频 | 特黄小视频 | 免费成人高清在线视频 | 日日骚视频 | 亚洲欧美精品国产一级在线 | 亚洲国产精品第一区二区 | 九九久久久 | 国产精品一区二区视频 | 伊人欧美视频 | 国产精品美女久久久久久免费 | 高清国产午夜精品久久久久久 | 九九久久精品 | 日韩人体视频 | 久久久久久免费精品一区二区三区 | 亚洲精品一区中文字幕乱码 |