日韩欧美看国产,欧美精品一二三四,懂色av一区二区三区在线播放,久久噜噜亚洲综合

如何微調(diào) GPT 以提高對話性能?GPT大模型微調(diào)指南全步驟詳解
發(fā)布時(shí)間: 2024-08-20 10:13

多年來,人工智能以各種形式盛行——從Alexa等虛擬助手到客戶服務(wù)聊天機(jī)器人——但隨著ChatGPT的推出,人工智能迎來了關(guān)鍵時(shí)刻。這款人工智能應(yīng)用程序不僅吸引了數(shù)百萬人的想象力,還成為我們今天正在經(jīng)歷的人工智能革命的催化劑。最近的估計(jì)顯示,ChatGPT 的用戶群超過 1.8 億,它不僅是最受歡迎的人工智能應(yīng)用程序,而且是全球使用最廣泛的應(yīng)用程序之一。它還獲得了歷史上增長最快的消費(fèi)者應(yīng)用程序的稱號。


盡管 ChatGPT 具有非凡的功能,或者更具體地說是 GPT(為其提供支持的生成式預(yù)訓(xùn)練 Transformer 模型)仍具有某些局限性,尤其是在商業(yè)環(huán)境中應(yīng)用時(shí)。


了解 GPT 在商業(yè)應(yīng)用中的局限性


GPT 的第一個(gè)限制是缺乏專業(yè)知識。正如預(yù)期的那樣,一個(gè)在龐大但通用的數(shù)據(jù)上訓(xùn)練的模型不可能知道一切,尤其是考慮到人類知識的快速擴(kuò)展。此外,GPT 的知識是靜態(tài)的,當(dāng)訓(xùn)練結(jié)束時(shí)就會(huì)終止。例如,最新的 GPT-4-o 模型的知識庫在 2023 年 10 月結(jié)束。


另一個(gè)重大限制涉及專有或機(jī)密數(shù)據(jù)的使用。GPT 可能無法完全理解組織的獨(dú)特?cái)?shù)據(jù)格式或用戶特定請求,從而導(dǎo)致專業(yè)任務(wù)的效果不佳。此外,還有數(shù)據(jù)隱私方面的擔(dān)憂。OpenAI 利用輸入 GPT 的數(shù)據(jù)來訓(xùn)練未來的模型,這意味著使用敏感數(shù)據(jù)的組織可能會(huì)無意中共享機(jī)密信息,從而可能違反數(shù)據(jù)隱私法規(guī)。


盡管如此,生成式 AI 的變革潛力(提高生產(chǎn)力和成本效率)已促使組織尋求將 GPT 等 LLM 集成到其專業(yè)工作流程中并安全地整合專有數(shù)據(jù)的方法。這就是微調(diào)發(fā)揮作用的地方。


如何微調(diào) GPT 以提高對話性能?


微調(diào):根據(jù)您的特定需求定制 GPT


微調(diào)是采用預(yù)先訓(xùn)練好的語言模型,并在針對特定任務(wù)或知識領(lǐng)域的專用數(shù)據(jù)集上進(jìn)一步訓(xùn)練它的過程。初始預(yù)訓(xùn)練階段涉及向模型提供來自不同來源的大量非結(jié)構(gòu)化數(shù)據(jù)。相比之下,微調(diào)利用針對目標(biāo)領(lǐng)域或任務(wù)的較小、更精心策劃和標(biāo)記的數(shù)據(jù)集。


在本指南中,我們將引導(dǎo)您逐步了解針對對話數(shù)據(jù)微調(diào) GPT 的過程。這包括訪問 OpenAI 的界面、上傳適當(dāng)?shù)臄?shù)據(jù)集、選擇正確的模型、對其進(jìn)行微調(diào)、監(jiān)控進(jìn)度以及進(jìn)行必要的調(diào)整。


步驟 1:設(shè)置開發(fā)環(huán)境


首先,您需要安裝 OpenAI SDK 來設(shè)置開發(fā)環(huán)境。我們將在本指南中使用 Python SDK 作為示例,但它也可以在 Node.js 和 .NET 中使用。此外,您還需要安裝python-dotenv來管理環(huán)境變量。


pip install openai python-dotenv

# For Python 3 and above

pip3 install openai python-dotenv


接下來,導(dǎo)入 OpenAI 類并創(chuàng)建一個(gè)客戶端對象來與 OpenAI 接口交互,該接口充當(dāng)各種 API 調(diào)用的包裝器。


import os

from openai import OpenAI


client = OpenAI(

  api_key=os.environ['OPENAI_API_KEY'],

)


要訪問 OpenAI 的 API,您需要一個(gè) API 密鑰,該密鑰可通過在 OpenAI 開發(fā)者平臺上注冊獲得。API 密鑰安全地存儲在一個(gè).env文件中,可以使用os模塊訪問該文件,如上所示。


第 2 步:選擇正確的模型進(jìn)行微調(diào)


設(shè)置好環(huán)境后,下一步是選擇要微調(diào)的模型。OpenAI 目前提供了幾種微調(diào)模型:


  • davinci-002

  • babbage-002

  • GPT-4-o-mini-2024-07-18

  • GPT-3.5-turbo


在研究OpenAI 的定價(jià)時(shí),您會(huì)注意到,盡管最新模型 GPT-4-o-mini 是上下文長度最長的最新模型,但價(jià)格相對便宜,僅次于 babbage-002。成本較低的原因是 GPT-4-o-mini 是 GPT 的縮小版,參數(shù)更少,從而降低了計(jì)算需求。相比之下,GPT-3.5-turbo 和 davinci-002 是更大的模型,具有更多參數(shù)和更復(fù)雜的架構(gòu),這反映在它們更高的訓(xùn)練成本上。最終,您選擇的模型應(yīng)該符合您的特定對話需求和預(yù)算限制。


步驟 3:準(zhǔn)備微調(diào)數(shù)據(jù)集


選擇模型后,下一個(gè)關(guān)鍵步驟是準(zhǔn)備微調(diào)數(shù)據(jù)。在本指南中,我們將使用My_Custom_Conversational_DataHuggingFace 上提供的數(shù)據(jù)集,這是一個(gè)強(qiáng)大的 AI 開發(fā)資源平臺,包括數(shù)據(jù)集。


該數(shù)據(jù)集非常適合我們的微調(diào)場景,因?yàn)樗瑥V泛的對話數(shù)據(jù),并且格式化為符合 OpenAI 的聊天完成 API 所需的結(jié)構(gòu) - 提示完成對,如下所示:


{"prompt": "<prompt text>", "completion": "<ideal generated text>"}

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}


此外,該數(shù)據(jù)集已分為訓(xùn)練和評估子集,省去了我們手動(dòng)拆分的任務(wù)。這種劃分對于確保模型在微調(diào)和評估期間接觸不同的數(shù)據(jù)至關(guān)重要,這有助于防止過度擬合(即模型無法推廣到新的、未見過的數(shù)據(jù))。


要下載數(shù)據(jù)集,請使用以下命令從 HuggingFace 克隆其存儲庫:


git clone https://huggingface.co/datasets/Unified-Language-Model-Alignment/Anthropic_HH_Golden


步驟 4:上傳數(shù)據(jù)集進(jìn)行微調(diào)


準(zhǔn)備好數(shù)據(jù)集后,下一步是使用OpenAI 的文件 API上傳它們。下面是如何上傳訓(xùn)練和評估數(shù)據(jù)集的示例,創(chuàng)建將在微調(diào)過程中使用的文件對象。


training_dataset = client.files.create(

  file=open("training.jsonl", "rb"),

  purpose="fine-tune"

)


evaluation_dataset = client.files.create(

  file=open("evaluation.jsonl", "rb"),

  purpose="fine-tune"

)


上傳成功后,返回的文件對象將包含一個(gè)id唯一標(biāo)識該文件的屬性。


步驟 5:啟動(dòng)微調(diào)過程


上傳數(shù)據(jù)集后,就可以使用微調(diào) API 創(chuàng)建微調(diào)作業(yè)了。所需的主要參數(shù)是模型名稱和訓(xùn)練文件的id。如果您還上傳了評估數(shù)據(jù)集,則可以將其包含在微調(diào)作業(yè)中,如下所示:


ft_job = client.fine_tuning.jobs.create(

  model="model_name",

  training_file=training_dataset.id,

  validation_file=evaluation_dataset.id,

)


您還可以指定超參數(shù),例如 epoch 數(shù)、批處理大小和學(xué)習(xí)率乘數(shù)。但是,建議允許 OpenAI 的 API 根據(jù)您首次運(yùn)行的數(shù)據(jù)集大小自動(dòng)配置這些設(shè)置。如果您希望手動(dòng)設(shè)置這些參數(shù),您的代碼將如下所示:


ft_job = client.fine_tuning.jobs.create(

  model="model_name",

  training_file=training_dataset.id,

  validation_file=evaluation_dataset.id,

  hyperparameters={

    "n_epochs": 5,

    "batch_size": 16,

    "learning_rate_multiplier": 0.2

  }

)


一旦啟動(dòng),微調(diào)作業(yè)將返回一個(gè)包含 的作業(yè)對象id,這對于跟蹤作業(yè)的進(jìn)度至關(guān)重要。完成后,您將收到一封電子郵件通知,但所需時(shí)間將根據(jù)模型和數(shù)據(jù)集大小而有所不同。


步驟 6:監(jiān)控微調(diào)過程


在微調(diào)過程中,您可以通過列出與您的作業(yè)相關(guān)的事件來監(jiān)控狀態(tài)。OpenAI 提供了幾個(gè)訓(xùn)練指標(biāo):


  • 訓(xùn)練損失:衡量模型預(yù)測值與訓(xùn)練數(shù)據(jù)中的實(shí)際值之間的差異。損失越低,表示性能越好。

  • 訓(xùn)練 token 準(zhǔn)確率:訓(xùn)練期間預(yù)測正確的 token 的百分比。

  • 驗(yàn)證損失:評估模型在未見數(shù)據(jù)上的性能,表明其泛化能力。

  • 驗(yàn)證令牌準(zhǔn)確度:評估數(shù)據(jù)集上令牌預(yù)測的準(zhǔn)確度。


您可以使用以下代碼檢索這些指標(biāo):


client.fine_tuning.jobs.list_events(

  fine_tuning_job_id=ft_job.id,

  limit=5

)


步驟 7:訪問和使用微調(diào)模型

微調(diào)作業(yè)完成后,可能需要一些時(shí)間才能完全訪問模型。如果模型無法立即使用,則可能仍在加載中。您可以使用其作業(yè)檢索微調(diào)后的模型id:


ft_retrieve = client.fine_tuning.jobs.retrieve(ft_job.id)

print(ft_retrieve)

該fine_tuned_model屬性現(xiàn)在將包含您定制的模型的名稱,并且該status屬性應(yīng)該指示成功。


您現(xiàn)在可以通過在 GPT-3.5-turbo 和 GPT-4-o-mini 的聊天完成 API 中指定它或通過使用 babbage-002 或 davinci-002 的舊式完成 API 來使用此微調(diào)模型:


completion = client.chat.completions.create(

  model="your fine-tuned model",

  messages=[

    {"role": "system", "content": "You are a helpful assistant."},

    {"role": "user", "content": "Who won the 2024 World Series?"}

  ]

)


步驟 8:使用專有數(shù)據(jù)進(jìn)行微調(diào):確保隱私和安全


如果您使用專有或機(jī)密數(shù)據(jù)進(jìn)行微調(diào),則必須采取措施保護(hù)這些數(shù)據(jù),因?yàn)?OpenAI 可能會(huì)使用它來訓(xùn)練未來的模型。降低這種風(fēng)險(xiǎn)的一種方法是使用 OpenAI 的非訓(xùn)練端點(diǎn):


completion = client.chat.completions.create(

  model="your fine-tuned model",

  messages=[

    {"role": "system", "content": "You are a helpful assistant."},

    {"role": "user", "content": "Who won the 2024 World Series?"}

  ],

  do_not_train=True

)


另一個(gè)有效的策略是采用data on-premises開源開發(fā)人員的解決方案,從而實(shí)現(xiàn)對數(shù)據(jù)處理管道的完全控制。


增強(qiáng)你的微調(diào)模型


測試微調(diào)模型后,您可能會(huì)發(fā)現(xiàn)其性能不太符合您的期望,或者不如您所希望的那樣一致。在這種情況下,是時(shí)候完善和增強(qiáng)您的模型了。OpenAI 提供了幾種方法來幫助您改進(jìn)微調(diào)模型,重點(diǎn)關(guān)注三個(gè)關(guān)鍵領(lǐng)域:


1. 質(zhì)量:增強(qiáng)微調(diào)數(shù)據(jù)


確保格式正確:仔細(xì)檢查所有數(shù)據(jù)點(diǎn)的格式是否正確。結(jié)構(gòu)正確的數(shù)據(jù)對于模型的學(xué)習(xí)過程至關(guān)重要。

解決弱點(diǎn):如果您的模型在特定提示上遇到困難,請整合數(shù)據(jù)點(diǎn)來展示模型應(yīng)如何應(yīng)對這些場景。這種有針對性的方法可以顯著提高性能。

多樣化數(shù)據(jù)集:確保您的數(shù)據(jù)集包含各種各樣的示例,這些示例可以準(zhǔn)確反映您的模型可能遇到的各種提示和響應(yīng)。多樣化的數(shù)據(jù)集有助于模型在不同場景中更好地泛化。


2. 數(shù)量:擴(kuò)大數(shù)據(jù)集


復(fù)雜任務(wù)處理:任務(wù)越復(fù)雜,所需的數(shù)據(jù)集就越大。增加數(shù)據(jù)集大小有助于模型處理更廣泛的情況。

邊緣案例包含:通過擴(kuò)展數(shù)據(jù)集,您更有可能包含非常規(guī)數(shù)據(jù)點(diǎn)或邊緣案例。這有助于模型更有效地學(xué)習(xí)概括,增強(qiáng)其處理意外輸入的能力。

防止過度擬合:更大的數(shù)據(jù)集也可以減輕過度擬合,因?yàn)槟P陀懈嗖煌臄?shù)據(jù)可供學(xué)習(xí),確保它捕捉到真正的底層關(guān)系,而不僅僅是記住正確的響應(yīng)。


3.超參數(shù):微調(diào)訓(xùn)練過程


調(diào)整微調(diào)作業(yè)的超參數(shù)是另一個(gè)關(guān)鍵步驟。以下是如何有效地調(diào)整它們:


歷元數(shù):

  • 如果出現(xiàn)以下情況則增加:模型在訓(xùn)練和驗(yàn)證數(shù)據(jù)上的表現(xiàn)均不佳(欠擬合),或者模型的損失正在減少但尚未穩(wěn)定(收斂緩慢)。

  • 如果:模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)良好,但在評估數(shù)據(jù)上表現(xiàn)不佳(過度擬合),或者在初始改進(jìn)后損失增加(早期收斂),則減少。


學(xué)習(xí)率乘數(shù):

  • 如果模型收斂緩慢或者您正在處理特別大的數(shù)據(jù)集,則增加。

  • 如果模型的損失出現(xiàn)大幅波動(dòng)(振蕩)或出現(xiàn)過度擬合的跡象,則減少。


批次大小:

  • 如果出現(xiàn)以下情況則增加:模型微調(diào)成功,允許使用更大的批量來加快進(jìn)程,或者損失正在波動(dòng)。

  • 如果:模型收斂得不太好,則減少,因?yàn)檩^小的批次可以幫助模型更徹底地學(xué)習(xí)數(shù)據(jù),或者盡管進(jìn)行了其他調(diào)整,過度擬合仍然存在。


結(jié)論:微調(diào)之旅


微調(diào)是一個(gè)復(fù)雜但強(qiáng)大的過程,如果操作正確,可以顯著提高生成式AI應(yīng)用程序的效率。我們鼓勵(lì)您通過進(jìn)一步的實(shí)驗(yàn)來加深您的理解和技能。這可能涉及調(diào)整不同的超參數(shù)、試驗(yàn)各種數(shù)據(jù)集或嘗試 OpenAI 提供的不同模型。

粵公網(wǎng)安備 44030502006483號、 粵ICP備15047669號
  • 捷易科技聯(lián)系人
  • 主站蜘蛛池模板: 静宁县| 青神县| 洪泽县| 乌鲁木齐县| 乌恰县| 商河县| 菏泽市| 那曲县| 洛南县| 顺平县| 牟定县| 鄂伦春自治旗| 郸城县| 佛坪县| 建瓯市| 滨州市| 康定县| 衡南县| 博乐市| 鄯善县| 石嘴山市| 会泽县| 泸溪县| 舟山市| 营口市| 钦州市| 宁阳县| 嵩明县| 东乌珠穆沁旗| 朔州市| 鹤峰县| 天峨县| 彝良县| 湖北省| 田阳县| 阜城县| 成安县| 祁阳县| 祁门县| 夹江县| 山西省|