Contoh ini melatih RNN multi-lapisan (Elman, Gru, atau LSTM) pada tugas pemodelan bahasa. Secara default, skrip pelatihan menggunakan dataset PTB, yang disediakan. Model yang terlatih kemudian dapat digunakan oleh skrip menghasilkan untuk menghasilkan teks baru. Ini adalah porting Pytorch/Contoh/Word_Language_Model membuatnya digunakan di floydhub.
Script main.py menerima argumen berikut:
optional arguments:
-h, --help show this help message and exit
--data DATA location of the data corpus
--model MODEL type of recurrent net (RNN_TANH, RNN_RELU, LSTM, GRU)
--emsize EMSIZE size of word embeddings
--nhid NHID number of hidden units per layer
--nlayers NLAYERS number of layers
--lr LR initial learning rate
--clip CLIP gradient clipping
--epochs EPOCHS upper epoch limit
--batch-size N batch size
--bptt BPTT sequence length
--dropout DROPOUT dropout applied to layers (0 = no dropout)
--decay DECAY learning rate decay per epoch
--tied tie the word embedding and softmax weights
--seed SEED random seed
--cuda use CUDA
--log-interval N report interval
--save SAVE path to save the final modelDengan argumen ini, berbagai model dapat diuji. Sebagai contoh, argumen berikut menghasilkan model yang lebih lambat tetapi lebih baik:
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 # Test perplexity of 80.97
python main.py --cuda --emsize 650 --nhid 650 --dropout 0.5 --epochs 40 --tied # Test perplexity of 75.96
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 # Test perplexity of 77.42
python main.py --cuda --emsize 1500 --nhid 1500 --dropout 0.65 --epochs 40 --tied # Test perplexity of 72.30Kebingungan ini sama atau lebih baik daripada regularisasi jaringan saraf berulang (Zaremba et al. 2014) dan mirip dengan menggunakan output embedding untuk meningkatkan model bahasa (Press & Wolf 2016 dan mengikat vektor kata dan pengklasifikasi kata: drop -lepas losing dengan pemodelan bahasa (Inan et al. 2016), meskipun kedua makalah ini telah membaik.
Segera.
Inilah perintah untuk melatih, mengevaluasi dan melayani tugas pemodelan bahasa Anda di Floydhub.
Sebelum Anda mulai, masuk pada FloyDhub dengan perintah login Floyd, lalu garpu dan init proyek:
$ git clone https://github.com/floydhub/word-language-model.git
$ cd word-language-model
$ floyd init word-language-modelSebelum Anda mulai, Anda perlu mengunggah dataset Penn Treebank-3 sebagai dataset FloyDhub mengikuti panduan ini: Buat dan unggah dataset. Maka Anda akan siap bermain dengan model bahasa yang berbeda.
# Train a LSTM on PTB with CUDA, reaching perplexity of 114.22
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --epochs 7 "
# Train a tied LSTM on PTB with CUDA, reaching perplexity of 110.44
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --epochs 7 --tied "
# Train a tied LSTM on PTB with CUDA for 40 epochs, reaching perplexity of 87.17
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input " python main.py --cuda --tied "Catatan:
--gpu Jalankan pekerjaan Anda pada instance GPU Floydhub.--env pytorch-0.2 Mempersiapkan lingkungan Pytorch untuk Python 3.--data <USERNAME>/dataset/<PENN-TB3>/<VERSION>:input memasang dataset Penn Treebank-3 yang diunggah Previus di folder /input di dalam wadah untuk pekerjaan kami. Model ini menggunakan modul nn.RNN (dan modul saudaranya nn.GRU dan nn.LSTM ) yang secara otomatis akan menggunakan backend cudnn jika dijalankan pada cuda dengan cudnn terpasang.
Selama pelatihan, jika interupsi keyboard (CTRL-C) diterima, pelatihan dihentikan dan model saat ini dievaluasi terhadap dataset uji.
Anda dapat mengikuti kemajuan dengan menggunakan perintah logs. 2 contoh pertama pelatihan harus diselesaikan dalam waktu sekitar 5 menit pada instance GPU dan 40 'pada CPU. Contoh terakhir harus memakan waktu sekitar 30 'pada instance GPU dan di atas 3 jam pada Instasi CPU.
Saatnya mengevaluasi model kami menghasilkan beberapa teks:
# Generate samples from the trained LSTM model.
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model " python generate.py --cuda "Kami telah memberikan kepada Anda model pra-terlatih yang dilatih untuk 40 zaman yang mencapai kebingungan 87.17:
# Generate samples from the trained LSTM model.
floyd run --gpu --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :model " python generate.py --cuda " Floydhub mendukung mode tujuh untuk tujuan demo dan pengujian. Sebelum melayani model Anda melalui REST API, Anda perlu membuat floyd_requirements.txt dan menyatakan persyaratan Flask di dalamnya. Jika Anda menjalankan pekerjaan dengan bendera --mode serve , FloyDhub akan menjalankan file app.py di proyek Anda dan melampirkannya ke titik akhir layanan dinamis:
floyd run --gpu --mode serve --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :modelPerintah di atas akan mencetak titik akhir layanan untuk pekerjaan ini di konsol terminal Anda.
Titik akhir layanan akan memakan waktu beberapa menit untuk menjadi siap. Setelah selesai, Anda dapat berinteraksi dengan model dengan mengirim permintaan pos dengan jumlah kata dan suhu yang akan digunakan model untuk menghasilkan teks:
# Template
# curl -X POST -o <NAME_&_PATH_DOWNLOADED_GENERATED_TEXT> -F "words=<NUMBER_OF_WORDS_TO_GENERATE>" -F "temperature=<TEMPERATURE>" <SERVICE_ENDPOINT>
curl -X POST -o generated.txt -F " words=100 " -F " temperature=3 " https://www.floydlabs.com/expose/vk47ixT8NeYBTFeMavbWtaPekerjaan apa pun yang berjalan dalam mode porsi akan tetap ada sampai mencapai runtime maksimum. Jadi begitu Anda selesai menguji, ingatlah untuk menutup pekerjaan!
Perhatikan bahwa fitur ini dalam mode pratinjau dan belum siap produksi
Beberapa sumber daya yang berguna di NLP untuk pembelajaran mendalam dan tugas pemodelan bahasa:
Untuk pertanyaan apa pun, bug (bahkan kesalahan ketik) dan/atau permintaan fitur jangan ragu untuk menghubungi saya atau membuka masalah!