[PYTHON] Erstellen eines seq2seq-Modells mithilfe der Funktions-API-Übersicht von keras

Was für ein Artikel?

Für diejenigen, die dies oder jenes für Deep-Learning-Modellierung ausprobieren möchten, aber nicht wissen, wie sie es implementieren sollen Verwendung der funktionalen API von keras als Framework, das relativ flexibel und angemessen abstrahiert ist Versuchen Sie, seq2seq, das mit sequentiellen Funktionen schwierig ist, so einfach wie möglich zu implementieren

Inhaltsverzeichnis

  1. Übersicht (Imakoko)
  2. Vorverarbeitung
  3. Modellbau & Lernen
  4. Inferenz
  5. Modellverbesserung (noch nicht gemacht)

Aufgabe zu lösen

Erstellen Sie ein maschinelles Übersetzungsmodell von Englisch nach Japanisch. Es wird davon ausgegangen, dass die Zeichenfolge im Voraus in Wörter zerlegt wird. Verwenden Sie insbesondere die folgenden Daten https://github.com/odashi/small_parallel_enja

Modellübersicht

Konvertieren Sie zunächst die eingegebene Wortzeichenfolge in eine Wort-ID und binden Sie sie in eine geeignete Dimension ein. Verwenden Sie als Nächstes LSTM, um eine Vektorzeichenfolge mit variabler Länge aus eingebetteten Vektoren zu erstellen, die der Eingabewortzeichenfolge entsprechen. Codieren Sie in versteckte Zustände h und c von zwei LSTM-Zellen, die Merkmalsvektoren fester Länge sind.

Geben Sie die codierten versteckten Zustände h, c und ein spezielles Wort (eingebetteter Vektor) ein, um den Satzanfang in einem anderen LSTM darzustellen. Durch Weiterleiten der Ausgabe von LSTM an die vollständig verbundene Schicht und Nehmen von Softmax wird die Wahrscheinlichkeit erhalten, dass das erste Wort jedes Wort ist. Wenn man Argmax der Wahrscheinlichkeit nimmt, dass das erste Wort jedes Wort ist, erhält man das Schätzergebnis des ersten Wortes. Danach werden Wörter nacheinander aus dem eingebetteten Vektor des t-Wortes und den verborgenen Zuständen h und c zum Zeitpunkt des t-Wortes erzeugt, und die Ausgabewortzeichenfolge wird erhalten.

Es sieht aus wie in der Abbildung unten.

LSTM-Page-1.png

Gleichfarbige Quadrate haben das gleiche Gewicht. Die tatsächliche Eingabe des Quadrats, das das bestimmte Wort enthält, ist das in die entsprechende Wort-ID konvertierte Wort. Der Einfachheit halber ist es im Wort selbst geschrieben. Als Beispiel habe ich die Dimensionen der Werte geschrieben, die zwischen den einzelnen Zellen in dem Code übergeben wurden, den ich dieses Mal geschrieben habe, aber es handelt sich um Hyperparameter. Es gibt viel mehr Modelle für seq2seq, die nicht auf neuronale maschinelle Übersetzung beschränkt sind, aber wir werden uns darauf konzentrieren, uns an Keras zu gewöhnen und ein einfaches Modell zu verwenden.

Umgebung

Ich benutze Sagemakers Notebook-Instanz, weil es viel Ärger gibt. Für GPU-Instanzen wurden bereits verschiedene Bibliotheken und GPU-Umgebungen erstellt, und der Preis beginnt bei 0,0464 USD / Stunde! Wenn Sie eine GPU verwenden, kostet diese 1,26 USD / Stunde für ml.p2.xlarge. Wenn Sie also mit ml.t2.medium debuggen und ml.p2.xlarge nur zum Lernen verwenden, ist dies billiger. Ich habe einen Gaming-PC zur Hand, damit ich es zur Hand haben kann, aber es ist ein Ärger, deshalb habe ich in diesen Tagen die ganze Zeit Notebook-Instanzen verwendet.

Referenz

Der Vorbehandlungsteil ist wie folgt Neuronale maschinelle Übersetzung mit Aufmerksamkeit https://www.tensorflow.org/tutorials/text/nmt_with_attention

Die Codebasis für den Lern- / Inferenzteil ist wie folgt Sequence to sequence example in Keras (character-level). https://keras.io/examples/lstm_seq2seq/

Die zum Lernen verwendeten Daten sind wie folgt https://github.com/odashi/small_parallel_enja

Das Repository mit dem Code für diesen Artikel https://github.com/nagiton/simple_NMT

Recommended Posts

Erstellen eines seq2seq-Modells mithilfe der Funktions-API-Übersicht von keras
Erstellen Sie ein seq2seq-Modell mit dem Functional API Model Building & Learning von keras
Erstellen eines seq2seq-Modells unter Verwendung der funktionalen API-Inferenz von keras
Vorverarbeitung zum Erstellen eines seq2seq-Modells unter Verwendung der Funktions-API von keras
Multi-Input / Multi-Output-Modell mit funktionaler API
Erstellen eines Lernmodells mit MNIST
Erstellen Sie die CRUD-API mit der Fast API
Erstellen einer virtuellen Umgebung mit homebrew + pyenv-virtualenv
Holen Sie sich ein Referenzmodell mit Django Serializer
Erstellen Sie eine REST-API mit dem in Lobe und TensorFlow Serving erlernten Modell.
Python: Zeitreihenanalyse: Erstellen eines SARIMA-Modells
Erstellen wir eine REST-API mit SpringBoot + MongoDB
Erstellen einer interaktiven Anwendung mithilfe eines Themenmodells
Bereiten Sie einen Pseudo-API-Server mit GitHub-Aktionen vor