รหัสนี้เขียนใน Pytorch 0.2 เมื่อถึงเวลาที่ Pytorch เปิดตัวเวอร์ชัน 1.0 ของพวกเขามีแพ็คเกจการเรียนรู้ SEQ2Seq ที่โดดเด่นมากมายที่สร้างขึ้นบน Pytorch เช่น OpenNMT, Allennlp และอื่น ๆ คุณสามารถเรียนรู้จากซอร์สโค้ดของพวกเขา
การใช้งาน: โปรดดูที่การสอน Pytorch อย่างเป็นทางการเกี่ยวกับการแปลเครื่องที่สนใจ-RNN ยกเว้นว่าการใช้งานนี้จัดการกับอินพุตแบทช์และใช้กลไกความสนใจที่แตกต่างกันเล็กน้อย
เพื่อค้นหาความแตกต่างของสูตรระดับของการใช้งานภาพประกอบด้านล่างจะช่วยได้มาก
ภาพประกอบกลไกเวอร์ชัน Pytorch ดูที่นี่:
http://pytorch.org/tutorials/_images/decoder-network.png
Pytorch การสอนการแปลเครื่อง SEQ2SEQ:
http://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html
ภาพประกอบความสนใจของ Bahdanau ดูที่นี่:
http://images2015.cnblogs.com/blog/670089/201610/670089-20161012111504671-910168246.png
ตัวถอดรหัสความสนใจเวอร์ชัน Pytorch ป้อน "Word_embedding" เพื่อคำนวณน้ำหนักความสนใจในขณะที่ในกระดาษต้นกำเนิดมันควรจะเป็น "encoder_outputs" ในที่เก็บนี้เราใช้ตัวถอดรหัสความสนใจต้นกำเนิดตามกระดาษ
อัปเดต: เพิ่มการเข้ารหัสแบบไดนามิกและไม่จำเป็นต้องมีอินพุตที่จะเรียงลำดับตามความยาวเป็นชุด
Pytorch รองรับการดึงและกำหนดค่าเทนเซอร์ในระหว่างขั้นตอน แต่จริงๆแล้วมันช้าโดยเฉพาะอย่างยิ่งเมื่อทำงานบน GPU ในบทช่วยสอน (https://github.com/spro/practical-pytorch) ค่าความสนใจจะได้รับการกำหนดองค์ประกอบที่ชาญฉลาด มันถูกต้องอย่างแน่นอน (และใช้งานง่ายจากสูตรในกระดาษ) แต่ช้าลงใน GPU ของเรา ดังนั้นเราจึงนำเสนอรุ่นเทนเซอร์ที่ใช้งานจริงอีกครั้งและมันได้รับ การปรับปรุงความเร็วมากกว่า 10 เท่า
รหัสนี้ทำงานได้ดีในโครงการส่วนบุคคล