[PYTHON] Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 3 Étape 13 Mémo «Réseaux de neurones récurrents»

Contenu

Ceci est un mémo pour moi pendant que je lis Introduction aux applications de traitement du langage naturel en 15 étapes. Cette fois, au chapitre 3, étape 13, notez vos propres points.

Préparation

Aperçu des chapitres

Dans le chapitre précédent, nous avons construit un réseau de neurones convolutifs (CNN) qui utilise une colonne d'expressions distribuées de mots disposées sous une forme correspondant à une phrase en entrée. Dans ce chapitre, nous construirons également un réseau neuronal récursif (RNN) avec une séquence d'expressions distribuées de mots disposées sous une forme correspondant à une phrase en entrée. L'explication détaillée du mécanisme est omise.

13.1 Recurrent layer

Connectez la sortie précédente à la sortie suivante

Entrez la colonne la plus à gauche du vecteur d'entités dans une couche (couche entièrement connectée) du perceptron multicouche. Ensuite, déplacez le neurone d'entrée vers la droite d'une ligne et entrez dans la couche entièrement connectée de la même manière, mais le poids de la ** couche entièrement connectée utilisée ici est le même que celui utilisé auparavant **. En même temps, ** connectez le neurone de sortie précédent via une autre couche entièrement connectée **.

--CNN: Inclut des informations pour toutes les colonnes de vecteurs d'entités en entrant une série de sorties dans la couche de pooling max pour obtenir un vecteur --RNN: Puisque la sortie précédente est connectée à la sortie suivante, le dernier vecteur obtenu contient des informations sur toute la colonne des vecteurs de caractéristiques (bien que la première caractéristique devienne plus petite Notez que

Une autre représentation de RNN

Cela peut également être expliqué en préparant une couche entièrement connectée avec une "connexion qui renvoie sa sortie sur elle-même" et en y entrant des vecteurs dans l'ordre. J'avais à l'origine cette image, et quand j'ai agrandi la partie boucle, c'est devenu la composition que j'ai mentionnée plus tôt.

13.2 LSTM Abréviation de longue mémoire à court terme, RNN avait le problème que les caractéristiques au début devenaient plus petites, mais LSTM est une version améliorée qui peut conserver les anciennes informations. (Je veux résumer LSTM dans le futur)

13.3 Implémentation de RNN par Keras

Ajouts / modifications par rapport au chapitre précédent (étape 12)

--Structure du réseau neuronal: CNN-> RNN --Gestion de 0 en séquence: pas de spécial

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'])

Résultat d'exécution


# 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

Comparez avec 50 numéros d'époque. Autre que CNN, la fonction de perte n'a pas baissé même avec Epoch50, donc je l'ai vérifiée avec Epoch100.

Type de NN Résultat d'exécution Vitesse d'exécution
CNN Epoch50:68.1%
Epoch100:68.1%
300us en moyenne/step -> 0.27s/epoch
LSTM Epoch50:60.6%
Epoch100:58.5%
4ms en moyenne/step -> 3.6s/epoch
Bi-directional RNN Epoch50:58.5%
Epoch100:58.5%
2ms en moyenne/step -> 1.8s/epoch
GRU Epoch50:47.9%
Epoch100:55.3%
1ms en moyenne/step -> 0.9s/epoch

Un réglage du réseau neuronal tel que la recherche d'hyper paramètres dans les chapitres suivants est nécessaire, mais CNN est rapide et le taux de discrimination est assez bon.

13.4 Résumé

Comme un simple RNN qui détournait simplement une couche entièrement connectée similaire au Perceptron multicouche ne fonctionne pas bien, LSTM a été introduit.

13.5 Pour un apprentissage plus avancé

Le contenu du chapitre 3 de ce livre est élémentaire et se concentre sur la façon de les utiliser pour des applications pratiques. Afin d'acquérir une compréhension plus approfondie de la théorie, nous devons solidifier la théorie des réseaux de neurones avant de commencer. Ce serait peut-être une bonne idée d'essayer le concours Kaggle.

Recommended Posts

Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 3 Étape 13 Mémo «Réseaux de neurones récurrents»
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 12 Mémo "Réseaux de neurones convolutifs"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 09 Mémo "Identifier par Neural Network"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 4 Etape 14 Mémo "Recherche Hyper Paramètre"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 05 Mémo "Conversion de quantité de fonctionnalités"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 01 Mémo «Créer un agent de dialogue»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 03 Mémo "Analyse morphologique et écriture écrite"
[WIP] Pré-traitement des notes dans le traitement du langage naturel
Réseau neuronal récursif: une introduction à RNN
Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Modèle utilisant un réseau neuronal convolutif dans le traitement du langage naturel
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Réunion de changement d'emploi] Essayez de classer les entreprises en traitant le bouche-à-oreille en langage naturel avec word2vec
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java
Résumé du chapitre 3 de l'introduction aux modèles de conception appris en langage Java
[Introduction à RasPi4] Construction de l'environnement, système de traitement du langage naturel mecab, etc. .. .. ♪
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python