Zephyrnet-Logo

Sprachübersetzung mit Transformatoren in PyTorch

Datum:

Mike Wang, John Inacay, und Wiley Wang (Alle Autoren haben gleichermaßen beigetragen)

Wenn Sie Online-Übersetzungsdienste verwendet haben, haben Sie möglicherweise festgestellt, dass sich die Übersetzungsqualität in den letzten Jahren erheblich verbessert hat. Seit seiner Einführung im Jahr 2017 ist der Transformer tiefe Lernen Das Modell hat das RNN-Modell (Recurrent Neural Network) als Modell der Wahl bei Verarbeitungsaufgaben in natürlicher Sprache schnell ersetzt. Transformer-Modelle wie OpenAIs Generative Pre-Trained Transformer (GPT) und Googles BERTirectional Encoder Representations from Transformers (BERT) haben RNNs jedoch schnell als Netzwerkarchitektur der Wahl für Natural abgelöst Sprachverarbeitung (NLP). Mit der Parallelisierungsfähigkeit des Transformators und der Nutzung moderner Rechenleistung sind diese Modelle groß und entwickeln sich schnell. Generative Sprachmodelle ziehen häufig die Aufmerksamkeit der Medien auf ihre Fähigkeiten. Wenn Sie wie wir sind, relativ neu in NLP Im Allgemeinen verstehen Sie die Grundlagen des maschinellen Lernens. Dieses Tutorial kann Ihnen dabei helfen, Transformers anhand von Beispielen aus der Praxis besser zu verstehen, indem Sie einen umfassenden Deutsch-Englisch-Übersetzer erstellen.

Bei der Erstellung dieses Tutorials haben wir unsere Arbeit auf zwei Ressourcen gestützt: die Pytorch RNN-basiertes Tutorial für Sprachübersetzer und einem Implementierung des Übersetzers durch Andrew Peng. Mit einer offen verfügbaren Datenbank demonstrieren wir unsere Colab-Implementierung für die Übersetzung zwischen Deutsch und Englisch mit Pytorch und dem Transformer-Modell.

Lassen Sie uns zunächst darüber sprechen, wie Daten durch den Übersetzungsprozess fließen. Der Datenfluss folgt dem oben gezeigten Diagramm. Eine Eingabesequenz wird in einen Tensor konvertiert, in dem jeder Ausgang des Transformators dann einen nicht abgebildeten "De-Embedding" -Konvertierungsprozess von der Einbettung zur endgültigen Ausgabesequenz durchläuft. Beachten Sie, dass wir während der Inferenz nacheinander Wörter aus jedem Vorwärtsdurchlauf erhalten, anstatt eine Übersetzung des vollständigen Textes auf einmal aus einer einzelnen Inferenz zu erhalten.

Zu Beginn haben wir unsere Eingabesequenz. Zum Beispiel beginnen wir mit dem deutschen Satz „Zwei junge Personen fahren mit dem schlitten einen hügelhaften“. Die englische Übersetzung der Grundwahrheit lautet: "Zwei junge Leute fahren auf einer Rutsche einen Hügel hinunter." Im Folgenden zeigen wir, wie der Transformator verwendet wird, und geben einen Einblick in das Innenleben. Das Modell selbst erwartet den deutschen Quellensatz und was auch immer die aktuelle Übersetzung abgeleitet wurde. Der Transformer-Übersetzungsprozess führt zu einer Rückkopplungsschleife, um das folgende Wort in der Übersetzung vorherzusagen.

Für die Übersetzungsaufgabe verwenden wir den deutsch-englischen Datensatz "Multi30k" von "torchtext". Dieser Datensatz ist klein genug, um in kurzer Zeit trainiert zu werden, aber groß genug, um vernünftige Sprachbeziehungen aufzuzeigen. Es besteht aus 30 gepaarten deutschen und englischen Sätzen. Um die Berechnungseffizienz zu verbessern, wird der Datensatz der Übersetzungspaare nach Länge sortiert. Da die Länge deutscher und englischer Satzpaare erheblich variieren kann, erfolgt die Sortierung nach der kombinierten und individuellen Länge der Sätze. Schließlich werden die sortierten Paare als Stapel geladen. Bei Transformatoren werden die Eingabesequenzlängen für deutsche und englische Sätze im Paar zusammen mit ortsbezogenen Masken auf eine feste Länge aufgefüllt. Für unser Modell trainieren wir eine Eingabe deutscher Sätze, um englische Sätze auszugeben.

1. Die Messenger-Regeln für europäische Facebook-Seiten ändern sich. Folgendes müssen Sie wissen:

2. Deshalb sterben Chatbot-Geschäfte

3. Facebook erwirbt Kustomer: ein Ende für Chatbots-Unternehmen?

4. Die fünf Ps erfolgreicher Chatbots

Wir nutzen die spacig Python-Paket für die Vokabularcodierung. Die Indexierung des Wortschatzes basiert auf der Häufigkeit der Wörter, obwohl die Nummern 0 bis 3 für spezielle Token reserviert sind:

  • 0: als "Satzanfang"
  • 1: als "Ende des Satzes"
  • 2: als "unbekannte" Wörter
  • 3: als "Polsterung"

Gelegentliche Wörter, die weniger als zweimal im Datensatz vorkommen, sind mit dem gekennzeichnet Zeichen. Beachten Sie, dass innerhalb der Transformer-Struktur die Eingangscodierung, die durch Frequenzindizes erfolgt, durch die Einbettung Ebene in die tatsächliche konvertiert werden nn.Transformator Abmessungen. Beachten Sie, dass diese Einbettungszuordnung wortbasiert ist. Aus unserem Eingabesatz von 10 deutschen Wörtern erhalten wir Tensoren der Länge 10, wobei jede Position die Einbettung des Wortes ist.

Im Vergleich zu RNNs unterscheiden sich Transformatoren darin, dass sie eine Positionscodierung erfordern. RNN codiert mit seiner sequentiellen Natur die Standortinformationen auf natürliche Weise. Transformatoren verarbeiten alle Wörter parallel und erfordern daher, dass stärkere Ortsinformationen von den Eingaben codiert werden.

Wir berechnen die Positionscodierung als Funktion der Zeit. Es wird erwartet, dass diese Funktion zyklische (Sinus- und Cosinusfunktionen) und nichtzyklische Komponenten enthält. Die Intuition hier ist, dass diese Kombination es der Aufmerksamkeit ermöglicht, andere Wörter zu betrachten, die relativ zu dem verarbeiteten Wort weit entfernt sind, während sie aufgrund der zyklischen Komponente unveränderlich zur Länge der Sätze sind. Diese Informationen fügen wir dann der Worteinbettung hinzu. In unserem Fall fügen wir dies jedem Token im Satz hinzu, aber eine andere mögliche Methode ist die Verkettung jedes Wortes.

Hier betonen wir die Transformatorschichten und wie Kostenfunktionen aufgebaut sind.

Pytorchs Transformatormodul ist der Kern unserer Anwendung Taschenlampe.nn.Transformer Parameter umfassen: src, tgt, src_key_padding_mask, tgt_key_padding_mask, Memory_key_padding_mask und tgt_maske. Diese Parameter sind definiert als:

src: die Quellsequenz

tgt: die Zielsequenz. Beachten Sie, dass die Zieleingabe im Vergleich zur Übersetzungsausgabe immer um einen Zeitschritt verschoben ist

src_key_padding_mask: Ein boolescher Tensor aus der Ausgangssprache, wobei 1 das Auffüllen und 0 ein tatsächliches Wort angibt

tgt_key_padding_mask: Ein boolescher Tensor aus der Zielsprache, wobei 1 das Auffüllen anzeigt und 0 ein tatsächliches Wort anzeigt

Memory_key_padding_mask: Ein boolescher Tensor, wobei 1 das Auffüllen und 0 ein tatsächliches Wort angibt. In unserem Beispiel entspricht dies der src_key_padding_mask

tgt_maske: Eine untere Dreiecksmatrix wird verwendet, um die Zielerzeugung rekursiv zu verarbeiten, wobei 0 ein tatsächlich vorhergesagtes Wort und eine negative Unendlichkeit eine zu ignorierende Vorhersage anzeigt

Der Transformator kann einen vollständigen Satz aufnehmen, sodass ein Eingang aufgefüllt wird, der kürzer als die Eingangskapazität des Transformators ist. Die Tastenmasken ermöglichen es dem Transformer, Berechnungen effizient durchzuführen, indem Elemente nach dem Ende der Sätze ausgeschlossen werden. Wenn der Transformator nacheinander zum Sequenzieren von Anwendungen verwendet wird, ist es wichtig zu verstehen, dass die Ausgangssequenz progressiv verarbeitet wird, obwohl die Eingabesequenz gleichzeitig verarbeitet wird. Dieser sequentielle Verlauf wird von konfiguriert tgt_maske. Während des Trainings oder der Inferenz ist die Zielausgabe der Zieleingabe immer einen Schritt voraus, da jede Rekursion ein neues zusätzliches Wort erzeugt, wie in „tgt_inp, tgt_out = tgt [: - 1 ,:], tgt [1:,:]“ gezeigt. Konfiguration während des Trainings. Das tgt_maske besteht aus einer unteren Dreiecksmatrix:

Zeile für Zeile wird eine neue Position für die Zielausgabe freigeschaltet, z. B. ein neues Zielwort. Der neu angehängte Satz wird dann als Zieleingabe in dieser Rekursion zurückgemeldet.

Während wir die Übersetzung Wort für Wort für Inferenz erstellen, können wir unser Modell mit einer vollständigen Eingabe- und Ausgabesequenz gleichzeitig trainieren. Jedes Wort im vorhergesagten Satz kann mit jedem Wort im Grundwahrheitssatz verglichen werden. Da wir mit unseren Worteinbettungen ein endliches Vokabular haben, können wir die Übersetzung als Klassifizierungsaufgabe für jedes Wort behandeln. Infolgedessen trainieren wir unser Netzwerk mit dem Cross-Entropy-Verlust auf individueller Wortebene für die Übersetzungsausgabe sowohl in den RNN- als auch in den Transformer-Formulierungen der Aufgabe.

Wenn wir die eigentliche Übersetzung von Deutsch nach Englisch durchführen, wird der gesamte deutsche Satz als Quelleneingabe verwendet, aber die Zielausgabe, z. B. der englische Satz, wird wortweise übersetzt, beginnend mit und endet mit . Bei jedem Schritt wenden wir uns an der Zielausgabe an Argmax Funktion über das Vokabular, um das nächste Zielwort zu erhalten. Beachten Sie, dass die schrittweise Auswahl des Wortes mit der höchsten Wahrscheinlichkeit aus unserem Netzwerk eine Form von ist gierige Probenahme.

Das Transformer-Modell ist sehr effektiv bei der Lösung von Sequenz-zu-Sequenz-Problemen. Witzigerweise beruht seine Effektivität auf der Verarbeitung eines Satzes als Diagramm anstelle einer expliziten Sequenz. Jedes Wort an einer bestimmten Position berücksichtigt alle anderen Wörter. Der Transformer unterstützt diesen Ansatz mit dem Aufmerksamkeitsmechanismus, der Wortbeziehungen erfasst und Aufmerksamkeitsgewichte auf fokussierte Wörter anwendet. Im Gegensatz zu wiederkehrenden Neuronale NetzeDie Berechnung des Transformatormoduls kann parallel erfolgen. Beachten Sie, dass das Transformer-Modell dies zulässt Sequenzen fester Länge für Ein- und Ausgänge. Sätze sind mit gepolstert Token auf die feste Länge.

Ein vollständiges Transformatornetzwerk besteht aus einem Stapel von Codierungsschichten und einem Stapel von Decodierungsschichten. Diese Codierungs- und Decodierungsschichten bestehen aus Selbstaufmerksamkeits- und Feed-Forward-Schichten. Einer der Grundbausteine ​​des Transformators ist das Selbstaufmerksamkeitsmodul, das Schlüssel-, Wert- und Abfragevektoren enthält. Auf hoher Ebene berechnen die Abfrage- und Schlüsselvektoren zusammen eine Aufmerksamkeitswert zwischen 0 und 1 welche Waage wie viel der aktuelle Artikel gewichtet wird. Beachten Sie, dass wir den Transformatorwert noch nicht wirklich als Transformator bezeichnen können, wenn der Aufmerksamkeitswert nur Elemente skaliert, die größer oder kleiner sind. Um mit der Transformation der Eingabe zu beginnen, wird der Wertvektor auf den Eingabevektor angewendet. Die Ausgabe des Wertvektors, der auf den Eingabevektor angewendet wird, wird durch den zuvor berechneten Aufmerksamkeitswert skaliert.

Source: https://chatbotslife.com/language-translation-with-transformers-in-pytorch-ff8b32cf848?source=rss—-a49517e4c30b—4

spot_img

Neueste Intelligenz

spot_img