repo นี้เป็นการดำเนินการตามรูปแบบ RNN ที่เอาใจใส่สำหรับงานการสร้างแบบจำลองภาษา
การสร้างแบบจำลองภาษานั้นทำทั้งชุดข้อมูล Penntreebank และ Wikitext-02 ไฟล์จะถูกแยกวิเคราะห์เพื่อให้ตัวอย่างการฝึกอบรมแต่ละครั้งประกอบด้วยหนึ่งประโยคจากคลังข้อมูลซึ่งเป็นเบาะไปที่ความยาวชุดสูงสุด 35 ประโยคที่ยาวกว่าจะถูกตัด สิ่งนี้ทำเพื่อจัดการความสนใจและเข้าร่วมเฉพาะคำในประโยค (ก่อนเวลา timestep t ถ้า timestep t)
A-RNN-LM (เครือข่ายประสาทที่เกิดขึ้นตามความสนใจสำหรับการสร้างแบบจำลองภาษา) ได้รับการเสนอในการสนทนาที่สอดคล้องกันกับแบบจำลองภาษาที่ใช้ความสนใจ (Hongyuan Mei et al. 2016, Link) และในรูปแบบภาษาที่เอาใจใส่ (Salton et al. 2017, Link)
แบบจำลองประกอบด้วยการใช้กลไกความสนใจแบบดั้งเดิมในสถานะที่ซ่อนอยู่ก่อนหน้าของเลเยอร์ RNN ของ Encoder เพื่อเข้ารหัสเวกเตอร์บริบทซึ่งจะรวมกับสถานะที่ซ่อนเร้นสุดท้ายที่เข้ารหัสเพื่อทำนายคำถัดไปในลำดับ
การพึ่งพา:
python=3.7torch>=1.0.0nltkmatplotlibtensorboardX ติดตั้ง depedencies ทั้งหมดและเรียกใช้ python main.py
ชุดข้อมูลจะถูกดาวน์โหลดและประมวลผลล่วงหน้าโดยอัตโนมัติ
ตัวเลือกหลายตัวเลือกสำหรับการทำงานเป็นไปได้ที่จะเรียกใช้ python main.py --help สำหรับรายการเต็ม
usage: main.py [-h] [--batch-size N] [--epochs N] [--lr LR] [--patience P]
[--seed S] [--log-interval N] [--dataset [{wiki-02,ptb}]]
[--embedding-size N] [--n-layers N] [--hidden-size N]
[--positioning-embedding N] [--input-dropout D]
[--rnn-dropout D] [--decoder-dropout D] [--clip N]
[--optim [{sgd,adam,asgd}]] [--salton-lr-schedule]
[--early-stopping-patience P] [--attention]
[--no-positional-attention] [--tie-weights]
[--file-name FILE_NAME] [--parallel]
PyTorch Attentive RNN Language Modeling
optional arguments:
-h, --help show this help message and exit
--batch-size N input batch size for training (default: 64)
--epochs N number of epochs to train (default: 40)
--lr LR learning rate (default: 30.0)
--patience P patience for lr decrease (default: 5)
--seed S random seed (default: 123)
--log-interval N how many batches to wait before logging training
status (default 10)
--dataset [{wiki-02,ptb}]
Select which dataset (default: ptb)
--embedding-size N embedding size for embedding layer (default: 20)
--n-layers N layer size for RNN encoder (default: 1)
--hidden-size N hidden size for RNN encoder (default: 20)
--positioning-embedding N
hidden size for positioning generator (default: 20)
--input-dropout D input dropout (default: 0.5)
--rnn-dropout D rnn dropout (default: 0.0)
--decoder-dropout D decoder dropout (default: 0.5)
--clip N value at which to clip the norm of gradients (default:
0.25)
--optim [{sgd,adam,asgd}]
Select which optimizer (default: sgd)
--salton-lr-schedule Enables same training schedule as Salton et al. 2017
(default: False)
--early-stopping-patience P
early stopping patience (default: 25)
--attention Enable standard attention (default: False)
--no-positional-attention
Disable positional attention (default: False)
--tie-weights Tie embedding and decoder weights (default: False)
--file-name FILE_NAME
Specific filename to save under (default: uses params
to generate)
--parallel Enable using GPUs in parallel (default: False)
| แบบอย่าง | จำนวนพารามิเตอร์ | การตรวจสอบความงุนงง | ทดสอบความงุนงง |
|---|---|---|---|
| LSTM Baseline (Merity et al., 2017) | 7.86m | 66.77 | 64.96 |
| Attentive LM (Salton et al. 2017) | 7.06m | 79.09 | 76.56 |
| LM ที่เอาใจใส่ตำแหน่ง | 6.9m | 72.69 | 70.92 |
| แบบอย่าง | จำนวนพารามิเตอร์ | การตรวจสอบความงุนงง | ทดสอบความงุนงง |
|---|---|---|---|
| LSTM Baseline (Merity et al., 2017) | 7.86m | 72.43 | 68.50 |
| Attentive LM (Salton et al. 2017) | 7.06m | 78.43 | 74.37 |
| LM ที่เอาใจใส่ตำแหน่ง | 6.9m | 74.39 | 70.73 |
คุณสามารถรันทุกรุ่นที่สร้างตารางด้านบนโดยเพียงแค่เรียกใช้:
python test.py
อย่างไรก็ตามโปรดทราบว่ารุ่นเหล่านี้บางรุ่นใช้เวลาสูงกว่า 8 ชั่วโมงเพื่อมาบรรจบกันใน 1080 GPU เดียวดังนั้นเวลาทำงานทั้งหมดของการทดลองอาจประมาณ 2 วัน
การสนับสนุนหลาย GPU ถูกปิดใช้งานโดยค่าเริ่มต้นเนื่องจากแสดงให้เห็นว่ามีผลกระทบเชิงลบต่อผลลัพธ์ ยิ่งไปกว่านั้นเนื่องจากแบทช์มีขนาดเล็กในทางปฏิบัติมันไม่ได้เร็วกว่านี้มากนักเนื่องจากใช้เวลาจำนวนมากในการส่งเทนเซอร์ไปยัง GPU ที่เกี่ยวข้อง
นี่คือการแสดงเคียงข้างกันของการแจกแจงความสนใจทั้งสองในตัวอย่าง:
คำในแกน x เป็นอินพุตในแต่ละขั้นตอนและคำในแกน y เป็นเป้าหมาย ทั้งสองรุ่นได้รับการฝึกฝนในชุดข้อมูล Wikitext-02 จนกระทั่งการบรรจบกัน