Kode ini ditulis dalam Pytorch 0.2. Pada saat Pytorch telah merilis versi 1.0 mereka, ada banyak paket pembelajaran SEQ2SEQ yang luar biasa yang dibangun di Pytorch, seperti OpenNMT, Allennlp dan dll. Anda dapat belajar dari kode sumbernya.
Penggunaan: Silakan merujuk ke tutorial Pytorch offical tentang penerjemahan mesin perhatian-RNN, kecuali bahwa implementasi ini menangani input batch, dan mengimplementasikan mekanisme perhatian yang sedikit berbeda.
Untuk mengetahui perbedaan implementasi tingkat rumus, ilustrasi di bawah ini akan sangat membantu.
Ilustrasi Mekanisme Versi Pytorch, lihat di sini:
http://pytorch.org/tutorials/_images/decoder-network.png
Tutorial Terjemahan Mesin Pytorch Offical Seq2seq:
http://pytorch.org/tutorials/interiate/seq2seq_translation_tutorial.html
Ilustrasi perhatian Bahdanau, lihat di sini:
http://images2015.cnblogs.com/blog/670089/201610/670089-2016101211504671-910168246.png
Versi Pytorch Perhatian Perhatian Decoder Fed "Word_embedding" untuk menghitung bobot perhatian, sedangkan di kertas asal seharusnya "encoder_outputs". Di repositori ini, kami menerapkan decoder perhatian asal menurut kertas
UPDATE: Encoder dinamis ditambahkan dan tidak memerlukan input untuk diurutkan berdasarkan panjang dalam batch.
Pytorch mendukung pengambilan elemen-bijaksana dan menetapkan nilai tensor selama prosedur, tetapi sebenarnya lambat terutama ketika berjalan pada GPU. Dalam tutorial (https://github.com/spro/practical-pytorch), nilai-nilai perhatian ditetapkan oleh elemen-wise; Ini benar -benar benar (dan intuitif dari rumus dalam kertas), tetapi lambat pada GPU kami. Dengan demikian, kami mengimplementasikan kembali versi manipulasi tensor yang nyata, dan mencapai lebih dari 10x peningkatan kecepatan.
Kode ini berfungsi dengan baik pada proyek pribadi.