[PYTHON] Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"

Inhalt

Dies ist ein Memo für mich, während ich Einführung in Anwendungen zur Verarbeitung natürlicher Sprache in 15 Schritten lese. Notieren Sie sich diesmal in Kapitel 3, Schritt 13 Ihre eigenen Punkte.

Vorbereitung

Kapitelübersicht

Im vorherigen Kapitel haben wir ein Faltungs-Neuronales Netzwerk (CNN) erstellt, das eine Spalte mit verteilten Ausdrücken von Wörtern verwendet, die in einer Form angeordnet sind, die einem Satz als Eingabe entspricht. In diesem Kapitel werden wir auch ein rekursives neuronales Netzwerk (RNN) mit einer Folge verteilter Ausdrücke von Wörtern aufbauen, die in einer Form angeordnet sind, die einem Satz als Eingabe entspricht. Die ausführliche Erläuterung des Mechanismus entfällt.

13.1 Recurrent layer

Verbinden Sie den vorherigen Ausgang mit dem nächsten Ausgang

Geben Sie die Spalte ganz links des Merkmalsvektors in eine Schicht (vollständig verbundene Schicht) des mehrschichtigen Perzeptrons ein. Verschieben Sie als nächstes das Eingangsneuron um eine Zeile nach rechts und geben Sie es auf die gleiche Weise in die vollständig verbundene Schicht ein, aber das Gewicht der hier verwendeten ** vollständig verbundenen Schicht ist das gleiche wie das zuvor verwendete **. Verbinden Sie gleichzeitig ** das vorherige Ausgangsneuron über eine andere vollständig verbundene Schicht **.

--CNN: Enthält Informationen für die gesamte Spalte der Merkmalsvektoren, indem eine Reihe von Ausgaben in die Max-Pooling-Ebene eingegeben werden, um den Vektor zu erhalten --RNN: Da der vorherige Ausgang mit dem nächsten Ausgang verbunden ist, enthält der am Ende erhaltene die Informationen der gesamten Spalte des Merkmalsvektors (das erste Merkmal wird jedoch kleiner). Beachten Sie, dass

Eine weitere Darstellung von RNN

Dies kann auch erklärt werden, indem eine vollständig verbundene Schicht mit einer "Verbindung, die ihre Ausgabe an sich selbst zurückgibt" vorbereitet und der Reihe nach Vektoren eingegeben werden. Ich hatte ursprünglich dieses Bild und als ich den Loop-Teil erweiterte, wurde es die Komposition, die ich zuvor erwähnt hatte.

13.2 LSTM RNN, eine Abkürzung für Langzeit-Kurzzeitgedächtnis, hatte das Problem, dass die Eigenschaften am Anfang kleiner wurden, aber LSTM ist eine verbesserte Version, die alte Informationen beibehalten kann. (Ich möchte LSTM in Zukunft zusammenfassen)

13.3 Implementierung von RNN durch Keras

Ergänzungen / Änderungen gegenüber dem vorherigen Kapitel (Schritt 12)

rnn_sample.py


    model = Sequential()
    model.add(get_keras_embedding(we_model.wv,
                                  input_shape=(MAX_SEQUENCE_LENGTH, ),
                                  mask_zero=True,
                                  trainable=False))
    model.add(LSTM(units=256))
    model.add(Dense(units=128, activation='relu'))
    model.add(Dense(units=n_classes, activation='softmax'))
    model.compile(loss='categorical_crossentropy',
                  optimizer='rmsprop',
                  metrics=['accuracy'])

Ausführungsergebnis


# CNN
$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python cnn_sample.py
Epoch 50/50
917/917 [==============================] - 0s 303us/step - loss: 0.0357 - acc: 0.9924
0.6808510638297872

Epoch 100/100
917/917 [==============================] - 0s 360us/step - loss: 0.0220 - acc: 0.9902
0.6808510638297872

# LSTM
$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python rnn_sample.py
Epoch 50/50
917/917 [==============================] - 4s 4ms/step - loss: 0.2530 - acc: 0.9378
0.6063829787234043

Epoch 100/100
917/917 [==============================] - 4s 4ms/step - loss: 0.0815 - acc: 0.9793
0.5851063829787234

# Bi-directional RNN
$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python bid_rnn_sample.py
Epoch 50/50
917/917 [==============================] - 2s 2ms/step - loss: 0.2107 - acc: 0.9487
0.5851063829787234

Epoch 100/100
917/917 [==============================] - 2s 2ms/step - loss: 0.0394 - acc: 0.9858
0.5851063829787234

# GRU
Epoch 50/50
917/917 [==============================] - 1s 1ms/step - loss: 0.2947 - acc: 0.9368
0.4787234042553192

Epoch 100/100
917/917 [==============================] - 1s 1ms/step - loss: 0.0323 - acc: 0.9869
0.5531914893617021

Vergleiche mit 50 Epochennummern. Anders als bei CNN ist die Verlustfunktion auch bei Epoch50 nicht gesunken, daher habe ich sie bei Epoch100 überprüft.

Art der NN Ausführungsergebnis Ausführungsgeschwindigkeit
CNN Epoch50:68.1%
Epoch100:68.1%
300us im Durchschnitt/step -> 0.27s/epoch
LSTM Epoch50:60.6%
Epoch100:58.5%
4ms im Durchschnitt/step -> 3.6s/epoch
Bi-directional RNN Epoch50:58.5%
Epoch100:58.5%
2ms im Durchschnitt/step -> 1.8s/epoch
GRU Epoch50:47.9%
Epoch100:55.3%
1ms im Durchschnitt/step -> 0.9s/epoch

Eine Optimierung des neuronalen Netzwerks wie die Suche nach Hyperparametern in den folgenden Kapiteln ist erforderlich, aber CNN ist schnell und die Unterscheidungsrate ist recht gut.

13.4 Zusammenfassung

Da ein einfaches RNN, das einfach eine vollständig verbundene Schicht ähnlich dem mehrschichtigen Perceptron umleitet, nicht gut funktioniert, wurde LSTM eingeführt.

13.5 Für fortgeschrittenes Lernen

Der Inhalt von Kapitel 3 dieses Buches ist elementar und konzentriert sich darauf, wie man sie für praktische Anwendungen verwendet. Um ein tieferes Verständnis in der Theorie zu erlangen, sollten wir die Theorie der neuronalen Netze festigen, bevor wir beginnen. Es könnte eine gute Idee sein, den Kaggle-Wettbewerb auszuprobieren.

Recommended Posts

Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 3 Schritt 08 Memo "Einführung in neuronale Netze".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 12 Memo "Convolutional Neural Networks".
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 09 Memo "Identifier by Neural Network"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 04 Memo "Feature Extraction"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 01 Memo "Erstellen eines Dialogagenten"
Versuchen Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 2 Schritt 03 Memo "Morphologische Analyse und schriftliches Schreiben"
[WIP] Vorverarbeiten von Notizen in der Verarbeitung natürlicher Sprache
Rekursives neuronales Netzwerk: Eine Einführung in RNN
Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Jobwechsel-Meeting] Versuchen Sie, Unternehmen zu klassifizieren, indem Sie Mundpropaganda in natürlicher Sprache mit word2vec verarbeiten
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Kapitel 4 Zusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Zusammenfassung von Kapitel 3 der Einführung in Entwurfsmuster, die in Java gelernt wurden
[Einführung in RasPi4] Umgebungskonstruktion, Mecab des Verarbeitungssystems für natürliche Sprache usw. .. .. ♪
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python