Aidemy 2020/10/30
Einführung
Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur AI-spezialisierten Schule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank!
Dieses Mal ist es der erste Beitrag zur Themenextraktion von japanischem Text. Freut mich, dich kennenzulernen.
- Dieser Artikel ist eine Zusammenfassung dessen, was Sie in "Aidemy" "in Ihren eigenen Worten" gelernt haben. Es kann Fehler und Missverständnisse enthalten. Bitte beachten Sie.
Was diesmal zu lernen
・ Tiefes Lernen in der Verarbeitung natürlicher Sprache
・ Einbettung, RNN, LSTM, Softmax usw.
Tiefes Lernen in der Verarbeitung natürlicher Sprache
- Tiefes Lernen in der Verarbeitung natürlicher Sprache umfasst Maschinenübersetzung, automatische Zusammenfassung und automatische Beantwortung von Fragen.
・ Bei einer solchen Verarbeitung natürlicher Sprache hat die Verwendung eines neuronalen Netzwerkmodells den Vorteil, dass der Wortvektor (Einbettung) durch die __error back propagation-Methode __ gelernt werden kann, während der Kontext berücksichtigt und die Dimensionen gedrückt werden. Gibt es.
Embedding
-__ Einbetten__ bedeutet __ "eingebettet" . Dies ist der erste Prozess, der ausgeführt wird, wenn ein neuronales Netzwerk aufgebaut wird, das Wörter verarbeitet. Insbesondere wird das Symbol word in die Dimension d (ca. 100 bis 300) __ eingebettet.
-Embedding erfolgt wie __ "model.add (Embedding (Argument))" . Die Argumente sind wie folgt.
- Input_dim: Anzahl der Vokabeln (Worttyp)
- Output_dim__: Die Größe der Dimension d des Wortvektors
-__ Input_length__: Länge jedes Satzes
RNN
-__ RNN__ ist ein "__rekursives neuronales Netz __", ein neuronales Netzwerk, das häufig beim tiefen Lernen der Verarbeitung natürlicher Sprache verwendet wird. __ Hervorragend geeignet für die Verarbeitung von Eingabezeichenfolgen (Reihen variabler Länge) mit beliebiger Länge __.
LSTM
-__ LSTM__ ist eine Art von RNN und hat eine Funktion, um die Mängel von RNN auszugleichen. Da RNN ein neuronales Netzwerk tief in der Zeitrichtung ist, hat es den Nachteil, den in den frühen Stadien eingegebenen Wert zu "vergessen". Das heißt, RNN ist nicht gut im Langzeitgedächtnis, aber LSTM kann sowohl das Kurzzeitgedächtnis als auch das Langzeitgedächtnis ausführen, wie der Name "LongShortTermMemory" andeutet.
Implementierung von LSTM
-LSTM kann auch aus Keras importiert und einfach implementiert werden. Wie beim Einbetten kann es mit __ "model.add (LSTM ())" __ verwendet werden. Die Argumente sind wie folgt.
・ Einheiten: Anzahl der Dimensionen des verborgenen Zustandsvektors (ca. 100 bis 300)
-__ Return_sequences__: "True" gibt die Ausgabesequenz (versteckter Zustandsvektor) für __alle Eingabesequenzen __ aus, und "False" gibt __ nur den versteckten Zustandsvektor zum letzten Mal T aus.
BiLSTM
-LSTM gibt die Eingabeserie x von 1 bis zum Ende in der Reihenfolge ein, aber umgekehrt ist es auch möglich, die Methode __ zur Eingabe in der Reihenfolge von hinten zu verwenden. Bei dieser Anwendung wird häufig eine Methode namens __ "BiLSTM" __ verwendet, die Informationen von __ bidirektional __ eingibt. Im Japanischen heißt es __ "Zwei-Wege-rekursives neuronales Netz" __.
-Der Vorteil von BiLSTM besteht darin, dass sowohl "von Anfang an weitergegebene Informationen" als auch "von hinten weitergegebene Informationen" gleichzeitig erfasst werden können.
-Für die Implementierungsmethode verwenden Sie keras __ "model.add (Bidirectional (argument))" __. Im ersten Argument wird __LSTM () __ im vorherigen Abschnitt unverändert gespeichert, und im zweiten Argument gibt __ "merge_mode" __ an, wie das bidirektionale LSTM verbunden werden soll.
- Geben Sie als zweites Argument eines von __ ['sum', 'mul', 'concat', 'ave'] __ an. sum wird durch Hinzufügen von Elementen verbunden, und mul wird durch Multiplizieren verbunden. concat ist kombiniert und verbunden, ave ist durchschnittlich verbunden.
Softmax-Funktion
-In Deep Learning, das diesmal nicht nur in der natürlichen Sprache klassifiziert wird, wird die __Softmax-Funktion __ in der Schicht verwendet, die der Ausgabeschicht des neuronalen Netzes am nächsten liegt. Diese Funktion wurde auch in "Deep Learning Basics" verwendet.
- Wie ich während der "Geschlechtsidentifikation" unter Verwendung von Softmax für die Ausgabe bestätigt habe, ist die Ausgabe so, dass die __summe der Wahrscheinlichkeitsverteilung der Ausgabe jeder Klasse 1 ist.
-In der Vergangenheit wurde es wie __ "model.add (Activation (" softmax "))" __ in Sequential model __ verwendet, aber " Functional API __", das das Modell ohne Verwendung von Sequential beschreibt Schreiben Sie im Fall von "als" __Activation ('softmax') (x) __ ". Übergeben Sie __ [Stapelgröße, Anzahl der Klassen] __ an dieses x.
Attention
Was ist Aufmerksamkeit?
-__ Aufmerksamkeit__ bedeutet __ "Aufmerksamkeitsmechanismus" __. Dies ist ein häufiger Mechanismus bei der Maschinenübersetzung und automatischen Zusammenfassung.
- Um beispielsweise ein Beispiel für die automatische Antwort auf eine Frage zu geben, nehmen wir an, dass es eine Liste s eines bestimmten Fragensatzes und eine Liste t des entsprechenden Antwortsatzes gibt. Zu diesem Zeitpunkt konvertiert RNN diese Anweisungen zu einem bestimmten Zeitpunkt in einen versteckten Zustandsvektor __ und __, wenn die Maschine __ "bestimmen soll, ob t als Antwort auf s" __ gültig ist. Durch Berechnen des Merkmals von t unter Berücksichtigung des verborgenen Zustandsvektors von s in kann die Information von t unter Berücksichtigung der Information von __s (wo auf s zu achten ist) erhalten werden, so dass die obige Beurteilung möglich ist. Werden.
Umsetzung der Aufmerksamkeit
- Wenn Sie Attention implementieren, kann es nicht mit dem __Sequential-Modell __ implementiert werden. Verwenden Sie daher die im vorherigen Abschnitt beschriebene "Functional API". Die funktionale API ist im Gegensatz zum sequentiellen Modell, das einfach eine Ebene hinzufügt, kompliziert, aber __ es ist möglich, das Modell frei zu erstellen.
- Erstellen Sie ein Modell mit der Funktions-API mit __ "Modell (Eingaben, Ausgaben)" __. Daher müssen __ "Eingaben" und "Ausgaben" erstellt werden, die beim Erstellen des Modells im Voraus übergeben werden sollen.
-Für __Eingabenerstellung __ erstellen Sie eine Eingabeebene mit __ "Eingabe (Form = (Anweisungslänge,))" __ (OK ohne Batchgröße im zweiten Argument) und __Embedding Wenden Sie __ an und machen Sie es dann BiLSTM und Sie sind fertig. __ Wenn Sie mehrere Eingabeebenen haben, können Sie dieselben erstellen .
- Die Ausgabe wird durch Implementieren von Attention __ erstellt. In diesem Fall berechnen Sie für BiLSTM "bilstm1" und "bilstm2" aus zwei Anweisungen das Matrixprodukt mit "__dot () __", wenden Sie die __Softmax-Funktion __ darauf an und wenden Sie dann die __Softmax-Funktion __ und dann __this und birstm1 an. Die Daten, die an die Ausgabe übergeben werden sollen, werden vervollständigt, indem das Produkt __ berechnet und mit birstm2 mit "__concatenate () __" verbunden wird, um es als Ausgabeschicht zu bilden.
・ Der spezifische Code lautet wie folgt
Dropout
・ (Überprüfung) Dropout ist eine Methode, mit der einige Daten zufällig auf __ "0" __ gesetzt werden, um ein Überlernen zu verhindern.
-Wenn Sie das sequentielle Modell verwenden, kann es mit __ "model.add (Dropout (ratio)") __ verwendet werden. Wenn Sie jedoch die Funktions-API wie dieses Mal verwenden, __ "Dropout (ratio) (x)" __ Sie können es so verwenden.
Zusammenfassung
- Beim tiefen Erlernen der Verarbeitung natürlicher Sprache wird zunächst ein Prozess namens Einbetten ausgeführt, um Wörter in Vektoren umzuwandeln.
・ Bei diesem tiefen Lernen wird ein Modell namens RNN verwendet. Von diesen verwendet die überwiegende Mehrheit LSTM, das ein ausgezeichnetes Langzeitgedächtnis aufweist. Darüber hinaus können die Informationen der gesamten Eingabeserie mithilfe von "BiLSTM" berücksichtigt werden, das dieses LSTM von beiden Enden der Daten aus anwendet.
- Durch die Implementierung von Attention zum Zeitpunkt der Ausgabe können Informationen zu einem Vektor extrahiert werden, nachdem Informationen zu einem anderen Vektor berücksichtigt wurden. Diese Technik ist in der Verarbeitung natürlicher Sprache häufig.
- Ähnlich kann eine Datenverallgemeinerung verhindert werden, indem sie auf der Ausgabeschicht ausfällt.
Diese Zeit ist vorbei. Vielen Dank für das Lesen bis zum Ende.