هذا الرمز مكتوب في Pytorch 0.2. بحلول الوقت الذي أصدر فيه Pytorch إصداره 1.0 ، هناك الكثير من حزم التعلم SEQ2Seq المعلقة المبنية على Pytorch ، مثل OpenNMT و Allennlp وما إلى ذلك ، يمكنك التعلم من رمز المصدر الخاص بهم.
الاستخدام: يرجى الرجوع إلى برنامج Pytorch Offical Pytorch حول الترجمة الآلية RNN الانتباه ، باستثناء أن هذا التنفيذ يتعامل مع مدخلات مزدوجة ، وأنه ينفذ آلية انتباه مختلفة قليلاً.
لمعرفة الفرق على مستوى الصيغة ، ستساعد الرسوم التوضيحية أدناه كثيرًا.
توضيح آلية إصدار Pytorch ، انظر هنا:
http://pytorch.org/tutorials/_images/decoder-network.png
Pytorch Offical SEQ2SEQ Machine Translation Transorial:
http://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html
توضيح انتباه بهداناو ، انظر هنا:
http://images2015.cnblogs.com/blog/670089/201610/670089-20161012111504671-910168246.png
إصدار Pytorch انتباه وحدة فك ترميز الانتباه "word_embedding" لحساب أوزان الانتباه ، بينما من المفترض أن تكون في ورقة الأصل "encoder_outputs". في هذا المستودع ، قمنا بتنفيذ وحدة فك ترميز انتباه الأصل وفقًا للورقة
تحديث: تمت إضافة التشفير الديناميكي ولا يتطلب فرز المدخلات حسب الطول في دفعة.
يدعم Pytorch جلب العنصر وتعيين قيم الموتر أثناء الإجراء ، ولكن في الواقع يكون بطيئًا خاصة عند التشغيل على GPU. في برنامج تعليمي (https://github.com/spro/practical-pytorch) ، يتم تعيين قيم الانتباه عن العنصر ؛ إنه صحيح تمامًا (وبديهية من الصيغ في الورق) ، ولكنه بطيء على وحدة معالجة الرسومات لدينا. وهكذا ، قمنا بإعادة تنفيذ نسخة معالجة متوسطة مجمعة حقيقية ، وهي تحقق أكثر من 10 أضعاف تحسين السرعة.
هذا الرمز يعمل بشكل جيد على المشاريع الشخصية.