Этот код написан в Pytorch 0.2. К тому времени, когда Pytorch выпустил свою версию 1.0, на Pytorch есть множество выдающихся учебных пакетов SEQ2SEQ, таких как OpenNMT, AllennLP и т. Д. Вы можете извлечь уроки из их исходного кода.
Использование: пожалуйста, обратитесь к учебному пособию с Offical Pytorch по поводу машинного перевода внимания, за исключением того, что эта реализация обрабатывает пакетные входы и что он реализует несколько иной механизм внимания.
Чтобы узнать разницу в реализации на уровне формулы, иллюстрации ниже помогут очень помогать.
Механизм версии Pytorch иллюстрация, см. Здесь:
http://pytorch.org/tutoriors/_images/decoder-network.png
Pytorch Offical Seq2seq Machine Translation Учебник:
http://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html
Бахданау иллюстрация внимания, см. Здесь:
http://images2015.cnblogs.com/blog/670089/201610/670089-20161012111504671-910168246.png
Версия Pytorch Внимание декодер FED «Word_embedding» для вычисления веса внимания, в то время как в источнике он должен быть «encoder_outputs». В этом репозитории мы внедрили декодер происхождения внимания в соответствии с бумагой
Обновление: динамический энкодер добавлен и не требует, чтобы входы были отсортированы по длине в партии.
Pytorch поддерживает элементные извлечения и присваивание тензорных значений во время процедуры, но на самом деле это медленно, особенно при запуске GPU. В учебном пособии (https://github.com/spro/practical-pytorch) значениям внимания присваиваются элементы; Это абсолютно правильно (и интуитивно понятно от формул в бумаге), но медленно на нашем графическом процессоре. Таким образом, мы повторно внедрили настоящую пакетную манипулирующую версию тензора, и она достигает более 10-кратного улучшения скорости.
Этот код хорошо работает в личных проектах.