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
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
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.
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.
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.
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