Dieser Code ist in Pytorch 0.2 geschrieben. Bis die Pytorch ihre 1.0 -Version veröffentlicht hat, gibt es viele hervorragende SEQ2SEQ -Lernpakete, die auf Pytorch basieren, z.
Verwendung: Bitte beziehen Sie sich auf das Offical Pytorch-Tutorial zur maschinellen Übersetzung von Aufmerksamkeits-RNN, außer dass diese Implementierung angegebene Eingänge behandelt und einen etwas anderen Aufmerksamkeitsmechanismus implementiert.
Um den Unterschied der Implementierung auf Formelebene zu finden, helfen die folgenden Abbildungen sehr.
Pytorch -Versionsmechanismus Illustration, siehe hier:
http://pytorch.org/tutorials/_images/decoder-network.png
Pytorch Offical SEQ2SEQ Machine Translation Tutorial:
http://pytorch.org/tutorials/intermediate/seq2seq_translation_tutorial.html
Bahdanau Achtung Illustration, siehe hier:
http://images2015.cnblogs.com/blog/670089/201610/670089-20161012111504671-910168246.png
Pytorch -Version Aufmerksamkeit Decodierer "Word_Embedding", um Aufmerksamkeitsgewichte zu berechnen, während es im Ursprungspapier "ccoder_outputs" sein soll. In diesem Repository haben wir den Aufmerksamkeitsdecoder der Herkunft gemäß dem Papier implementiert
UPDATE: Dynamischer Encoder wurde hinzugefügt und erfordert keine Eingänge, die in einer Stapel nach Länge sortiert werden müssen.
Pytorch unterstützt das Element, das das Abrufen und Zuweisen von Tensorwerten während des Prozesses zuweist, aber tatsächlich ist es langsam, insbesondere beim Laufen auf GPU. In einem Tutorial (https://github.com/pro/practical-pytorch) werden die Aufmerksamkeitswerte Elemente zugewiesen. Es ist absolut richtig (und intuitiv von Formeln in Papier), aber langsam an unserer GPU. Somit haben wir eine echte, stapelte Tensor-Manipulationsversion erneut implementiert und mehr als 10-fache Geschwindigkeitsverbesserung erzielt.
Dieser Code funktioniert gut bei persönlichen Projekten.