download.sh เท่านั้น) ขั้นแรกเตรียมข้อมูล Donwload Squad Data and Glove และ NLTK Corpus (~ 850 MB สิ่งนี้จะดาวน์โหลดไฟล์ไปยัง $HOME/data ):
chmod +x download.sh; ./download.sh
ประการที่สองชุดข้อมูล QA ของ Stanford Preprocess (พร้อมกับเวกเตอร์ถุงมือ) และบันทึกไว้ใน $PWD/data/squad (~ 5 นาที):
python -m squad.prepro
โมเดลมีพารามิเตอร์ ~ 2.5 ม. แบบจำลองได้รับการฝึกฝนกับ Nvidia Titan X (Pascal Architecture, 2016) แบบจำลองต้องใช้ RAM GPU อย่างน้อย 12GB หาก GPU RAM ของคุณมีขนาดเล็กกว่า 12GB คุณสามารถลดขนาดแบทช์ (ประสิทธิภาพอาจลดลง) หรือคุณสามารถใช้ Multi GPU (ดูด้านล่าง) การฝึกอบรมมาบรรจบกันที่ขั้นตอน ~ 18K และใช้เวลา ~ 4S ต่อขั้นตอน (เช่น ~ 20 ชั่วโมง)
ก่อนการฝึกอบรมขอแนะนำให้ลองใช้รหัสต่อไปนี้ก่อนเพื่อตรวจสอบว่าทุกอย่างโอเคและหน่วยความจำก็เพียงพอแล้ว:
python -m basic.cli --mode train --noload --debug
จากนั้นฝึกซ้อมอย่างเต็มที่วิ่ง:
python -m basic.cli --mode train --noload
คุณสามารถเร่งกระบวนการฝึกอบรมด้วยการเพิ่มประสิทธิภาพธง:
python -m basic.cli --mode train --noload --len_opt --cluster
คุณยังสามารถละเว้นได้ แต่การฝึกอบรมจะช้าลงมาก
โปรดทราบว่าในระหว่างการฝึกอบรมคะแนน EM และ F1 จากการประเมินเป็นครั้งคราวไม่เหมือนกันกับคะแนนจากสคริปต์การประเมินทีมอย่างเป็นทางการ คะแนนที่พิมพ์ออกมานั้นไม่เป็นทางการ (รูปแบบการให้คะแนนของเรานั้นรุนแรงขึ้นเล็กน้อย) ในการรับหมายเลขอย่างเป็นทางการให้ใช้ผู้ประเมินอย่างเป็นทางการ (คัดลอกในโฟลเดอร์ squad , squad/evaluate-v1.1.py ) สำหรับข้อมูลเพิ่มเติมดูที่ 3. การทดสอบ
ในการทดสอบ Run:
python -m basic.cli
ในทำนองเดียวกันกับการฝึกอบรมคุณสามารถให้ธงการเพิ่มประสิทธิภาพเพื่อเพิ่มความเร็วในการทดสอบ (5 นาทีสำหรับข้อมูล dev):
python -m basic.cli --len_opt --cluster
คำสั่งนี้โหลดโมเดลที่บันทึกไว้ล่าสุดระหว่างการฝึกอบรมและเริ่มทดสอบข้อมูลทดสอบ หลังจากกระบวนการสิ้นสุดลงจะพิมพ์คะแนน F1 และ EM และส่งออกไฟล์ JSON ( $PWD/out/basic/00/answer/test-####.json โดยที่ #### เป็นขั้นตอน#ที่บันทึกโมเดล) โปรดทราบว่าคะแนนที่พิมพ์ไม่เป็นทางการ (รูปแบบการให้คะแนนของเรานั้นค่อนข้างรุนแรงขึ้น) หากต้องการรับหมายเลขอย่างเป็นทางการให้ใช้ผู้ประเมินอย่างเป็นทางการ (คัดลอกในโฟลเดอร์ squad ) และไฟล์ output JSON:
python squad/evaluate-v1.1.py $HOME/data/squad/dev-v1.1.json out/basic/00/answer/test-####.json
แทนที่จะฝึกอบรมแบบจำลองด้วยตัวคุณเองคุณสามารถเลือกใช้น้ำหนักที่ได้รับการฝึกอบรมมาก่อนที่ใช้สำหรับการส่งบอร์ดลีดเดอร์บอร์ด อ้างถึงแผ่นงานนี้ใน codalab เพื่อทำซ้ำผลลัพธ์ หากคุณไม่คุ้นเคยกับ codalab ให้ทำตามขั้นตอนง่าย ๆ เหล่านี้ (เนื่องจากคุณได้พบกับ preereq ทั้งหมดด้านบน):
save.zip จากแผ่นงานและคลายซิปในไดเรกทอรีปัจจุบันglove.6B.100d.txt จากโฟลเดอร์ Glove Data ของคุณ ( $HOME/data/glove/ ) ไปยังไดเรกทอรีปัจจุบัน basic/run_single.sh $HOME/data/squad/dev-v1.1.json single.json
สิ่งนี้เขียนคำตอบของ single.json ในไดเรกทอรีปัจจุบัน จากนั้นคุณสามารถใช้ผู้ประเมินอย่างเป็นทางการเพื่อรับคะแนน EM และ F1 หากคุณต้องการทำงานบน GPU (~ 5 นาที) ให้เปลี่ยนค่าของธง batch_size ในไฟล์เชลล์เป็นจำนวนที่สูงขึ้น (60 สำหรับ 12GB GPU RAM) 4. ในทำนองเดียวกันเพื่อทำซ้ำวิธีการทั้งหมด:
basic/run_ensemble.sh $HOME/data/squad/dev-v1.1.json ensemble.json
หากคุณต้องการทำงานบน GPU คุณควรเรียกใช้สคริปต์ตามลำดับโดยการลบ '&' ใน Forloop หรือคุณจะต้องระบุ GPU ที่แตกต่างกันสำหรับการวิ่งแต่ละครั้ง
หมายเหตุคะแนนเหล่านี้มาจากผู้ประเมินอย่างเป็นทางการ (คัดลอกในโฟลเดอร์ squad , squad/evaluate-v1.1.py ) สำหรับข้อมูลเพิ่มเติมดูที่ 3. การทดสอบ คะแนนที่ปรากฏในระหว่างการฝึกอบรมอาจต่ำกว่าคะแนนจากผู้ประเมินอย่างเป็นทางการ
| em (%) | F1 (%) | |
|---|---|---|
| เดี่ยว | 67.7 | 77.3 |
| วงดนตรี | 72.6 | 80.7 |
| em (%) | F1 (%) | |
|---|---|---|
| เดี่ยว | 68.0 | 77.3 |
| วงดนตรี | 73.3 | 81.1 |
อ้างถึงบทความของเราสำหรับรายละเอียดเพิ่มเติม ดูกระดานผู้นำทีมเพื่อเปรียบเทียบกับรุ่นอื่น ๆ
โมเดลของเรารองรับการฝึกอบรมหลาย GPU เราทำตามกระบวนทัศน์แบบขนานที่อธิบายไว้ในบทช่วยสอน tensorflow ในระยะสั้นหากคุณต้องการใช้ขนาดแบทช์ 60 (ค่าเริ่มต้น) แต่ถ้าคุณมี 3 GPUs กับ RAM 4GB คุณจะเริ่มต้น GPU แต่ละตัวด้วยขนาดแบทช์ 20 และรวมการไล่ระดับสีใน CPU สิ่งนี้สามารถทำได้ง่ายโดยการวิ่ง:
python -m basic.cli --mode train --noload --num_gpus 3 --batch_size 20
ในทำนองเดียวกันคุณสามารถเร่งการทดสอบของคุณโดย:
python -m basic.cli --num_gpus 3 --batch_size 20
สำหรับตอนนี้โปรดดูสาขา demo ของที่เก็บนี้