ตัวอย่างนี้ฝึกอบรม RNN แบบหลายชั้น (Elman, GRU หรือ LSTM) ในงานการสร้างแบบจำลองภาษา โดยค่าเริ่มต้นสคริปต์การฝึกอบรมจะใช้ชุดข้อมูล PTB ที่มีให้ แบบจำลองที่ผ่านการฝึกอบรมนั้นสามารถใช้งานได้โดยสคริปต์สร้างเพื่อสร้างข้อความใหม่ นี่คือการพอร์ตของ pytorch/ตัวอย่าง/word_language_model ทำให้ใช้งานได้บน Floydhub
สคริปต์ main.py ยอมรับอาร์กิวเมนต์ต่อไปนี้:
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 modelด้วยข้อโต้แย้งเหล่านี้สามารถทดสอบโมเดลที่หลากหลายได้ ตัวอย่างเช่นอาร์กิวเมนต์ต่อไปนี้สร้างแบบจำลองที่ช้ากว่า แต่ดีกว่า:
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.30ความงุนงงเหล่านี้มีความเท่าเทียมกันหรือดีกว่าการทำให้เป็นมาตรฐานของระบบประสาทที่เกิดขึ้นอีก (Zaremba et al. 2014) และคล้ายกับการใช้การฝังเอาท์พุทเพื่อปรับปรุงแบบจำลองภาษา (Press & Wolf 2016 และการคาดการณ์คำศัพท์และการแยกประเภทคำ: การลดลงของรูปแบบการลดลง
เร็วๆ นี้.
นี่คือคำสั่งในการฝึกอบรมประเมินและให้บริการแบบจำลองภาษาของคุณใน Floydhub
ก่อนที่คุณจะเริ่มเข้าสู่ระบบ Floydhub ด้วยคำสั่ง Floyd Login จากนั้นจึงแยกและเริ่มโครงการ:
$ git clone https://github.com/floydhub/word-language-model.git
$ cd word-language-model
$ floyd init word-language-modelก่อนที่คุณจะเริ่มคุณจะต้องอัปโหลดชุดข้อมูล Penn TreeBank-3 เป็นชุดข้อมูล FloyDhub ตามคำแนะนำนี้: สร้างและอัปโหลดชุดข้อมูล จากนั้นคุณจะพร้อมที่จะเล่นกับโมเดลภาษาที่แตกต่างกัน
# 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 "บันทึก:
--gpu ทำงานของคุณในอินสแตนซ์ของ Floydhub GPU--env pytorch-0.2 เตรียมสภาพแวดล้อม pytorch สำหรับ Python 3--data <USERNAME>/dataset/<PENN-TB3>/<VERSION>:input ติดตั้งชุดข้อมูล PENN TREEBANK-3 ที่อัปโหลดไว้ในโฟลเดอร์ /input ภายในคอนเทนเนอร์สำหรับงานของเรา โมเดลใช้โมดูล nn.RNN (และโมดูลน้องสาว nn.GRU และ nn.LSTM ) ซึ่งจะใช้แบ็กเอนด์ cudnn โดยอัตโนมัติหากทำงานบน cuda ด้วยการติดตั้ง cudnn
ในระหว่างการฝึกอบรมหากได้รับการขัดจังหวะแป้นพิมพ์ (CTRL-C) การฝึกอบรมจะหยุดลงและรูปแบบปัจจุบันจะถูกประเมินกับชุดข้อมูลทดสอบ
คุณสามารถติดตามความคืบหน้าได้โดยใช้คำสั่งบันทึก ตัวอย่าง 2 ตัวอย่างแรกของการฝึกอบรมควรจะเสร็จสิ้นในเวลาประมาณ 5 นาทีในอินสแตนซ์ GPU และ 40 'บน CPU หนึ่ง ตัวอย่างสุดท้ายควรใช้เวลาประมาณ 30 'ในอินสแตนซ์ GPU และสูงกว่า 3 ชั่วโมงในการทำ CPU
ถึงเวลาประเมินโมเดลของเราสร้างข้อความ:
# 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 "เราได้จัดทำแบบจำลองที่ผ่านการฝึกอบรมมาแล้วให้กับคุณสำหรับ 40 ยุคที่ถึงความงุนงงที่ 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 รองรับโหมด Seving สำหรับวัตถุประสงค์การสาธิตและการทดสอบ ก่อนที่จะให้บริการโมเดลของคุณผ่าน REST API คุณต้องสร้าง floyd_requirements.txt และประกาศข้อกำหนดของขวดในนั้น หากคุณรันงานด้วย --mode serve Flag Floydhub จะเรียกใช้ไฟล์ app.py ในโครงการของคุณและแนบไปยังจุดสิ้นสุดบริการแบบไดนามิก:
floyd run --gpu --mode serve --env pytorch-0.2 --data < USERNAME > /dataset/ < PENN-TB 3> / < VERSION > :input --data < REPLACE_WITH_JOB_OUTPUT_NAME > :modelคำสั่งข้างต้นจะพิมพ์จุดสิ้นสุดบริการสำหรับงานนี้ในคอนโซลเทอร์มินัลของคุณ
จุดสิ้นสุดการบริการจะใช้เวลาสองสามนาทีในการเตรียมพร้อม เมื่อขึ้นคุณสามารถโต้ตอบกับโมเดลได้โดยส่งคำขอโพสต์ด้วยจำนวนคำและอุณหภูมิที่โมเดลจะใช้ในการสร้างข้อความ:
# 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/vk47ixT8NeYBTFeMavbWtaงานใด ๆ ที่ทำงานในโหมดการให้บริการจะยังคงอยู่จนกว่าจะถึงรันไทม์สูงสุด ดังนั้นเมื่อคุณทำการทดสอบเสร็จแล้ว อย่าลืมปิดงาน!
โปรดทราบว่าคุณสมบัตินี้อยู่ในโหมดตัวอย่างและยังไม่พร้อมการผลิต
แหล่งข้อมูลที่มีประโยชน์บางอย่างเกี่ยวกับ NLP สำหรับงานการเรียนรู้เชิงลึกและการสร้างแบบจำลองภาษา:
สำหรับคำถามใด ๆ ข้อผิดพลาด (แม้กระทั่งพิมพ์ผิด) และ/หรือการร้องขอคุณสมบัติไม่ลังเลที่จะติดต่อฉันหรือเปิดปัญหา!