Lewati ke konten utama

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.
· 8 mnt Baca

Jelajahi bersama AI

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:

{
  "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."
    }
  ]
}

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.

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)
  
with open("preference_dataset.jsonl", 'w') as out:
  for json_line in ds_list:
      jout = json.dumps(json_line) + '\\n'
      out.write(jout)

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:

  1. Masuk ke dasbor OpenAI.
  2. Cari bagian fine-tuning dan pilih Create untuk membuat pekerjaan fine-tuning baru.
  3. Pilih direct preference optimization sebagai metode fine-tuning Anda.
  4. Unggah data pelatihan dan validasi Anda (jika ada).

Tangkapan layar fine-tuning dari dasbor OpenAI.

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:

Hesam Sheikh Hassani

Penulis

Hesam Sheikh Hassani

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.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai