
Tidak lama setelah kebisingan tentang jaringan saraf BERT dari Google, yang menunjukkan hasil canggih dalam sejumlah tugas percakapan (NLP) dalam pembelajaran mesin, saat OpenAI meluncurkan pengembangan baru: GPT-2. Jaringan saraf dengan catatan jumlah parameter saat ini (1,5 miliar, dibandingkan 100-300 juta yang biasa digunakan dalam kasus-kasus seperti itu) mampu menghasilkan seluruh halaman teks yang terhubung.
Sangat baik untuk menghasilkan bahwa OpenAI menolak untuk memposting versi lengkap, takut bahwa mereka akan menggunakan jaringan saraf ini untuk membuat berita palsu, komentar dan ulasan yang tidak dapat dibedakan dari yang asli.
Namun, di OpenAI, versi yang dikurangi dari jaringan saraf GPT-2 dibagikan dengan 117 juta parameter. Kami akan meluncurkannya melalui layanan Google Colab dan bereksperimen dengannya.
Sedikit latar belakang
Bagi yang belum mengikuti perkembangan kemajuan dalam natural speech processing (NLP).
Pada musim panas 2018, OpenAI melakukan pra-pelatihan pada sejumlah besar teks jaringan saraf GPT yang dibangun di atas arsitektur Transformer. Ternyata jika Anda mengganti beberapa lapisan terakhir dan melatihnya kembali untuk tugas tertentu (pendekatan ini disebut Fine Tuning dan banyak digunakan dalam pembelajaran mesin), maka ia memecahkan rekor sebelumnya dengan segera pada berbagai tugas percakapan.
Berdasarkan perkembangan ini, pada akhir 2018, Google membuat jaringan saraf BERT -nya sendiri. Mereka secara serius meningkatkan hasilnya dengan membuat jaringan saraf dua arah, tidak seperti GPT.
Tidak ingin menyerah, pada bulan Februari 2019, OpenAI segera meningkatkan GPT-nya sebanyak 10 kali dan melatihnya pada jumlah teks yang lebih besar - pada 8 juta halaman web (total 40 GB teks). Jaringan GPT-2 yang dihasilkan saat ini adalah jaringan saraf terbesar, dengan jumlah parameter 1,5 miliar yang belum pernah terjadi sebelumnya (BERT memiliki 340 juta pada model terbesar dan 110 juta pada BERT standar).
Hasilnya, GPT-2 mampu menghasilkan seluruh halaman teks yang koheren. Dengan referensi berulang untuk nama-nama karakter dalam jalannya narasi, kutipan, referensi untuk peristiwa terkait, dan sebagainya. Saya tidak akan memberikan contoh di sini, tetapi merujuk mereka yang ingin artikel asli di blog OpenAI: Model Bahasa yang Lebih Baik dan Implikasinya atau tautan di akhir artikel.
Menghasilkan teks yang koheren dengan kualitas ini sangat mengesankan, tetapi hal yang paling menarik adalah berbeda. GPT-2 tanpa pelatihan tambahan segera menunjukkan hasil yang dekat dengan state-of-the-art pada sejumlah tugas percakapan. Saya ulangi, siapa yang merindukan pentingnya momen - tanpa pelatihan tambahan untuk tugas tertentu!
Bagaimana mereka mencapai ini? Hanya bertanya pada jaringan saraf pertanyaan yang tepat.
Arsitektur GPT-2
GPT-2 dilatih untuk memprediksi kata berikutnya dalam sebuah kalimat. Ini adalah pendekatan klasik untuk menghasilkan teks. Pada awalnya, jaringan pengulangan (RNN), khususnya, LSTM, memegang keunggulan di bidang ini. Tetapi setelah penemuan arsitektur Transformer pada musim panas 2017, secara bertahap mulai berlaku dalam tugas-tugas percakapan. Meskipun Transformer asli memiliki masalah dalam menyimpan urutan panjang (LSTM mengingat yang lebih lama), kecepatan pelatihan dan kedalaman jaringan lebih dari kompensasi untuk ini. Ngomong-ngomong, sejumlah modifikasi transformator telah muncul - dengan diperkenalkannya perulangan ( Universal Transformers ), modifikasi untuk urutan yang lebih lama ( Transformer-XL ) dan lainnya, tetapi sejauh ini hanya Transformer asli yang sedikit disetel digunakan di Google dan OpenAI.
Saya ingat bahwa BERT dari Google belajar sedikit berbeda: untuk memprediksi bukan kata berikutnya dalam sebuah kalimat, tetapi melewatkan (bertopeng) kata dalam sebuah kalimat. Dan juga untuk menentukan apakah dua kalimat berurutan merupakan kelanjutan logis satu sama lain, atau apakah keduanya tidak terhubung dengan makna. Ini memungkinkan BERT menjadi model bahasa yang memahami makna kata-kata tergantung pada lingkungannya (konteks). Yang menentukan keberhasilan BERT dalam tugas NPL. Tetapi hanya setelah pelatihan ulang (Fine Tuning) untuk tugas tertentu. Hanya memprediksi kata-kata dalam model dasar tidak bekerja dengan baik di dalamnya. Anda dapat bermain dengan BERT di browser Anda (melalui Google Colab): https://habr.com/en/post/436878 .
GPT-2 tidak perlu dilatih ulang. Ini bukan hanya model bahasa seperti BERT, itu adalah generator teks. Beri saja dia awal frasa, dan kemudian dia akan melengkapi kata demi katanya.
Detail yang menarik: Penelitian OpenAI menunjukkan bahwa array teks Wikipedia dan buku sastra (yang dipelajari oleh BERT) memiliki gaya yang bias. Oleh karena itu, hanya dilatih pada mereka jaringan saraf tidak menghasilkan teks dengan baik. Untuk mendiversifikasi data input dan gaya, OpenAI menggunakan GPT-2 untuk pelatihan pada halaman web reguler yang dikumpulkan dari 8 juta situs (total 40 GB teks). Dan untuk membuang situs iklan dan spammer, mereka termasuk dalam situs sampel yang tautannya di reddit memiliki peringkat yang baik. Artinya, situs yang ditemukan pengguna hidup mengandung beberapa informasi berguna.
Pertanyaan yang benar berisi setengah dari jawabannya.
Jadi, GPT-2, berkat ukurannya yang belum pernah terjadi sebelumnya, dapat menghasilkan halaman teks yang koheren. Tetapi hal yang paling menakjubkan adalah dengan mengajukan pertanyaan yang tepat kepadanya (yaitu awal kalimat yang tepat), ia dapat menjawab berbagai pertanyaan! Hanya karena kelanjutan dari permulaan seperti itu adalah yang paling alami.
Misalnya, untuk mendapatkan jawaban atas pertanyaan "Apa itu Bumi?", Anda dapat menerapkan input jaringan saraf ini pada awal frasa: "Bumi adalah ...". Dan dia akan menyelesaikan kalimat ini sampai akhir. Karena jawabannya akan menjadi kelanjutan alami dari permulaan ini.
Selain itu, dengan membentuk awal kalimat dengan cara yang benar, Anda bisa mendapatkan penjelasan untuk audiens target yang berbeda, dengan mempertimbangkan kecerdasan, usia, dan pendidikan mereka. Bayangkan frasa berkelanjutan: "Saya, sebagai seorang ilmuwan, percaya bahwa Bumi adalah ...". Atau, "Saya, sebagai pembajak tanah, mengklaim bahwa Bumi adalah ...". Atau: "Saya, sebagai guru di taman kanak-kanak, sekarang akan menjelaskan kepada Anda, anak-anak, bahwa Bumi adalah ...".
Seperti yang dapat Anda lihat, dengan membentuk pertanyaan yang tepat (awal kalimat yang benar), Anda bisa mendapatkan jawaban dari level yang sangat berbeda dan detail yang berbeda. Di satu sisi, hal serupa terjadi pada orang. Dokter harus menjelaskan kepada pasien jalannya penyakit sehingga dia mengerti. Di tingkat pasien. Jika Anda bertanya kepada anak berusia lima tahun mengapa ia melakukan ini, maka ia tidak dapat langsung menjawab (yang, tentu saja, anak-anak hidup dengan perasaan dan emosi). Tetapi untuk memberikan jawaban yang diharapkan darinya, anak itu mulai menciptakannya - untuk menghasilkan teks. Berdasarkan fakta bahwa jawabannya sesuai dengan orang tua dan bahwa setidaknya entah bagaimana sesuai dengan apa yang terjadi. Pada awalnya, seperti yang diketahui banyak orang tua, ini akan menjadi jawaban yang konyol. Tetapi dengan mendorong dan menghukum ("ceritakan lebih banyak", "jangan membuat alasan"), anak akan belajar memberikan jawaban yang terperinci dan lengkap.
Pengembangan OpenAI ini dan kemampuan jaringan GPT-2 untuk memberikan jawaban atas tugas percakapan tanpa pelatihan tambahan khusus untuk tugas tertentu, membuka dua pertanyaan menarik:
1) Dapatkah interpretabilitas jaringan saraf dicapai oleh generator teks elementer dan awal frase yang benar. Di mana jawabannya akan menjadi ekstensi alami. Misalkan, misalnya, jaringan saraf tidak menunjukkan segel dalam foto dengan angka koordinat x-y, tetapi menjelaskan posisinya dalam teks biasa. Kemudian, dalam proses klarifikasi, mengajukan pertanyaan yang tepat kepadanya, misalnya: "Saya sampai pada kesimpulan ini karena ...", secara teori Anda bisa mendapatkan penjelasan tentang bagaimana dia menemukan kucing di foto. Dan penjelasan dalam kasus ekstrem ini tidak lebih buruk dari manusia. Yang memecahkan masalah global interpretabilitas jaringan saraf.
2) Dapatkah jaringan saraf pra-terlatih pada volume besar teks bersifat universal, memiliki akal sehat dan tidak memerlukan pelatihan tambahan untuk tugas-tugas tertentu. Di sini, dipahami bahwa ketika mencoba meniru ucapan manusia (jawaban manusia atas pertanyaan), jaringan saraf pasti harus mempelajari akal sehat untuk memberikan jawaban yang sangat mirip dengan jawaban manusia. Memberi jawaban fiktif bersuku satu, pada umumnya, tidak khas untuk orang. Sebagian besar orang memberikan jawaban yang memadai dan terperinci, yang berarti jaringan harus belajar untuk melakukan hal yang sama.
Kedua pertanyaan ini tetap terbuka, tetapi langkah pertama dalam persetujuan mereka telah diambil.
Atau lebih tepatnya?
Jika Anda berdiri sekarang, lebih baik duduk. Karena inilah cara OpenAI menggunakan jaringan saraf GPT-2 mendapatkan hasilnya dalam tugas percakapan untuk domain yang berbeda:
Jawaban atas pertanyaan pada teks
Yah, itu mudah. Atau memberi makan jaringan beberapa paragraf dengan deskripsi yang termasuk di suatu tempat di tengah, misalnya, "apel ada di atas meja", dan pada akhirnya itu dikaitkan: "apel ada di ..." dan jaringan ditambahkan ke "meja". Karena mampu mengingat konteks beberapa paragraf.
Atau memberi makan jaringan sebagai frase awal beberapa contoh dari jenis "Pertanyaan: beberapa pertanyaan, Jawab: beberapa jawaban", dan pada akhirnya setelah pertanyaan sebenarnya mereka menambahkan: "Jawab:". Dan jaringan saraf menambahkan jawabannya! Sejak itu terungkap struktur dokumen pada Pertanyaan-Jawaban sebelumnya. Ini luar biasa.
Versi pendek (Ringkas) teks
Input adalah teks panjang dari beberapa paragraf atau bahkan halaman, dan jaringan saraf harus menulis konten pendek. Bagaimana Anda mendapatkan perilaku ini dari GPT-2? Tepat setelah teks mereka menambahkan "TL; DR". Dan itu saja! Ini ternyata cukup bagi GPT-2 untuk menambahkan ringkasan artikel setelah karakter-karakter ini! Karena simbol-simbol seperti itu di Internet sering menunjukkan ringkasan tulisan.
Terjemahan teks
Input GPT-2 menerima teks dalam bentuk: "hello = hello, dog = dog, wind = wind, cat = ...". Dan jaringan saraf menambahkan terjemahan kata terakhir: "cat" (dalam bahasa asli dalam bahasa Prancis). Karena itu mengungkapkan struktur dokumen dan hanya menambahkannya dengan kelanjutan paling logis. Jika rahang Anda masih belum lepas dari semua ini, maka saya punya dua berita untuk Anda, dan keduanya buruk =).
Peluncuran GPT-2 melalui Google Colab
Sayangnya, versi lengkap GPT-2 di OpenAI ditolak untuk dibagikan. Memotivasi ini dengan fakta bahwa menggunakan jaringan saraf ini akan terlalu mudah untuk menghasilkan berita dan ulasan palsu di toko. Menilai dari pernyataan mereka, diskusi tentang kelayakan meletakkan model ini akan berlanjut selama 6 bulan ke depan, setelah OpenAI mereka akan memutuskan apakah akan mengunggahnya atau tidak. Namun, untuk organisasi besar tidak sulit untuk mengulang model (tampaknya mereka melatihnya untuk 256 TPU selama beberapa hari, dan menurut perkiraan awal harganya sekitar $ 45 ribu)
Namun, mereka memposting versi GPT-2 yang berkurang dengan 117 juta parameter (daripada 1,5 miliar, seperti dalam model lengkap): https://github.com/openai/gpt-2 . Mari kita coba jalankan dan mainkan dengan model ini.
Pembaruan 9 November 2019: akhirnya, seluruh jajaran model telah ditata, termasuk 1,5 miliar. File dan instruksi untuk peluncuran telah diperbarui.
Cara termudah untuk melakukan ini adalah melalui Google Colab:
- Buka tautannya
http://colab.research.google.com/github/blade1780/bert/blob/master/Gpt-2.ipynb
- Dari menu Runtime , pilih Run All , sehingga untuk pertama kalinya semua sel memulai, unduhan model dan pustaka yang diperlukan terhubung. Setuju untuk mengatur ulang semua Runtime jika perlu. Masukkan teks setelah tampilan "Model prompt >>>" dan tekan Enter.
Perhatikan garis di awal:
model_name = '117M'
Di sini Anda dapat menentukan ukuran model GPT-2 yang akan digunakan. Model-model berikut tersedia (dapat diperbarui):
117 jt
124 jt
355M
774 jt
1558M
Di sini, 117M adalah model terkecil yang merupakan satu-satunya yang tersedia pada saat penulisan ini. OpenAI kemudian menyusun model yang terus meningkat, hingga 5 November 2019, menetapkan maksimum 1558M (dengan 1,5 miliar parameter).
Jika ada yang salah ...Pastikan GPU dan Python 3 dipilih di menu Runtime -> Change runtime type
Jika tombol hubungkan tidak aktif, klik untuk terhubung.
Atau buat semua kode secara manual:
- Buka https://colab.research.google.com
- Tekan tombol biru NEW PYTHON 3 NOTEBOOK
- Dari menu Runtime -> Change runtime type, pilih Python 3 dan GPU (yang terakhir untuk menjalankan jaringan saraf pada GPU)
- Di sel pertama, ketik:
model_name = '117M' !git clone https://github.com/openai/gpt-2 %cd gpt-2 !pip3 install -r requirements.txt !python3 download_model.py $model_name
Alih-alih 117M (terkecil), Anda dapat menentukan model menengah atau terbesar: 1558M.
Dan klik ikon Play hitam di sebelah kiri sel. Ini akan mengunduh jaringan saraf GPT-2 yang dipilih dan menginstal dependensi yang diperlukan.
Di sel kedua (Anda dapat menambahkannya melalui menu Sisipkan -> kode sel atau dengan mengarahkan mouse di bawah tengah sel saat ini, tombol tambahkan akan muncul):
!python3 src/interactive_conditional_samples.py --model_name=$model_name
Ini akan meluncurkan mode interaktif. Tunggu sampai jaringan saraf boot dan muncul jendela untuk memasukkan teks dengan tulisan "" Model prompt >>> ". Masukkan awal kalimat dan tekan Enter. Setelah beberapa saat, teks yang dihasilkan muncul di bawah judul SAMPLE.
Anda juga dapat memulai mode menghasilkan teks yang benar-benar acak. Teks akan dihasilkan tanpa henti dalam potongan kecil SAMPLE 1, SAMPLE 2, dan seterusnya, hingga Anda mengklik tombol Stop pada sel. Untuk melakukan ini, buat sel baru dengan kode:
!python3 src/generate_unconditional_samples.py --model_name=$model_name | tee samples.txt
Hasilnya akan disimpan ke file samples.txt. Itu dapat diunduh dengan perintah berikut (buat sel baru lagi dan jalankan setelah membuat teks):
from google.colab import files files.download('samples.txt')
Anda dapat mengubah parameter untuk menghasilkan teks (koefisien keacakan, dll., Lihat deskripsi dalam karya asli ):
!python3 src/generate_unconditional_samples.py --model_name=$model_name --top_k 40 --temperature 0.7 | tee samples.txt
Karena 117M adalah model yang sangat berkurang, jangan berharap keajaiban darinya (pembaruan: pada saat penulisan ini, hanya itu yang tersedia. Sekarang semuanya tersedia, termasuk 1558M terbesar asli, lihat di atas). Sebagian besar sampel yang dihasilkan akan menjadi omong kosong. Tetapi ada juga bagian yang bermakna. Teks harus dalam bahasa Inggris, sedangkan dalam bahasa lain GPT-2 belum dapat berfungsi.
Contoh teks yang dihasilkan
Sampel teks yang dihasilkan oleh model lengkap : https://blog.openai.com/better-language-models/#sample1 (di bagian atas bilah untuk 8 cerita).
Ada juga file teks besar 2,4 Mb dengan sampel yang dihasilkan secara acak: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-samples.txt
Dan satu lagi, 2,27 MB, dengan pengaturan keacakan lainnya: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-topk40-samples.txt
Referensi