Preference fine-tuning (PFT) is een techniek die al lange tijd wordt gebruikt om LLM’s te fine-tunen. OpenAI introduceerde het recent als onderdeel van hun 12 dagen met feature-uitrol.
Samen met supervised fine-tuning (SFT) en reinforcement fine-tuning (RFT) is PFT een andere manier om grote taalmodellen af te stemmen op gebruikersvoorkeuren.
In dit artikel leg ik kort uit wat preference fine-tuning is en laat ik je zien hoe je het met minimale moeite gebruikt in OpenAI’s ontwikkelaarsdashboard.
Wat is OpenAI's Preference Fine-Tuning?
Terwijl het doel van standaard supervised fine-tuning is dat het model bepaalde outputs geeft bij bepaalde inputs, draait het bij preference fine-tuning (PFT) om het model te sturen richting de reacties die we willen, en weg van de reacties die we niet willen.
Direct preference optimization (DPO) is de standaardtechniek binnen PFT en heeft aan populariteit gewonnen als sterke alignment-methode door zijn eenvoud en effectiviteit.
In tegenstelling totreinforcement learning from human feedback (RLHF) vereist DPO geen complex beloningsmodel om het large language model (LLM) uit te lijnen, maar behandelt het het alignment-probleem als een “directe” optimalisatie van een verliesfunctie. Dit maakt DPO eenvoudiger te implementeren en rekenkundig efficiënter.
De dataset die nodig is voor DPO bevat, net als bij andere alignment-methoden, per prompt een paar “geprefereerde” en “niet-geprefereerde” reacties. In het geval van OpenAI’s PFT moet de dataset, net als bij andere fine-tuningmethoden, in JSONL-formaat staan en de volgende structuur hebben:
{"input":{"messages":[{"role":"user","content":"Hello, can you tell me how cold San Francisco is today?"}],"tools":[],"parallel_tool_calls":true},"preferred_output":[{"role":"assistant","content":"Today in San Francisco, it is not quite cold as expected. Morning clouds will give away to sunshine, with a high near 68°F (20°C) and a low around 57°F (14°C)."}],"non_preferred_output":[{"role":"assistant","content":"It is not particularly cold in San Francisco today."}]}Mogelijk gemaakt door
De officiële OpenAIdocumentatie voor PFT raadt aan om SFT en PFT te combineren voor betere alignment. Alignment-technieken zoals PFT worden vaak gebruikt nadat het model is gefinetuned op een supervised dataset. Het combineren van SFT met PFT geldt als industriestandaard en wordt ook door OpenAI bepleit.
Hoe formatteer je de dataset voor preference fine-tuning
Voor we beginnen, moeten we zorgen dat onze dataset het vereiste formaat heeft voor OpenAI’s preference fine-tuning.
Er zijn meerdere manieren om een voorkeurendataset te maken. Eén methode is om paren van LLM-outputs op te halen bij verschillende temperatures, top_k of system prompts en vervolgens een ander LLM, bij voorkeur een capabeler model, te gebruiken om één output als “geprefereerd” en de andere als “niet-geprefereerd” te kiezen.
Voor de demo in deze tutorial download ik een voorkeurendataset van Hugging Face en herstructureer ik die. Ik gebruikargilla/ultrafeedback-binarized-preferences, wat een voorkeurendataset is, maar ik neem alleen de eerste 50 rijen.
Een voorbeeld van een voorkeurendataset van Hugging Face.
Een Python-script is voldoende om de structuur van de dataset om te zetten naar de fine-tuningvereisten van OpenAI, maar je kunt ook een andere aanpak kiezen die past bij jouw toepassing.
import datasets
import copy
import json
instance_structure ={"input":{"messages":[{"role":"user","content":""}],"tools":[],"parallel_tool_calls":True},"preferred_output":[{"role":"assistant","content":""}],"non_preferred_output":[{"role":"assistant","content":""}]}
ds = datasets.load_dataset("argilla/ultrafeedback-binarized-preferences", trust_remote_code=True, split="train")
ds_sample = ds.select(range(50))#select the first 50 rows
ds_list =[]for sample in ds_sample:
instance = copy.deepcopy(instance_structure)
instance["input"]["messages"][0]["content"]= sample["instruction"]
instance["preferred_output"][0]["content"]= sample["chosen_response"]
instance["non_preferred_output"][0]["content"]= sample["rejected_response"]
ds_list.append(instance)withopen("preference_dataset.jsonl",'w')as out:for json_line in ds_list:
jout = json.dumps(json_line)+'\\n'
out.write(jout)Mogelijk gemaakt door
Zorg dat het formaat van je dataset jsonl is en niet json. Waarschijnlijk heb je een lege regel aan het einde van je bestand; verwijder die.
Hoe voer je OpenAI's preference fine-tuning uit
Met je dataset klaar kun je deze stappen volgen om preference fine-tuning te draaien:
Ga naar het dashboard van OpenAI.
Zoek de fine-tuningsectie en kies Create om een nieuwe fine-tuningjob te starten.
Kies direct preference optimization als je fine-tuningmethode.
Upload je trainings- en validatiedata (als je die hebt).
OpenAI laat je hyperparameters opgeven, maar je kunt ze ook leeg laten, waarna het systeem automatisch beslist. Afhankelijk van de grootte van je dataset kan het trainen even duren.
Conclusie
Direct preference optimization is een handige nieuwe feature in OpenAI’s fine-tuninggereedschapskist waarmee je expliciet de toon en stijl van de reactie van je model kunt sturen en beter kunt afstemmen op gebruikersvoorkeuren.
Net als bij OpenAI’s distillation, reinforcement fine-tuning en supervised fine-tuning, zit jouw belangrijkste bijdrage bij preference fine-tuning in het voorbereiden van de dataset volgens OpenAI’s formaat en structuur; hun tools doen de rest:
Masterstudent Kunstmatige Intelligentie en AI-technisch schrijver. Ik deel inzichten over de nieuwste AI-technologie, maak ML-onderzoek toegankelijk en vereenvoudig complexe AI-onderwerpen die nodig zijn om jou voorop te houden.
Preference fine-tuning (PFT) is een techniek die al lange tijd wordt gebruikt om LLM’s te fine-tunen. OpenAI introduceerde het recent als onderdeel van hun 12 dagen met feature-uitrol.
Samen met supervised fine-tuning (SFT) en reinforcement fine-tuning (RFT) is PFT een andere manier om grote taalmodellen af te stemmen op gebruikersvoorkeuren.
In dit artikel leg ik kort uit wat preference fine-tuning is en laat ik je zien hoe je het met minimale moeite gebruikt in OpenAI’s ontwikkelaarsdashboard.
Wat is OpenAI's Preference Fine-Tuning?
Terwijl het doel van standaard supervised fine-tuning is dat het model bepaalde outputs geeft bij bepaalde inputs, draait het bij preference fine-tuning (PFT) om het model te sturen richting de reacties die we willen, en weg van de reacties die we niet willen.
Direct preference optimization (DPO) is de standaardtechniek binnen PFT en heeft aan populariteit gewonnen als sterke alignment-methode door zijn eenvoud en effectiviteit.
In tegenstelling tot reinforcement learning from human feedback (RLHF) vereist DPO geen complex beloningsmodel om het large language model (LLM) uit te lijnen, maar behandelt het het alignment-probleem als een “directe” optimalisatie van een verliesfunctie. Dit maakt DPO eenvoudiger te implementeren en rekenkundig efficiënter.
De dataset die nodig is voor DPO bevat, net als bij andere alignment-methoden, per prompt een paar “geprefereerde” en “niet-geprefereerde” reacties. In het geval van OpenAI’s PFT moet de dataset, net als bij andere fine-tuningmethoden, in JSONL -formaat staan en de volgende structuur hebben:
De officiële OpenAI documentatie voor PFT raadt aan om SFT en PFT te combineren voor betere alignment. Alignment-technieken zoals PFT worden vaak gebruikt nadat het model is gefinetuned op een supervised dataset. Het combineren van SFT met PFT geldt als industriestandaard en wordt ook door OpenAI bepleit.
Hoe formatteer je de dataset voor preference fine-tuning
Voor we beginnen, moeten we zorgen dat onze dataset het vereiste formaat heeft voor OpenAI’s preference fine-tuning.
Er zijn meerdere manieren om een voorkeurendataset te maken. Eén methode is om paren van LLM-outputs op te halen bij verschillende temperatures, top_k of system prompts en vervolgens een ander LLM, bij voorkeur een capabeler model, te gebruiken om één output als “geprefereerd” en de andere als “niet-geprefereerd” te kiezen.
Voor de demo in deze tutorial download ik een voorkeurendataset van Hugging Face en herstructureer ik die. Ik gebruik argilla/ultrafeedback-binarized-preferences, wat een voorkeurendataset is, maar ik neem alleen de eerste 50 rijen.
Een voorbeeld van een voorkeurendataset van Hugging Face.
Een Python-script is voldoende om de structuur van de dataset om te zetten naar de fine-tuningvereisten van OpenAI, maar je kunt ook een andere aanpak kiezen die past bij jouw toepassing.
Zorg dat het formaat van je dataset
jsonlis en nietjson. Waarschijnlijk heb je een lege regel aan het einde van je bestand; verwijder die.Hoe voer je OpenAI's preference fine-tuning uit
Met je dataset klaar kun je deze stappen volgen om preference fine-tuning te draaien:
OpenAI laat je hyperparameters opgeven, maar je kunt ze ook leeg laten, waarna het systeem automatisch beslist. Afhankelijk van de grootte van je dataset kan het trainen even duren.
Conclusie
Direct preference optimization is een handige nieuwe feature in OpenAI’s fine-tuninggereedschapskist waarmee je expliciet de toon en stijl van de reactie van je model kunt sturen en beter kunt afstemmen op gebruikersvoorkeuren.
Net als bij OpenAI’s distillation, reinforcement fine-tuning en supervised fine-tuning, zit jouw belangrijkste bijdrage bij preference fine-tuning in het voorbereiden van de dataset volgens OpenAI’s formaat en structuur; hun tools doen de rest:
Wil je meer leren, dan raad ik deze bronnen aan: