Cara Melatih Model BERT Dari Awal

Node Sumber: 1013329

Cara Melatih Model BERT Dari Awal

Temui sepupu Italia BERT, FiliBERTo.


By James Briggs, Ilmuwan Data



BERT, tapi di Italia — gambar oleh penulis

 

Banyak artikel saya berfokus pada BERT - model yang muncul dan mendominasi dunia pemrosesan bahasa alami (NLP) dan menandai era baru model bahasa.

Bagi Anda yang mungkin belum pernah menggunakan model trafo (misalnya BERT) sebelumnya, prosesnya terlihat seperti ini:

  • pip install transformers
  • Inisialisasi model transformator terlatih — from_pretrained.
  • Uji pada beberapa data.
  • Mungkin menyempurnakan modelnya (melatihnya lagi).

Ini adalah pendekatan yang bagus, tetapi jika kita hanya melakukan ini, kita kurang memahami di balik pembuatan model transformator kita sendiri.

Dan, jika kita tidak dapat membuat model trafo sendiri - kita harus mengandalkan model terlatih yang sesuai dengan masalah kita, hal ini tidak selalu terjadi:



Beberapa komentar menanyakan tentang model BERT non-Inggris

 

Jadi dalam artikel ini, kita akan mengeksplorasi langkah-langkah yang harus kita ambil untuk membangun model transformator kita sendiri — khususnya versi BERT yang dikembangkan lebih lanjut, yang disebut RoBERTa.

Gambaran

 
 
Ada beberapa langkah dalam prosesnya, jadi sebelum kita mendalaminya, mari kita rangkum terlebih dahulu apa yang perlu kita lakukan. Secara total, ada empat bagian penting:

  • Mendapatkan data
  • Membangun tokenizer
  • Membuat saluran masukan
  • Pelatihan model

Setelah kita menyelesaikan masing-masing bagian ini, kita akan mengambil tokenizer dan model yang telah kita buat — dan menyimpan keduanya sehingga kita dapat menggunakannya dengan cara yang sama seperti biasanya. from_pretrained.

Mendapatkan Datanya

 
 
Seperti halnya proyek pembelajaran mesin lainnya, kami memerlukan data. Dalam hal data untuk melatih model transformator, kita memiliki banyak pilihan — kita dapat menggunakan hampir semua data teks.



Panduan video untuk mengunduh kumpulan data OSCAR menggunakan pustaka kumpulan data HuggingFace

 

Dan, jika ada satu hal yang banyak kita miliki di internet — itu adalah data teks tidak terstruktur.

Salah satu kumpulan data terbesar dalam domain teks yang diambil dari internet adalah kumpulan data OSCAR.

Kumpulan data OSCAR menawarkan sejumlah besar bahasa yang berbeda — dan salah satu kasus penggunaan yang paling jelas untuk pelatihan dari awal adalah agar kita dapat menerapkan BERT ke beberapa bahasa yang jarang digunakan, seperti Telugu atau Navajo.

Sayangnya, satu-satunya bahasa yang dapat saya gunakan dengan tingkat kompetensi apa pun adalah bahasa Inggris — tetapi pacar saya adalah orang Italia, jadi dia — Laura, akan menilai hasil model BERT kami yang berbahasa Italia — FiliBERTo.

Jadi, untuk mengunduh kumpulan data OSCAR segmen Italia kami akan menggunakan HuggingFace datasets perpustakaan — yang dapat kita gunakan untuk menginstal pip install datasets. Kemudian kita download OSCAR_IT dengan:

Mari kita lihat dataset obyek.

Bagus, sekarang mari simpan data kita dalam format yang bisa kita gunakan saat membuat tokenizer. Kita perlu membuat satu set file teks biasa yang hanya berisi text fitur dari kumpulan data kami, dan kami akan membaginya masing-masing mencicipi menggunakan baris baru n.

Di dalam kami data/text/oscar_it direktori kita akan menemukan:


Tangkapan layar yang menampilkan jendela Windows explorer yang penuh dengan file .txt — mewakili data OSCAR teks biasa
Direktori yang berisi file OSCAR teks biasa kami

 

Membangun Tokenizer

 
 
Selanjutnya adalah tokenizer! Saat menggunakan transformator, kami biasanya memuat tokenizer, bersama dengan model transformatornya masing-masing — tokenizer adalah komponen kunci dalam proses tersebut.



Panduan video untuk membuat tokenizer khusus kami

 

Saat membuat tokenizer, kami akan memasukkan semua data OSCAR kami, menentukan ukuran kosakata kami (jumlah token dalam tokenizer), dan token khusus apa pun.

Sekarang, token khusus RoBERTa terlihat seperti ini:

Jadi, kami pastikan untuk memasukkannya ke dalam special_tokens parameter tokenizer kami train pemanggilan metode.

Tokenizer kita sekarang sudah siap, dan kita dapat menyimpannya file untuk digunakan nanti:

Sekarang kita memiliki dua file yang mendefinisikan file baru kita FiliBERTo tokenizer:

  • menggabungkan.txt — melakukan pemetaan awal teks ke token
  • vocab.json — memetakan token ke ID token

Dan dengan itu, kita dapat melanjutkan untuk menginisialisasi tokenizer sehingga kita dapat menggunakannya seperti yang lainnya from_pretrained pembuat token.

Menginisialisasi Tokenizer

 
 
Kami pertama kali menginisialisasi tokenizer menggunakan dua file yang kami buat sebelumnya — menggunakan yang sederhana from_pretrained:

Sekarang tokenizer kita sudah siap, kita dapat mencoba menyandikan beberapa teks dengannya. Saat melakukan pengkodean, kami menggunakan dua metode yang sama yang biasa kami gunakan, encode dan encode_batch.

Dari objek pengkodean tokens kami akan mengekstraksi input_ids dan attention_mask tensor untuk digunakan dengan FiliBERTo.

Membuat Saluran Masukan

 
 
Saluran masukan dari proses pelatihan kami adalah bagian yang lebih kompleks dari keseluruhan proses. Ini terdiri dari kita mengambil data pelatihan OSCAR mentah, mengubahnya, dan memuatnya ke dalam a DataLoader siap untuk pelatihan.



Panduan video tentang saluran masukan MLM

 

Mempersiapkan Data

 
 
Kita akan mulai dengan satu sampel dan mengerjakan logika persiapannya.

Pertama, kita perlu membuka file kita — file yang sama dengan yang kita simpan . Txt file sebelumnya. Kami membagi masing-masing berdasarkan karakter baris baru n karena ini menunjukkan sampel individu.

Kemudian kami mengkodekan data kami menggunakan tokenizer — pastikan untuk menyertakan parameter utama seperti max_lengthpadding, dan truncation.

Dan sekarang kita dapat melanjutkan ke pembuatan tensor — kita akan melatih model kita melalui pemodelan bahasa bertopeng (MLM). Jadi, kita membutuhkan tiga tensor:

  • masukan_id - kita token_id dengan ~15% token disamarkan menggunakan token topeng <mask>.
  • perhatian_topeng — tensor dari 1s dan 0s, menandai posisi token/token padding 'nyata' — digunakan dalam perhitungan perhatian.
  • label - kita token_id dengan tidak penyamaran.

Jika Anda belum familiar dengan MLM, saya sudah menjelaskannya di sini.

Kami attention_mask dan labels tensor hanya diekstraksi dari kami batch. itu input_ids tensor memerlukan perhatian lebih, namun untuk tensor ini kami menutupi ~15% token — memberinya ID token 3.

Pada hasil akhir, kita dapat melihat bagian yang dikodekan input_ids tensor. ID token pertama adalah 1 - itu [CLS] token. Bertitik di sekitar tensor, kami memiliki beberapa 3 ID token — ini adalah ID yang baru kami tambahkan [MASK] token.

Membangun DataLoader

 
 
Selanjutnya, kita mendefinisikan milik kita Dataset kelas - yang kami gunakan untuk menginisialisasi tiga tensor yang dikodekan sebagai PyTorch torch.utils.data.Dataset benda.

Akhirnya, kami dataset dimuat ke PyTorch DataLoader objek — yang kami gunakan untuk memuat data ke dalam model kami selama pelatihan.

Melatih Model

 
 
Kami membutuhkan dua hal untuk pelatihan, milik kami DataLoader dan seorang model. Itu DataLoader kita punya - tapi tidak ada model.



Menginisialisasi Model

 
 
Untuk pelatihan, kita membutuhkan yang mentah (bukan yang sudah dilatih sebelumnya) BERTLMHeadModel. Untuk membuatnya, pertama-tama kita perlu membuat objek konfigurasi RoBERTa untuk mendeskripsikan parameter yang ingin kita gunakan untuk menginisialisasi FiliBERTo.

Kemudian, kami mengimpor dan menginisialisasi model RoBERTa kami dengan kepala pemodelan bahasa (LM).

Persiapan Pelatihan

 
 
Sebelum melanjutkan ke putaran pelatihan, kami perlu menyiapkan beberapa hal. Pertama, kami mengatur penggunaan GPU/CPU. Kemudian kami mengaktifkan mode pelatihan model kami — dan terakhir, menginisialisasi pengoptimal kami.

Pelatihan

 
 
Akhirnya — waktu pelatihan! Kami berlatih seperti biasanya saat berlatih melalui PyTorch.

Jika kita beralih ke Tensorboard, kita akan menemukan kerugian seiring berjalannya waktu — hal ini terlihat menjanjikan.



Kerugian / waktu — beberapa sesi pelatihan telah digabungkan dalam bagan ini

 

Ujian Sebenarnya

 
 
Sekarang saatnya untuk ujian sesungguhnya. Kami menyiapkan jalur MLM — dan meminta Laura untuk menilai hasilnya. Video reviewnya dapat Anda saksikan pada pukul 22:44 di sini:



Kami pertama kali menginisialisasi a pipeline objek, menggunakan 'fill-mask' argumen. Kemudian mulailah menguji model kita seperti ini:

“ciao bagaimana ya?” adalah jawaban yang tepat! Itu sama canggihnya dengan bahasa Italia saya — jadi, serahkan saja pada Laura.

Kita mulai dengan “Buongiorno, ayo?” - atau "hari yang indah, bagaimana kabarmu?":

Jawaban pertama, “buongiorno, chi va?” berarti “selamat siang, siapa disana?” — misalnya tidak masuk akal. Tapi, jawaban kedua kami benar!

Selanjutnya, kalimat yang sedikit lebih sulit, “ciao, merpati ci incontriamo dan pomeriggio?” - atau “hai, di mana kita akan bertemu siang ini?”:

Dan kami memberikan beberapa hasil positif lainnya:

✅ "hi, where do we see each other this afternoon?"
✅ "hi, where do we meet this afternoon?"
❌ "hi, where here we are this afternoon?"
✅ "hi, where are we meeting this afternoon?"
✅ "hi, where do we meet this afternoon?"

Akhirnya, satu kalimat lagi yang lebih sulit, “Apa yang akan kamu lakukan jika kamu berhasil melakukan sesuatu yang lain?” — atau “apa yang akan terjadi jika kita memilih hari lain?”:

Kami juga mengembalikan beberapa jawaban bagus lainnya di sini:

✅ "what would have happened if we had chosen another day?"
✅ "what would have happened if I had chosen another day?"
✅ "what would have happened if they had chosen another day?"
✅ "what would have happened if you had chosen another day?"
❌ "what would have happened if another day was chosen?"

Secara keseluruhan, sepertinya model kami lulus pengujian Laura — dan sekarang kami memiliki model bahasa Italia kompeten yang disebut FiliBERTo!

Itu saja untuk panduan pelatihan model BERT dari awal!

Kami telah membahas banyak hal, mulai dari mendapatkan dan memformat data — hingga menggunakan pemodelan bahasa untuk melatih model BERT mentah kami.

Saya harap Anda menikmati artikel ini! Jika Anda memiliki pertanyaan, beri tahu saya melalui Twitter atau di komentar di bawah. Jika Anda ingin lebih banyak konten seperti ini, saya mempostingnya Youtube juga.

Terima kasih sudah membaca!

 

Diskon 70%! Pemrosesan Bahasa Alami: NLP Dengan Transformers dengan Python

Model transformator adalah standar de facto dalam NLP modern. Mereka telah membuktikan diri sebagai yang paling ekspresif…
 

* Semua gambar adalah oleh penulis kecuali dinyatakan sebaliknya

 
Bio: James Briggs adalah seorang ilmuwan data yang mengkhususkan diri dalam pemrosesan bahasa alami dan bekerja di sektor keuangan, berbasis di London, Inggris. Dia juga seorang mentor lepas, penulis, dan pembuat konten. Anda dapat menghubungi penulis melalui email (jamescalam94@gmail.com).

Original. Diposting ulang dengan izin.

Terkait:

Sumber: https://www.kdnuggets.com/2021/08/train-bert-model-scratch.html

Stempel Waktu:

Lebih dari KDnugget