Dalam tutorial ini, kita akan melakukan prompt tuning terhadap Model IBM Granite menggunakan kumpulan data sintetis yang berisi ulasan pelanggan tentang bisnis perawatan anjing.
Penyetelan prompt adalah cara yang efisien dan murah untuk mengadaptasi model dasar kecerdasan buatan (AI) ke berbagai tugas hilir baru tanpa melatih ulang seluruh model dan memperbarui bobotnya.
Model dasar dibangun berdasarkan model bahasa besar (large language model, LLM) dan menerima sejumlah besar data pelatihan. Contoh penggunaan model dasar meliputi chatbot dan asisten virtual.
Ada beberapa cara untuk meningkatkan penafsiran input model dasar dan kualitas responsnya. Untuk lebih memahami nuansa ini, mari kita bandingkan beberapa metode.
Prompt keras adalah buatan pengguna dan membutuhkan tindakan pengguna. Prompt keras dapat dianggap sebagai templat atau instruksi bagi LLM untuk menghasilkan respons. Bagian berikut ini menjelaskan contoh prompt keras. Kami sarankan Anda untuk melihat halaman Dokumentasi IBM untuk informasi lebih lanjut tentang jenis prompt ini dan beberapa jenis lainnya.
Dengan menggunakan templat prompt keras ini, LLM bisa mendapatkan instruksi spesifik mengenai struktur dan gaya output yang diinginkan. Melalui prompt eksplisit ini, LLM kemungkinan besar akan menghasilkan respons yang diinginkan dengan kualitas yang lebih tinggi.
Prompt lunak, tidak seperti prompt keras, tidak ditulis dalam bahasa alami. Sebaliknya, prompt diawali sebagai vektor numerik buatan AI yang ditambahkan ke awal setiap penyematan input yang menyaring pengetahuan dari model yang lebih besar. Kurangnya interpretabilitas ini meluas ke AI yang memilih prompt yang dioptimalkan untuk tugas tertentu. AI sering kali tidak dapat menjelaskan mengapa ia memilih penanaman tersebut. Dibandingkan dengan metode prompting lainnya, token virtual ini tidak terlalu mahal dari segi komputasi dibandingkan dengan penyempurnaan karena model itu sendiri tetap tidak berubah dengan bobot yang tetap. Prompt lunak juga cenderung mengungguli prompt keras yang dibuat oleh manusia.
Kita akan menggunakan soft prompt untuk melakukan prompt tuning dalam tutorial ini.
Anda memerlukan akun IBM Cloud untuk membuat proyek watsonx.ai .
Meskipun tersedia beberapa pilihan alat, tutorial ini akan memandu Anda menyiapkan akun IBM menggunakan Jupyter Notebook.
Masuk ke watsonx.ai menggunakan akun IBM Cloud Anda.
Buat proyek watsonx.ai.
Anda bisa mendapatkan ID proyek dari dalam proyek Anda. Klik tab Kelola . Kemudian, salin ID proyek dari bagian Detail di halaman Umum . Anda memerlukan ID ini untuk tutorial ini.
Buat Jupyter Notebook.
Langkah ini akan membuka lingkungan Notebook di mana Anda dapat menyalin kode dari tutorial ini untuk mengimplementasikan penyetelan prompt secara mandiri. Atau, Anda dapat mengunduh notebook ini ke sistem lokal Anda dan mengunggahnya ke proyek watsonx.ai Anda sebagai aset. Aplikasi Jupyter Notebook ini bersama dengan kumpulan data yang digunakan dapat ditemukan di GitHub.
Buat instans layanan watsonx.ai Runtime (pilih wilayah yang sesuai dan pilih paket Lite, yang merupakan instans gratis).
Buat Kunci API.
Tautkan instans layanan watsonx.ai Runtime ke proyek yang telah Anda buat di watsonx.ai.
Kita membutuhkan beberapa pustaka dan modul untuk tutorial ini. Pastikan untuk mengimpor yang berikut ini; jika tidak diinstal, Anda dapat menyelesaikan masalah ini dengan instalasi pip cepat.
Siapkan kredensial Anda. Masukkan kunci API dan ID proyek Anda.
Sebagai langkah pertama dalam membangun lingkungan, buat instans APIClient dengan detail autentikasi Anda dan tetapkan project_id Anda.
Output:
'SUCCESS'
Untuk tutorial ini, kita akan menggunakan kumpulan data sintetis yang terdiri dari ulasan bisnis perawatan anjing. Menggunakan URL yang sesuai, kita dapat menghubungkan kumpulan data tersebut ke klien API.
Anda dapat menggunakan kumpulan data apa pun yang disukai. Beberapa kumpulan data sumber terbuka tersedia di platform seperti HuggingFace.
Output:
Creating data asset...
SUCCESS
Output:
3b1db894-8d9e-428d-8fee-d96f328c7726
Untuk mendapatkan insight tentang pemformatan ulasan pelanggan ini, mari muat data ke dalam kerangka data Pandas dan cetak beberapa baris yang menunjukkan ulasan positif dan negatif. Output "1" menunjukkan ulasan positif dan "0" menunjukkan ulasan negatif.
Output:
Kelas TuneExperiment digunakan untuk membuat eksperimen dan menjadwalkan tuning. Mari kita gunakan ini untuk menginisialisasi eksperimen dan menyiapkan model dasar, data pelatihan, dan parameter. Latihan prompt tuning ini bertujuan agar LLM menyesuaikan responsnya sesuai dengan peringkat kepuasan pelanggan yang diekstraksi dari kumpulan data. Ini adalah tugas klasifikasi, karena ulasan dapat diklasifikasikan sebagai positif ("1") atau negatif ("0").
Untuk tutorial ini, sebaiknya gunakan IBM Granite Model sebagai model bahasa besar untuk mencapai hasil yang serupa.
Setelah menyiapkan eksperimen tuning, kita perlu menghubungkannya ke kumpulan data. Untuk ini, mari kita gunakan kelas DataConnection . Hal ini membutuhkan asset_id yang dihasilkan sebelumnya setelah memulai aset data dengan klien API.
Anda bebas menggunakan model AI apa pun pilihan Anda. Model dasar yang tersedia untuk penyetelan melalui watsonx dapat ditemukan di sini atau dengan menjalankan perintah berikut.
Output:
{'FLAN_T5_XL': 'google/flan-t5-xl', 'GRANITE_13B_INSTRUCT_V2': 'ibm/granite-13b-instruct-v2', 'LLAMA_2_13B_CHAT': 'meta-llama/llama-2-13b-chat'}
Output:
##############################################
Running '20671f17-ff53-470b-9bfe-04318ecb91d9'
##############################################
pending......
running....................................................................................................................................
completed
Training of '20671f17-ff53-470b-9bfe-04318ecb91d9' finished successfully.
Untuk memastikan penyetelan prompt telah selesai, kita dapat memeriksa statusnya. Jika status yang tertulis adalah apa pun selain "selesai," tunggu hingga penyetelan selesai sebelum melanjutkan.
Output:
completed
Kita sekarang dapat mengambil ringkasan prompt tuning. Dalam ringkasan ini, Anda akan melihat nilai kerugian. Untuk setiap latihan yang dijalankan, fungsi kerugian mengukur perbedaan antara hasil yang diprediksi dan hasil aktual. Oleh karena itu, nilai kerugian yang lebih rendah lebih disukai.
Kami juga dapat menggambarkan kurva pembelajaran penyetelan model kami menggunakan fungsi plot_learning_curve(). Kurva miring ke bawah yang mendatar mendekati nol mengindikasikan bahwa model ini meningkatkan pembuatan output yang diharapkan. Untuk mempelajari lebih lanjut tentang menafsirkan grafik fungsi kerugian, lihat dokumentasi IBM watsonx yang relevan.
Output:
Langkah penerapan model yang disetel ini sangat penting untuk menyelesaikan langkah selanjutnya dalam membandingkan kinerja model yang disetel dengan model sebelum penyetelan.
Catatan: SERVING_NAME diatur ke tanggal dan waktu saat ini karena harus berupa nilai unik.
Output:
######################################################################################
Synchronous deployment creation for id: '6aa5dd5c-0cc4-44e0-9730-18303e88e14a' started
######################################################################################
initializing.......................
ready
-----------------------------------------------------------------------------------------------
Successfully finished deployment creation, deployment_id='24a97b84-47d0-4490-9f5f-21ed2376fdd6'
-----------------------------------------------------------------------------------------------
Sekarang, mari kita uji kinerja model yang disetel dan model dasar asli untuk melihat dampak dari proses penyetelan kita. Pertama, mari kita muat kumpulan data pengujian. Kumpulan data ini harus merupakan bagian dari data yang tidak ada selama penyetelan. Kumpulan tes sering kali berukuran lebih kecil dari kumpulan pelatihan. Selain itu, setiap input dalam kumpulan data pengujian memiliki prompt sebagai awalan komentar pengguna.
Mari kita tampilkan sebagian kecil dari kumpulan data untuk lebih memahami strukturnya.
Output:
Setelah memuat kumpulan data pengujian, mari kita ekstrak input dan output.
Kita juga dapat mencetak contoh input dan output pengujian untuk lebih memahami cara kumpulan data diekstrak.
Output:
'Extract the satisfaction from the comment. Return simple 1 for satisfied customer or 0 for unsatisfied.\nComment: Long wait times.\nSatisfaction:\n'
Dalam contoh ini, prompt diberikan, dan diikuti oleh ulasan pelanggan tentang waktu tunggu yang lama. Pada akhirnya, kepuasan pelanggan adalah 0, yang menandakan ulasan negatif.
Output:
0
Setelah memiliki kumpulan data pengujian, mari kita uji akurasi dan skor F1 model yang sudah di-tuning. Skor F1 adalah rata-rata presisi dan daya ingat model. Kita membutuhkan deployment_id untuk melakukan ini. Perlu diingat, concurrency_limit ditetapkan ke 2 untuk menghindari batas tingkat API. Ini adalah jumlah permintaan yang akan dikirim secara paralel.
Output:
accuracy_score: 0.9827586206896551, f1_score: 0.9827586206896551
Mengingat akurasi tinggi model dan skor F1, mari kita uji kinerja model Granite yang sama tanpa penyetelan apa pun.
Output:
accuracy_score model dasar: 0.9310344827586207, f1_score model dasar: 0.9298245614035088
Model yang disetel mengungguli model dasar yang telah dilatih. Karena model yang disetel mengkhususkan diri dalam mengekstrak skor kepuasan, model ini dapat digunakan untuk tugas ekstraksi kepuasan lainnya. Hebat!
Dalam tutorial ini, Anda telah melakukan prompt tuning pada model IBM Granite menggunakan watsonx API. Model yang telah di-tuning dan diterapkan berhasil mengungguli model dasar dengan akurasi sekitar 5% lebih besar.