การใช้ TensorFlow ของ QANET ของ Google (ก่อนหน้านี้ความเข้าใจอย่างรวดเร็วการอ่าน (FRC)) จาก ICLR2018 (หมายเหตุ: นี่ไม่ใช่การดำเนินการอย่างเป็นทางการจากผู้เขียนบทความ)
ฉันเขียนโพสต์บล็อกเกี่ยวกับการใช้งาน QAnet ตรวจสอบข้อมูลเพิ่มเติมที่นี่!
การฝึกอบรมและการประมวลผลล่วงหน้าได้รับการรับรองจาก R-NET โดย Hkust-KnowComp โหมดสาธิตใช้งานได้ หลังจากการฝึกอบรมเพียงใช้ python config.py --mode demo เพื่อเรียกใช้เซิร์ฟเวอร์ตัวอย่างแบบโต้ตอบ
เนื่องจากปัญหาหน่วยความจำจึงใช้ความสนใจของหัวดอทเดี่ยวเมื่อเทียบกับความสนใจหลายหัว 8 หัวเช่นในกระดาษต้นฉบับ ขนาดที่ซ่อนอยู่จะลดลงเหลือ 96 จาก 128 เนื่องจากการใช้งานของ GTX1080 เมื่อเทียบกับ P100 ที่ใช้ในกระดาษ (หน่วยความจำ GPU 8GB ไม่เพียงพอหากคุณมีหน่วยความจำ GPU 12GB โปรดแบ่งปันผลการฝึกอบรมของคุณกับเรา)
ปัจจุบันรุ่นที่ดีที่สุดถึง EM/F1 = 70.8/80.1 ในขั้นตอน 60K (6 ~ 8 ชั่วโมง) ผลลัพธ์โดยละเอียดมีการระบุไว้ด้านล่าง

ชุดข้อมูลที่ใช้สำหรับงานนี้คือชุดข้อมูลตอบคำถามของ Stanford ถุงมือที่ได้รับการฝังตัวที่ได้จากการรวบรวมข้อมูลทั่วไปด้วยโทเค็น 840B ที่ใช้สำหรับคำ
ในการดาวน์โหลดและประมวลผลข้อมูลล่วงหน้า Run
# download SQuAD and Glove
sh download.sh
# preprocess the data
python config.py --mode preproเช่นเดียวกับ R-NET โดย HKUST-KNOWCOMP พารามิเตอร์ไฮเปอร์จะถูกเก็บไว้ใน config.py ในการดีบัก/รถไฟ/ทดสอบ/สาธิตวิ่ง
python config.py --mode debug/train/test/demoเพื่อประเมินโมเดลด้วยรหัสอย่างเป็นทางการ Run
python evaluate-v1.1.py ~ /data/squad/dev-v1.1.json train/{model_name}/answer/answer.json ไดเรกทอรีเริ่มต้นสำหรับไฟล์บันทึก tensorboard คือ train/{model_name}/event
ในการสร้างอิมเมจนักเทียบท่า (ต้องใช้ nvidia-docker) ให้เรียกใช้
nvidia-docker build -t tensorflow/qanet .
ตั้งค่าเส้นทางการติดตั้งระดับเสียงและการแมปพอร์ต (สำหรับโหมดตัวอย่าง)
export QANETPATH={/path/to/cloned/QANet}
export CONTAINERWORKDIR=/home/QANet
export HOSTPORT=8080
export CONTAINERPORT=8080
ทุบตีเข้าไปในภาชนะ
nvidia-docker run -v $QANETPATH:$CONTAINERWORKDIR -p $HOSTPORT:$CONTAINERPORT -it --rm tensorflow/qanet bash
เมื่ออยู่ในคอนเทนเนอร์ให้ทำตามคำสั่งที่ให้ไว้ข้างต้นโดยเริ่มจากการดาวน์โหลดชุดข้อมูล Squad and Glove
น้ำหนักของแบบจำลองที่ผ่านการฝึกอบรมนั้นไม่สามารถใช้งานได้ชั่วคราว
นี่คือผลลัพธ์ที่รวบรวมได้จากที่เก็บนี้และกระดาษต้นฉบับ
| แบบอย่าง | ขั้นตอนการฝึกอบรม | ขนาด | หัวความสนใจ | ขนาดข้อมูล (ส.ค. ) | em | F1 |
|---|---|---|---|---|---|---|
| แบบจำลองของฉัน | 35,000 | 96 | 1 | 87K (ไม่สิงหาคม) | 69.0 | 78.6 |
| แบบจำลองของฉัน | 60,000 | 96 | 1 | 87K (ไม่สิงหาคม) | 70.4 | 79.6 |
| โมเดลของฉัน (รายงานโดย @jasonbw) | 60,000 | 128 | 1 | 87K (ไม่สิงหาคม) | 70.7 | 79.8 |
| โมเดลของฉัน (รายงานโดย @chesterkuo) | 60,000 | 128 | 8 | 87K (ไม่สิงหาคม) | 70.8 | 80.1 |
| กระดาษต้นฉบับ | 35,000 | 128 | 8 | 87K (ไม่สิงหาคม) | นา | 77.0 |
| กระดาษต้นฉบับ | 150,000 | 128 | 8 | 87K (ไม่สิงหาคม) | 73.6 | 82.7 |
| กระดาษต้นฉบับ | 340,000 | 128 | 8 | 240k (ส.ค. ) | 75.1 | 83.8 |
เรียกใช้ Tensorboard เพื่อสร้างภาพข้อมูล
$ tensorboard --logdir=./