Pengantar
Saya yakin sebagian besar dari Anda pasti pernah mendengar tentang ChatGPT dan mencobanya untuk menjawab pertanyaan Anda! Pernah bertanya-tanya apa yang terjadi di bawah tenda? Ini didukung oleh Model Bahasa Besar GPT-3 yang dikembangkan oleh Open AI. Model bahasa besar ini, sering disebut sebagai LLM telah membuka banyak kemungkinan Pengolahan Bahasa alami.
Apa itu Model Bahasa Besar?
Model LLM dilatih pada sejumlah besar data teks, memungkinkan mereka memahami bahasa manusia dengan makna dan konteks. Sebelumnya, sebagian besar model dilatih menggunakan pendekatan yang diawasi, di mana kami memasukkan fitur masukan dan label yang sesuai. Tidak seperti ini, LLM dilatih melalui pembelajaran tanpa pengawasan, di mana mereka diberi data teks dalam jumlah besar tanpa label dan instruksi apa pun. Oleh karena itu, LLM mempelajari arti dan hubungan antara kata-kata suatu bahasa secara efisien. Mereka dapat digunakan untuk berbagai tugas seperti membuat teks, menjawab pertanyaan, menerjemahkan dari satu bahasa ke bahasa lain, dan banyak lagi.
Sebagai ceri di atas, model bahasa besar ini dapat disesuaikan pada kumpulan data khusus Anda untuk tugas khusus domain. Pada artikel ini, saya akan berbicara tentang perlunya penyempurnaan, berbagai LLM yang tersedia, dan juga menunjukkan sebuah contoh.
Memahami LLM Fine-Tuning
Katakanlah Anda menjalankan komunitas pendukung diabetes dan ingin menyiapkan saluran bantuan online untuk menjawab pertanyaan. LLM pra-pelatihan dilatih secara lebih umum dan tidak akan dapat memberikan jawaban terbaik untuk pertanyaan khusus domain dan memahami istilah dan akronim medis. Ini bisa diatasi dengan fine-tuning.
Apa yang kami maksud dengan fine-tuning? Untuk mengatakan secara singkat, Transfer
pengetahuan! Model bahasa besar dilatih pada kumpulan data besar menggunakan sumber daya berat dan memiliki jutaan parameter. Representasi dan pola bahasa yang dipelajari oleh LLM selama pra-pelatihan ditransfer ke tugas Anda saat ini. Dalam istilah teknis, kami menginisialisasi model dengan bobot yang telah dilatih sebelumnya, lalu melatihnya pada data khusus tugas kami untuk mencapai lebih banyak bobot yang dioptimalkan untuk tugas untuk parameter. Anda juga dapat membuat perubahan pada arsitektur model, dan memodifikasi layer sesuai kebutuhan Anda.
Mengapa Anda Harus Menyempurnakan Model?
- Hemat waktu dan sumber daya: Penyempurnaan dapat membantu Anda mengurangi waktu pelatihan dan sumber daya yang dibutuhkan daripada pelatihan dari awal.
- Persyaratan Data yang Dikurangi: Jika Anda ingin melatih model dari awal, Anda memerlukan sejumlah besar data berlabel yang seringkali tidak tersedia untuk individu dan usaha kecil. Penyesuaian halus dapat membantu Anda mencapai kinerja yang baik bahkan dengan jumlah data yang lebih sedikit.
- Sesuaikan dengan kebutuhan Anda: LLM terlatih mungkin tidak menangkap terminologi dan singkatan khusus domain Anda. Misalnya, LLM normal tidak akan mengenali bahwa "Tipe 1" dan "Tipe 2" menandakan jenis diabetes, sedangkan yang disetel dengan baik bisa.
- Aktifkan pembelajaran berkelanjutan: Katakanlah kita menyempurnakan model kita pada data informasi diabetes dan menyebarkannya. Bagaimana jika ada rencana diet atau perawatan baru yang ingin Anda sertakan? Anda dapat menggunakan bobot model yang telah disetel sebelumnya dan menyesuaikannya untuk memasukkan data baru Anda. Ini dapat membantu organisasi menjaga model mereka tetap mutakhir dengan cara yang efisien.
Memilih Model LLM Sumber Terbuka
Langkah selanjutnya adalah memilih model bahasa yang besar untuk tugas Anda. Apa pilihan Anda? Model bahasa besar canggih yang tersedia saat ini termasuk GPT-3, Bloom, BERT, T5, dan XLNet. Di antaranya, GPT-3 (Generative Pretrained Transformers) telah menunjukkan performa terbaik, karena dilatih pada 175 miliar parameter dan dapat menangani beragam tugas NLU. Namun, penyempurnaan GPT-3 hanya dapat diakses melalui langganan berbayar dan relatif lebih mahal daripada opsi lainnya.
Di sisi lain, BERT adalah model bahasa besar sumber terbuka dan dapat disesuaikan secara gratis. BERTI singkatan dari Bi-directional Encoder Decoder Transformers. BERT melakukan pekerjaan yang sangat baik dalam memahami representasi kata kontekstual.
Bagaimana Anda memilih?
Jika tugas Anda lebih berorientasi pada pembuatan teks, model GPT-3 (berbayar) atau GPT-2 (sumber terbuka) akan menjadi pilihan yang lebih baik. Jika tugas Anda termasuk dalam klasifikasi teks, menjawab pertanyaan, atau Pengenalan Entitas, Anda dapat menggunakan BERT. Untuk kasus saya tentang Menjawab Pertanyaan tentang Diabetes, saya akan melanjutkan dengan model BERT.
Mempersiapkan dan Pra-pemrosesan Dataset Anda
Ini adalah langkah penyempurnaan yang paling penting, karena format data bervariasi berdasarkan model dan tugas. Untuk kasus ini, saya telah membuat contoh dokumen teks dengan informasi tentang diabetes yang saya peroleh dari National Institute of Health situs web. Anda dapat menggunakan data Anda sendiri.
Untuk menyempurnakan BERT tugas Menjawab Pertanyaan, disarankan untuk mengonversi data Anda ke dalam format SQuAD. SQuAD adalah Dataset Penjawab Pertanyaan Stanford dan format ini diadopsi secara luas untuk melatih model NLP untuk tugas menjawab pertanyaan. Data harus dalam format JSON, di mana setiap bidang terdiri dari:
context
: Kalimat atau paragraf dengan teks berdasarkan mana model akan mencari jawaban atas pertanyaanquestion
: Permintaan yang kami ingin BERT jawab. Anda perlu membingkai pertanyaan-pertanyaan ini berdasarkan bagaimana pengguna akhir akan berinteraksi dengan model QA.answers
: Anda harus memberikan jawaban yang diinginkan di bawah bidang ini. Ada dua sub-komponen di bawah ini,text
dananswer_start
. itutext
akan memiliki string jawaban. Sedangkan,answer_start
menunjukkan indeks, dari mana jawabannya dimulai dalam paragraf konteks.
Seperti yang dapat Anda bayangkan, akan memakan banyak waktu untuk membuat data ini untuk dokumen Anda jika Anda melakukannya secara manual. Jangan khawatir, saya akan menunjukkan cara melakukannya dengan mudah menggunakan alat anotasi Haystack.
Bagaimana Cara Membuat Data dalam Format SQuAD dengan Haystack?
Dengan menggunakan alat anotasi Haystack, Anda dapat dengan cepat membuat kumpulan data berlabel untuk tugas menjawab pertanyaan. Anda dapat mengakses alat tersebut dengan membuat akun di akun mereka situs web. Buat proyek baru dan unggah dokumen Anda. Anda dapat melihatnya di bawah tab "Dokumen", buka "Tindakan" dan Anda dapat melihat opsi untuk membuat pertanyaan. Anda dapat menulis pertanyaan Anda dan menyorot jawabannya di dokumen, Haystack akan secara otomatis menemukan indeks awalnya. Saya telah menunjukkan bagaimana saya melakukannya pada dokumen saya pada gambar di bawah ini.
Gambar 1: Membuat dataset berlabel untuk Question-Answering dengan Haystack
Setelah Anda selesai membuat pasangan Tanya-jawab yang cukup untuk penyempurnaan, Anda seharusnya dapat melihat ringkasannya seperti yang ditunjukkan di bawah ini. Di bawah tab "Ekspor label", Anda dapat menemukan beberapa opsi untuk format yang ingin Anda ekspor. Kami memilih format skuad untuk kasus kami. Jika Anda memerlukan bantuan lebih lanjut dalam menggunakan alat ini, Anda dapat memeriksanya dokumentasi. Kami sekarang memiliki file JSON kami yang berisi pasangan QA untuk penyempurnaan.
Bagaimana Cara Menyempurnakan?
Python menawarkan banyak paket sumber terbuka yang dapat Anda gunakan untuk menyempurnakan. Saya menggunakan paket Pytorch dan Transformers untuk kasus saya. Mulailah dengan mengimpor modul paket menggunakan pip, pengelola paket. Itu transformers
perpustakaan menyediakan a BERTTokenizer
, yang khusus untuk menandai input ke model BERT.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Menentukan Kumpulan Data Kustom untuk Memuat dan Pra-pemrosesan
Langkah selanjutnya adalah memuat dan melakukan pra-proses data. Anda dapat menggunakan Dataset
kelas dari python utils.data
modul untuk menentukan kelas khusus untuk kumpulan data Anda. Saya telah membuat kelas dataset khusus diabetes
seperti yang Anda lihat pada cuplikan kode di bawah ini. Itu init
bertanggung jawab untuk menginisialisasi variabel. Itu file_path
adalah argumen yang akan memasukkan jalur file pelatihan JSON Anda dan akan digunakan untuk menginisialisasi data
. Kami menginisialisasi BertTokenizer
juga di sini.
Selanjutnya kita definisikan a load_data()
fungsi. Fungsi ini akan membaca file JSON menjadi objek data JSON dan mengekstrak konteks, pertanyaan, jawaban, dan indeksnya darinya. Itu menambahkan bidang yang diekstraksi ke dalam daftar dan mengembalikannya.
Grafik getitem
menggunakan tokenizer BERT untuk menyandikan pertanyaan dan konteks ke dalam tensor input input_ids
dan attention_mask
. itu encode_plus
akan menandai teks, dan menambahkan token khusus (seperti [CLS] dan [SEP]). Perhatikan bahwa kami menggunakan squeeze()
metode untuk menghapus dimensi tunggal apa pun sebelum memasukkan ke BERT. Akhirnya, ini mengembalikan tensor input yang diproses.
class diabetes(Dataset): def __init__(self, file_path): self.data = self.load_data(file_path) self.tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') def load_data(self, file_path): with open(file_path, 'r') as f: data = json.load(f) paragraphs = data['data'][0]['paragraphs'] extracted_data = [] for paragraph in paragraphs: context = paragraph['context'] for qa in paragraph['qas']: question = qa['question'] answer = qa['answers'][0]['text'] start_pos = qa['answers'][0]['answer_start'] extracted_data.append({ 'context': context, 'question': question, 'answer': answer, 'start_pos': start_pos, }) return extracted_data def __len__(self): return len(self.data) def __getitem__(self, index): example = self.data[index] question = example['question'] context = example['context'] answer = example['answer'] inputs = self.tokenizer.encode_plus(question, context, add_special_tokens=True, padding='max_length', max_length=512, truncation=True, return_tensors='pt') input_ids = inputs['input_ids'].squeeze() attention_mask = inputs['attention_mask'].squeeze() start_pos = torch.tensor(example['start_pos']) return input_ids, attention_mask, start_pos, end_pos
Setelah Anda mendefinisikannya, Anda dapat melanjutkan dan membuat turunan dari kelas ini dengan meneruskan file_path
argumen untuk itu.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
Melatih Model
Saya akan menggunakan BertForQuestionAnswering
model karena paling cocok untuk tugas-tugas QA. Anda dapat menginisialisasi bobot yang telah dilatih sebelumnya bert-base-uncased
model dengan memanggil from_pretrained
fungsi pada model. Anda juga harus memilih fungsi kerugian evaluasi dan pengoptimal yang akan Anda gunakan untuk pelatihan.
Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!
Saya menggunakan pengoptimal Adam dan fungsi kehilangan entropi silang. Anda dapat menggunakan kelas Pytorch DataLoader
untuk memuat data dalam batch yang berbeda dan juga mengocoknya untuk menghindari bias.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = BertForQuestionAnswering.from_pretrained('bert-base-uncased')
model.to(device) optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
loss_fn = torch.nn.CrossEntropyLoss()
batch_size = 8
num_epochs = 50 data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
Setelah pemuat data ditentukan, Anda dapat melanjutkan dan menulis loop pelatihan terakhir. Selama setiap iterasi, setiap batch diperoleh dari data_loader
mengandung batch_size
sejumlah contoh, di mana propagasi maju dan mundur dilakukan. Kode mencoba untuk menemukan kumpulan bobot terbaik untuk parameter, di mana kerugiannya akan minimal.
for epoch in range(num_epochs): model.train() total_loss = 0 for batch in data_loader: input_ids = batch[0].to(device) attention_mask = batch[1].to(device) start_positions = batch[2].to(device) optimizer.zero_grad() outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(data_loader) print(f"Epoch {epoch+1}/{num_epochs} - Average Loss: {avg_loss:.4f}")
Ini melengkapi penyempurnaan Anda! Anda dapat menguji model dengan menyetelnya ke model.eval()
. Anda juga dapat menggunakan fine-tune parameter learning rate, dan no of epochs untuk mendapatkan hasil terbaik pada data Anda.
Kiat dan Praktik Terbaik
Berikut beberapa hal yang perlu diperhatikan saat menyempurnakan model bahasa besar apa pun pada data khusus:
- Kumpulan data Anda harus mewakili domain target atau tugas yang Anda inginkan agar model bahasanya unggul. Membersihkan dan data yang terstruktur dengan baik sangat penting.
- Pastikan Anda memiliki cukup contoh pelatihan dalam data agar model dapat mempelajari pola. Jika tidak, model mungkin menghafal contoh dan mengenakannya, tanpa kemampuan untuk itu menyamaratakan untuk contoh yang tidak terlihat.
- Pilih model pra-terlatih yang telah dilatih pada korpus yang relevan dengan tugas Anda. Untuk menjawab pertanyaan, kami memilih model pra-terlatih yang dilatih pada kumpulan data Stanford Question Answering. Mirip dengan ini, ada berbagai model yang tersedia untuk tugas-tugas seperti analisis sentimen, pembuatan teks, peringkasan, klasifikasi teks, dan banyak lagi.
- Mencoba Akumulasi gradien jika Anda memiliki memori GPU terbatas. Dalam metode ini, daripada memperbarui bobot model setelah setiap kumpulan, gradien diakumulasikan pada beberapa kumpulan mini sebelum melakukan pembaruan.
- Jika Anda menghadapi masalah overfitting saat melakukan fine-tuning, gunakan regularisasi teknik. Beberapa metode yang umum digunakan termasuk menambahkan lapisan dropout ke arsitektur model, menerapkan penurunan berat badan, dan normalisasi lapisan.
Kesimpulan
Model bahasa besar dapat membantu Anda mengotomatiskan banyak tugas dengan cepat dan efisien. Menyempurnakan LLM membantu Anda memanfaatkan kekuatan pembelajaran transfer dan menyesuaikannya dengan domain khusus Anda. Penyempurnaan sangat penting jika kumpulan data Anda ada di domain seperti medis, ceruk teknis, kumpulan data keuangan, dan lainnya.
Pada artikel ini kami menggunakan BERT karena open source dan bekerja dengan baik untuk penggunaan pribadi. Jika Anda mengerjakan proyek skala besar, Anda dapat memilih LLM yang lebih kuat, seperti GPT3, atau alternatif sumber terbuka lainnya. Ingat, menyempurnakan model bahasa besar bisa mahal secara komputasi dan menghabiskan waktu. Pastikan Anda memiliki sumber daya komputasi yang memadai, termasuk GPU atau TPU berdasarkan skalanya.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- PlatoData.Jaringan Vertikal Generatif Ai. Berdayakan Diri Anda. Akses Di Sini.
- PlatoAiStream. Intelijen Web3. Pengetahuan Diperkuat. Akses Di Sini.
- PlatoESG. Otomotif / EV, Karbon, teknologi bersih, energi, Lingkungan Hidup, Tenaga surya, Penanganan limbah. Akses Di Sini.
- BlockOffset. Modernisasi Kepemilikan Offset Lingkungan. Akses Di Sini.
- Sumber: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :memiliki
- :adalah
- :bukan
- :Di mana
- $NAIK
- 1
- 12
- 20
- 8
- a
- Sanggup
- Tentang Kami
- mengakses
- diakses
- Akun
- Akumulasi
- Mencapai
- tindakan
- sebenarnya
- Adam
- menambahkan
- Menambahkan
- diadopsi
- Setelah
- di depan
- AI
- juga
- alternatif
- am
- antara
- jumlah
- jumlah
- an
- analisis
- dan
- Lain
- menjawab
- jawaban
- Apa pun
- pendekatan
- arsitektur
- ADALAH
- argumen
- artikel
- AS
- At
- Mencoba
- mengotomatisasikan
- secara otomatis
- tersedia
- rata-rata
- menghindari
- berdasarkan
- BE
- menjadi
- sebelum
- di bawah
- TERBAIK
- Lebih baik
- antara
- prasangka
- Milyar
- Berkembang
- batas
- bisnis
- tapi
- by
- panggilan
- CAN
- Kapasitas
- kasus
- gulat
- Perubahan
- ChatGPT
- memeriksa
- pilihan
- Pilih
- kelas
- klasifikasi
- kode
- umum
- masyarakat
- Selesaikan
- kesimpulan
- terdiri
- mengandung
- konteks
- kontekstual
- mengkonversi
- Sesuai
- membuat
- dibuat
- membuat
- Cross
- sangat penting
- terbaru
- Sekarang
- adat
- menyesuaikan
- data
- kumpulan data
- didefinisikan
- dikerahkan
- diinginkan
- dikembangkan
- alat
- Diabetes
- MELAKUKAN
- Diet
- berbeda
- ukuran
- beberapa
- do
- dokumen
- dokumen
- tidak
- domain
- domain
- don
- dilakukan
- selama
- setiap
- mudah
- efisien
- efisien
- lain
- memungkinkan
- akhir
- cukup
- memastikan
- entitas
- masa
- zaman
- penting
- evaluasi
- Bahkan
- pERNAH
- contoh
- contoh
- Excel
- unggul
- mahal
- ekspor
- ekstrak
- Menghadapi
- Air terjun
- Fitur
- Fed
- bidang
- Fields
- File
- terakhir
- Akhirnya
- keuangan
- Menemukan
- Fokus
- Untuk
- format
- Depan
- FRAME
- Gratis
- dari
- fungsi
- umumnya
- generasi
- generatif
- pergi
- Go
- baik
- GPU
- GPU
- gradien
- membimbing
- tangan
- menangani
- hands-on
- Terjadi
- Memiliki
- Kesehatan
- mendengar
- berat
- membantu
- karenanya
- di sini
- Menyoroti
- kap
- melayang-layang
- Seterpercayaapakah Olymp Trade? Kesimpulan
- How To
- HTTPS
- besar
- manusia
- sangat besar
- i
- if
- gambar
- membayangkan
- mengimplementasikan
- pengimporan
- in
- memasukkan
- termasuk
- Termasuk
- indeks
- individu
- informasi
- memasukkan
- input
- install
- contoh
- instruksi
- berinteraksi
- ke
- Pengantar
- IT
- perulangan
- Pekerjaan
- json
- Menjaga
- Label
- bahasa
- besar
- besar-besaran
- lapisan
- lapisan
- BELAJAR
- belajar
- pengetahuan
- membiarkan
- Leverage
- LG
- Perpustakaan
- 'like'
- Terbatas
- Daftar
- ll
- LLM
- memuat
- pemuat
- pemuatan
- lepas
- Lot
- membuat
- manajer
- cara
- manual
- banyak
- besar-besaran
- Mungkin..
- berarti
- makna
- medis
- Memori
- metode
- metode
- mungkin
- jutaan
- minimal
- model
- model
- memodifikasi
- Modul
- Modul
- lebih
- paling
- banyak
- beberapa
- my
- nasional
- Perlu
- dibutuhkan
- kebutuhan
- New
- berikutnya
- NIH
- nLP
- tidak
- normal
- sekarang
- jumlah
- obyek
- memperoleh
- diperoleh
- of
- Penawaran
- sering
- on
- ONE
- secara online
- hanya
- Buka
- open source
- pilihan
- Opsi
- or
- organisasi
- Lainnya
- kami
- di luar
- lebih
- sendiri
- paket
- paket
- dibayar
- pasang
- parameter
- tertentu
- Lewat
- path
- pola
- untuk
- prestasi
- dilakukan
- melakukan
- pribadi
- rencana
- plato
- Kecerdasan Data Plato
- Data Plato
- poin
- kemungkinan
- kekuasaan
- didukung
- kuat
- Praktis
- sebelumnya
- Masalah
- Diproses
- proyek
- memberikan
- menyediakan
- pytorch
- Q & A
- pertanyaan
- Pertanyaan
- Cepat
- segera
- Penilaian
- agak
- mencapai
- Baca
- pengakuan
- mengenali
- direkomendasikan
- menurunkan
- disebut
- Hubungan
- relatif
- relevan
- ingat
- menghapus
- mewakili
- Persyaratan
- Sumber
- tanggung jawab
- Hasil
- Pengembalian
- Cincin
- Run
- s
- mengatakan
- Skala
- menggaruk
- Pencarian
- melihat
- DIRI
- putusan pengadilan
- sentimen
- set
- pengaturan
- bayangan
- lembar
- harus
- Menunjukkan
- ditunjukkan
- kocokan
- menandakan
- mirip
- kecil
- usaha kecil
- lebih kecil
- beberapa
- sumber
- khusus
- tertentu
- Secara khusus
- penyalahgunaan
- standar
- berdiri
- Stanford
- awal
- Mulai
- state-of-the-art
- Langkah
- berhenti
- Tali
- berlangganan
- seperti itu
- cukup
- RINGKASAN
- mendukung
- yakin
- Mengambil
- Berbicara
- target
- tugas
- tugas
- Teknis
- terminologi
- istilah
- uji
- Klasifikasi Teks
- dari
- bahwa
- Grafik
- mereka
- Mereka
- kemudian
- Sana.
- Ini
- mereka
- ini
- Melalui
- waktu
- membuang-buang waktu
- Tips
- untuk
- tokenisasi
- tokenizing
- Token
- alat
- puncak
- obor
- terhadap
- Pelatihan VE
- terlatih
- Pelatihan
- transfer
- ditransfer
- transformer
- transisi
- Terjemahan
- pengobatan
- mencoba
- dua
- mengetik
- jenis
- bawah
- memahami
- pemahaman
- tidak seperti
- mutakhir
- Memperbarui
- memperbarui
- menggunakan
- bekas
- Pengguna
- kegunaan
- menggunakan
- variasi
- View
- ingin
- we
- berat
- BAIK
- adalah
- Apa
- sedangkan
- yang
- sementara
- lebar
- sangat
- akan
- dengan
- tanpa
- Word
- kata
- kerja
- bekerja
- kuatir
- akan
- tidak akan
- menulis
- Kamu
- Anda
- zephyrnet.dll