Preference Fine-Tuning dari OpenAI: Panduan dengan Contoh
Pelajari cara menyelaraskan model bahasa besar dengan preferensi pengguna menggunakan preference fine-tuning dan direct preference optimization dari OpenAI.
Preference fine-tuning (PFT) adalah teknik yang telah lama digunakan untuk menyetel LLM. OpenAI baru-baru ini memperkenalkannya sebagai bagian dari peluncuran fitur 12 hari.
Bersama dengan supervised fine-tuning (SFT) dan reinforcement fine-tuning (RFT), PFT adalah cara lain untuk menyelaraskan model bahasa besar dengan preferensi pengguna.
Dalam artikel ini, saya akan menjelaskan secara singkat preference fine-tuning dan menunjukkan cara menggunakannya dengan upaya minimal di dasbor pengembang OpenAI.
Apa Itu Preference Fine-Tuning dari OpenAI?
Sementara tujuan supervised fine-tuning standar adalah membuat model mengembalikan keluaran tertentu untuk masukan tertentu, fokus dalam preference fine-tuning (PFT) adalah mengarahkan model untuk menghasilkan respons yang kita sukai dan menjauhi respons yang tidak kita sukai.
Direct preference optimization (DPO) adalah teknik standar dalam PFT dan semakin populer sebagai teknik alignment yang kuat karena kesederhanaan dan efektivitasnya.
Berbeda denganreinforcement learning from human feedback (RLHF), DPO tidak memerlukan model reward yang kompleks untuk menyelaraskan model bahasa besar (LLM), melainkan memperlakukan masalah alignment sebagai optimisasi "langsung" dari fungsi loss. Ini membuat DPO lebih mudah diterapkan dan lebih efisien secara komputasi.
Dataset yang diperlukan untuk DPO, seperti metode alignment lainnya, mencakup sepasang respons "disukai" dan "tidak disukai" untuk sebuah prompt. Dalam kasus PFT dari OpenAI, mirip dengan metode fine-tuning lainnya, dataset harus dalam format JSONLdan memiliki struktur berikut:
{"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."}]}Didukung oleh
Dokumentasi resmi OpenAI untuk PFT merekomendasikan menggabungkan SFT dan PFT untuk alignment yang lebih baik. Teknik alignment seperti PFT umumnya digunakan setelah menyetel model pada dataset supervised. Menggabungkan SFT dengan PFT dianggap sebagai standar industri dan juga dianjurkan oleh OpenAI.
Cara Memformat Dataset untuk Preference Fine-Tuning
Sebelum apa pun, kita perlu memastikan dataset kita sesuai format yang diperlukan untuk preference fine-tuning dari OpenAI.
Ada beberapa cara untuk membuat dataset preferensi. Salah satu metode adalah mengambil pasangan keluaran LLM dengan temperature, top_k, atau system prompt yang berbeda, lalu menggunakan LLM lain, sebaiknya yang lebih mumpuni, untuk memilih satu keluaran sebagai "disukai" dan yang lain sebagai "tidak disukai."
Untuk demo dalam tutorial ini, saya akan mengunduh dataset preferensi dari Hugging Face dan menyusunnya ulang. Saya akan menggunakan argilla/ultrafeedback-binarized-preferences, yang merupakan dataset preferensi, tetapi saya hanya akan mengambil 50 baris pertama.
Contoh dataset preferensi dari Hugging Face.
Skrip Python sudah cukup untuk mengonversi struktur dataset ke persyaratan fine-tuning OpenAI, tetapi Anda bisa memilih pendekatan lain sesuai aplikasi Anda.
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)Didukung oleh
Pastikan format dataset Anda adalah jsonl dan bukan json. Anda kemungkinan memiliki baris kosong di akhir file, jadi pastikan untuk menghapusnya.
Cara Menjalankan Preference Fine-Tuning dari OpenAI
Setelah dataset Anda siap, ikuti langkah-langkah ini untuk menjalankan preference fine-tuning:
Masuk ke dasbor OpenAI.
Cari bagian fine-tuning dan pilih Create untuk membuat pekerjaan fine-tuning baru.
Pilih direct preference optimization sebagai metode fine-tuning Anda.
Unggah data pelatihan dan validasi Anda (jika ada).
OpenAI memungkinkan Anda menentukan hyperparameter, tetapi Anda juga bisa membiarkannya kosong dan sistem akan memutuskan secara otomatis. Bergantung pada ukuran dataset, pelatihan dapat memakan waktu.
Kesimpulan
Direct preference optimization adalah fitur baru yang berguna dalam kotak peralatan fine-tuning OpenAI yang memungkinkan Anda secara eksplisit mengontrol nada dan gaya respons model serta membuatnya lebih selaras dengan preferensi pengguna.
Seperti halnya distillation, reinforcement fine-tuning, dan supervised fine-tuning dari OpenAI, kontribusi utama Anda dalam preference fine-tuning adalah menyiapkan dataset sesuai format dan struktur OpenAI, dan alat mereka akan menangani sisanya:
Untuk mempelajari lebih lanjut, saya merekomendasikan sumber berikut:
Mahasiswa magister Kecerdasan Buatan dan penulis teknis AI. Saya berbagi wawasan tentang teknologi AI terbaru, membuat riset ML lebih mudah diakses, dan menyederhanakan topik AI yang kompleks agar Anda tetap terdepan.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Preference fine-tuning (PFT) adalah teknik yang telah lama digunakan untuk menyetel LLM. OpenAI baru-baru ini memperkenalkannya sebagai bagian dari peluncuran fitur 12 hari.
Bersama dengan supervised fine-tuning (SFT) dan reinforcement fine-tuning (RFT), PFT adalah cara lain untuk menyelaraskan model bahasa besar dengan preferensi pengguna.
Dalam artikel ini, saya akan menjelaskan secara singkat preference fine-tuning dan menunjukkan cara menggunakannya dengan upaya minimal di dasbor pengembang OpenAI.
Apa Itu Preference Fine-Tuning dari OpenAI?
Sementara tujuan supervised fine-tuning standar adalah membuat model mengembalikan keluaran tertentu untuk masukan tertentu, fokus dalam preference fine-tuning (PFT) adalah mengarahkan model untuk menghasilkan respons yang kita sukai dan menjauhi respons yang tidak kita sukai.
Direct preference optimization (DPO) adalah teknik standar dalam PFT dan semakin populer sebagai teknik alignment yang kuat karena kesederhanaan dan efektivitasnya.
Berbeda dengan reinforcement learning from human feedback (RLHF), DPO tidak memerlukan model reward yang kompleks untuk menyelaraskan model bahasa besar (LLM), melainkan memperlakukan masalah alignment sebagai optimisasi "langsung" dari fungsi loss. Ini membuat DPO lebih mudah diterapkan dan lebih efisien secara komputasi.
Dataset yang diperlukan untuk DPO, seperti metode alignment lainnya, mencakup sepasang respons "disukai" dan "tidak disukai" untuk sebuah prompt. Dalam kasus PFT dari OpenAI, mirip dengan metode fine-tuning lainnya, dataset harus dalam format JSONL dan memiliki struktur berikut:
Dokumentasi resmi OpenAI untuk PFT merekomendasikan menggabungkan SFT dan PFT untuk alignment yang lebih baik. Teknik alignment seperti PFT umumnya digunakan setelah menyetel model pada dataset supervised. Menggabungkan SFT dengan PFT dianggap sebagai standar industri dan juga dianjurkan oleh OpenAI.
Cara Memformat Dataset untuk Preference Fine-Tuning
Sebelum apa pun, kita perlu memastikan dataset kita sesuai format yang diperlukan untuk preference fine-tuning dari OpenAI.
Ada beberapa cara untuk membuat dataset preferensi. Salah satu metode adalah mengambil pasangan keluaran LLM dengan temperature, top_k, atau system prompt yang berbeda, lalu menggunakan LLM lain, sebaiknya yang lebih mumpuni, untuk memilih satu keluaran sebagai "disukai" dan yang lain sebagai "tidak disukai."
Untuk demo dalam tutorial ini, saya akan mengunduh dataset preferensi dari Hugging Face dan menyusunnya ulang. Saya akan menggunakan argilla/ultrafeedback-binarized-preferences, yang merupakan dataset preferensi, tetapi saya hanya akan mengambil 50 baris pertama.
Contoh dataset preferensi dari Hugging Face.
Skrip Python sudah cukup untuk mengonversi struktur dataset ke persyaratan fine-tuning OpenAI, tetapi Anda bisa memilih pendekatan lain sesuai aplikasi Anda.
Pastikan format dataset Anda adalah
jsonldan bukanjson. Anda kemungkinan memiliki baris kosong di akhir file, jadi pastikan untuk menghapusnya.Cara Menjalankan Preference Fine-Tuning dari OpenAI
Setelah dataset Anda siap, ikuti langkah-langkah ini untuk menjalankan preference fine-tuning:
OpenAI memungkinkan Anda menentukan hyperparameter, tetapi Anda juga bisa membiarkannya kosong dan sistem akan memutuskan secara otomatis. Bergantung pada ukuran dataset, pelatihan dapat memakan waktu.
Kesimpulan
Direct preference optimization adalah fitur baru yang berguna dalam kotak peralatan fine-tuning OpenAI yang memungkinkan Anda secara eksplisit mengontrol nada dan gaya respons model serta membuatnya lebih selaras dengan preferensi pengguna.
Seperti halnya distillation, reinforcement fine-tuning, dan supervised fine-tuning dari OpenAI, kontribusi utama Anda dalam preference fine-tuning adalah menyiapkan dataset sesuai format dan struktur OpenAI, dan alat mereka akan menangani sisanya:
Untuk mempelajari lebih lanjut, saya merekomendasikan sumber berikut: