在您的數據上免費使用 GPT3
這是GPT3根據Reddit的一些笑話微調後生成的笑話之一。如需更多 AI 生成的笑話,請滾動至文章末尾,我會在其中寫一些我最喜歡的由 GPT3 生成的笑話。
GPT3 是新的最先進的語言模型。
當它在 2020 年發佈時,它被大肆宣傳。 它確實辜負了它的炒作。
Beta 版僅供極少數人和組織使用。 後來,幾乎每個人都可以使用遊樂場。
但是,即使那樣也無法進行微調。
即使模型權重尚未開源,我們現在至少可以根據我們的數據集對其進行微調。
當您創建一個帳戶以訪問 GPT3 時,OpenAI 會提供價值 18 美元的免費積分。
我們將使用此功能微調curie, babbage and ada這三個模型中的任何一個。
最大的模型達芬奇仍然無法進行微調。 其他一些限制包括每個月最多可以微調 10 個模型,每個數據集的大小最多可達 250 萬個tokens或 80–100MB。
要開始微調,我們首先需要在 OpenAI 中創建一個帳戶。
您可以使用此
鏈接執行此操作。 創建帳戶後,下一步就是獲取 API 密鑰。 這對每個用戶都是唯一的。 現在我們將打開我們的 Jupyter Notebook。
有許多方法可以微調 GPT3:(i) 使用 OpenAI CLI,(ii) 使用 OpenAI package,以及 (iii) 使用requests。
我將使用 OpenAI package,因為它最簡單。
使用 OPENAI 包進行微調
微調涉及的主要步驟是:
準備微調數據集。
微調模型。
使用微調模型進行推論。
!pip install openai
接下來,讓我們開始進行所需的導入。
import openaiimport pandas as pdimport stringopenai.api_key = 'YOUR API KEY'
現在讓我們閱讀數據集。 我使用了一個隨機數據集,它從 Reddit 上抓取了一些笑話。 您可以使用任何您喜歡的數據集。
df = pd.read_csv('jokes.csv')df.head()
理想情況下,用於微調 GPT3 的數據集應該是一個如下所示的 jsonl 文件。
{"prompt": "<text>", "completion": "<text to be generated>"}
{"prompt": "<text>", "completion": "<text to be generated>"}
{"prompt": "<text>", "completion": "<text to be generated>"}
對於text completion,我們將為其提供一些prompt text,但是對於text generation,我們將prompt blank。
我已經嘗試了兩種方法,我意識到與completion相比,提供一些prompt可以提供更好的結果。
- 準備微調數據集
但是,OpenAI 具有將 CSV、TSV、XLSX 和 JSON 轉換為 JSONL 文件的功能。 我已經預處理了數據集。 現在讓我們將其轉換為 jsonl 格式。
!yes | openai tools fine_tunes.prepare_data -f 'joke.csv'
yes 表示微調中的所有選項都應設置為 true。 準備好 jsonl 文件後,我們的下一步涉及從該文件創建文件 ID。 我們將使用此命令來執行此操作。
#write your file name instead of jokes_prepared.jsonl
with open("joke_prepared.jsonl") as f:
response = openai.File.create(file=f, purpose='fine-tune')
print(response)
2. 微調模型
現在我們的數據是所需的格式並且文件 ID 已經創建,下一個任務是創建一個微調模型。 這可以使用以下方法完成:
response = openai.FineTune.create(training_file="YOUR FILE ID", model='ada')
如果您想要更好的結果,請將模型更改為babbage or curie。 默認情況下,它運行 4 個 epoch 來微調模型。 微調將花費一些時間,具體取決於數據集的大小和您將使用的模型。 您可以使用以下命令繼續檢查微調過程。
response = openai.FineTune.retrieve(id="YOUR FINE-TUNE ID")
創建微調文件會創建一個id。 使用它來檢索微調的狀態。 微調結束後,您將在響應中看到狀態從處理中更改為已處理。
3. 使用微調模型進行推理
現在我們的模型已經過微調,我們可以使用它進行推理。 響應消息將包含微調模型的 ID。 我們將使用該 ID 來調用我們的模型。
# ft_model should have your model id
ft_model = "ada:ft-personal-2022-07-22-11-25-19"
res = openai.Completion.create(model=ft_model, prompt="I hate ... ", max_tokens=18, temperature=1)
您可以將 max_tokens 更改為您想要的生成文本的大小。 您還可以試驗溫度參數。 它取值從 0 到 2。
此處提供了微調的完整代碼。
現在,讓我向您展示一些由 GPT3 生成的其他笑話,它們可能不在我最喜歡的笑話列表中,但值得一看:
1.I hate … iphones !!!!!! Why do they have to have so many tones? (Wow super strong on punctuations)
2. What do you call 4 in the afternoon? Grease afternoon!
3. Knock Knock … -> Who’s there? cow ooooooooooo “Cow who? Cow, who loves you” -> “Cow has lost its voice” ooooooooooooo
4. How do you feed a friend with no mouth? you feed them a fork. (Flawed sense of logic by GPT3)
5. Why are ants not allowed at the party? Because they all have stings.
雖然大部分沒有意義,不過這篇文章展示了最先進的語言模型以及如何對其
進行客製化dataset的微調以符合特定需求,例如醫療相關的QA機器人法律相關的QA機器人,只要收集一些example提供給Model進行微調即可.