
Paket Python sederhana yang membungkus fine-tuning model yang ada dan skrip generasi untuk model pembuatan teks GPT-2 Openai (khususnya versi hiperparameter 355m "kecil" dan "medium"). Selain itu, paket ini memungkinkan pembuatan teks yang lebih mudah, menghasilkan ke file untuk kurasi yang mudah, memungkinkan awalan untuk memaksa teks dimulai dengan frasa yang diberikan.
Paket ini menggabungkan dan membuat perubahan tingkat rendah minimal ke:
Untuk finetuning, sangat disarankan untuk menggunakan GPU, meskipun Anda dapat menghasilkan menggunakan CPU (meskipun jauh lebih lambat). Jika Anda berlatih di cloud, menggunakan notebook colaboratory atau Google Compute Engine VM dengan TensorFlow Inteed Learning Image sangat disarankan. (Sebagai model GPT-2 di-host di GCP)
Anda dapat menggunakan GPT-2-Simple untuk melatih kembali model menggunakan GPU secara gratis di notebook colaboratory ini, yang juga demo fitur tambahan dari paket.
Catatan: Pengembangan GPT-2-Simple sebagian besar telah digantikan oleh AITEXTGEN, yang memiliki kemampuan pembuatan teks AI yang serupa dengan waktu pelatihan dan penggunaan sumber daya yang lebih efisien. Jika Anda tidak memerlukan menggunakan TensorFlow, saya sarankan menggunakan AITEXTGEN sebagai gantinya. Pos pemeriksaan yang dilatih menggunakan GPT-2-Simple dapat dimuat menggunakan AITEXTGEN juga.
GPT-2-Simple dapat dipasang melalui PYPI:
pip3 install gpt-2-simple Anda juga perlu menginstal versi TensorFlow 2.x yang sesuai (Min 2.5.1) untuk sistem Anda (misalnya tensorflow atau tensorflow-gpu ).
Contoh untuk mengunduh model ke sistem lokal, finetuning pada dataset. dan menghasilkan beberapa teks.
PERINGATAN: Model 124m pretrained, dan dengan demikian model apa pun, adalah 500 MB! (Model 355m pretrained adalah 1,5 GB)
import gpt_2_simple as gpt2
import os
import requests
model_name = "124M"
if not os . path . isdir ( os . path . join ( "models" , model_name )):
print ( f"Downloading { model_name } model..." )
gpt2 . download_gpt2 ( model_name = model_name ) # model is saved into current directory under /models/124M/
file_name = "shakespeare.txt"
if not os . path . isfile ( file_name ):
url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
data = requests . get ( url )
with open ( file_name , 'w' ) as f :
f . write ( data . text )
sess = gpt2 . start_tf_sess ()
gpt2 . finetune ( sess ,
file_name ,
model_name = model_name ,
steps = 1000 ) # steps is max number of training steps
gpt2 . generate ( sess ) Pos pemeriksaan model yang dihasilkan secara default di /checkpoint/run1 . Jika Anda ingin memuat model dari folder itu dan menghasilkan teks darinya:
import gpt_2_simple as gpt2
sess = gpt2 . start_tf_sess ()
gpt2 . load_gpt2 ( sess )
gpt2 . generate ( sess ) Seperti halnya TextGenRnn, Anda dapat menghasilkan dan menyimpan teks untuk digunakan nanti (misalnya API atau bot) dengan menggunakan parameter return_as_list .
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text ) Anda dapat melewati parameter run_name ke finetune dan load_gpt2 jika Anda ingin menyimpan/memuat beberapa model di folder checkpoint .
Ada juga antarmuka baris perintah untuk finetuning dan generasi dengan default yang kuat untuk hanya berjalan di Cloud VM w/ GPU. Untuk finetuning (yang juga akan mengunduh model jika tidak ada):
gpt_2_simple finetune shakespeare.txt Dan untuk pembuatan, yang menghasilkan teks ke file dalam folder gen :
gpt_2_simple generateSebagian besar parameter yang sama tersedia dalam fungsi tersedia sebagai argumen CLI, misalnya:
gpt_2_simple generate --temperature 1.0 --nsamples 20 --batch_size 20 --length 50 --prefix " <|startoftext|> " --truncate " <|endoftext|> " --include_prefix False --nfiles 5Lihat di bawah untuk melihat apa yang dilakukan beberapa argumen CLI.
NB: Mulai ulang sesi Python terlebih dahulu jika Anda ingin finetune pada dataset lain atau memuat model lain.
Metode yang digunakan GPT-2 untuk menghasilkan teks sedikit berbeda dari yang seperti paket lain seperti TextGenRnn (khususnya, menghasilkan urutan teks lengkap murni dalam GPU dan decoding nanti), yang tidak dapat dengan mudah diperbaiki tanpa meretas kode model yang mendasarinya. Sebagai akibat:
truncate ke fungsi generate hanya mengumpulkan teks sampai token ujung yang ditentukan. Anda mungkin ingin mengurangi length dengan tepat.)prefix yang menargetkan urutan token awal, dan truncate yang menargetkan urutan token akhir. Anda juga dapat menetapkan include_prefix=False untuk membuang token awalan saat menghasilkan (misalnya jika itu sesuatu yang tidak diinginkan seperti <|startoftext|> )..csv file ke finetune() , itu akan secara otomatis menguraikan CSV ke dalam format yang ideal untuk pelatihan dengan GPT-2 (termasuk prepending <|startoftext|> dan sufiks <|endoftext|> ke setiap dokumen teks, sehingga trik truncate di atas sangat membantu ketika menghasilkan output). Ini diperlukan untuk menangani kedua kutipan dan baru di setiap dokumen teks dengan benar.batch_size yang dapat dibagi menjadi nsamples , menghasilkan generasi yang jauh lebih cepat. Bekerja sangat baik dengan GPU (dapat mengatur batch_size hingga 20 di K80 Colaboratory)!batch_size=1 , dan sekitar 88% dari V100 GPU.overwrite=True untuk Finetune, yang akan melanjutkan pelatihan dan menghapus iterasi model sebelumnya tanpa membuat salinan duplikat. Ini bisa sangat berguna untuk pembelajaran transfer (misalnya sangat finetune GPT-2 pada satu dataset, kemudian finetune pada dataset lain untuk mendapatkan "penggabungan" dari kedua dataset).gpt2.encode_dataset(file_path) . Outputnya adalah file .npz terkompresi yang akan memuat lebih cepat ke GPU untuk finetuning.gpt2.load_gpt2(sess, model_name='774M') dan gpt2.generate(sess, model_name='774M') .Max Woolf (@Minimaxir)
Proyek open-source Max didukung oleh Patreon-nya. Jika Anda menemukan proyek ini bermanfaat, setiap kontribusi moneter untuk Patreon dihargai dan akan digunakan secara kreatif.
Mit
Repo ini tidak memiliki afiliasi atau hubungan dengan Openai.