[PYTHON] Analyse négative / positive 3 Analyse négative / positive de Twitter (2)

Aidemy 2020/10/30

introduction

Bonjour, c'est Yope! Bien que ce soit un système littéraire croustillant, j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! C'est le troisième article de l'analyse négative-positive. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ Implémentation du modèle LSTM ・ Analyse négative / positive à l'aide du modèle construit

Apprenez avec LSTM

LSTM ・ (Review) LSTM est un type de RNN et peut stocker les données saisies au début. Autrement dit, il s'agit d'un modèle RNN capable de mémoire à long terme.

Créer un jeu de données d'entraînement

-Utilisez les données créées dans __Chapitre2 comme ensemble de données d'entraînement __. Les données de formation X sont créées à partir de __words quantifiés __ (caractéristiques), et l'étiquette d'enseignant y est créée à partir de __négatif / positif quantifié __ (étiquette). -En multipliant la longueur des entités par 0,8, __ définir la longueur de référence pour la division __. Sur cette base, les données d'entraînement sont créées avec la partie "~ 0.8" des fonctionnalités comme __ "train_X" __ et la partie restante comme __ "val_X" __. De même, créez une étiquette d'enseignant avec __ "~ 0.8" __ une partie des étiquettes comme __ "train_y" __ et le reste comme __ "val_y" __. -En outre, __half __ de val_X et val_y sont __ "test_X" et "test_y" __ pour l'évaluation de l'exactitude. (L'autre moitié est utilisée comme données de validation)

-Les données à former par LSTM doivent être transformées en __ (nombre d'échantillons, longueur de séquence, nombre de dimensions) __. La longueur de séquence fait référence au nombre de données __ que le modèle apprend à chaque étape. Cette fois, une phrase est apprise en une seule étape, elle devient donc __ "1" __. -Pour les données d'entraînement X, la conversion de forme est effectuée avec __ "np.reshape ()" __. Les données de transformation elles-mêmes sont passées au premier argument et le contenu de la transformation, c'est-à-dire l'élément correspondant à ce qui précède (nombre d'échantillons, longueur de séquence, nombre de dimensions) est passé au second argument. -Comme la forme de __data X est (nombre d'échantillons, nombre de dimensions) __, le nombre d'échantillons peut être obtenu avec __ "forme [0]" __, et le nombre de dimensions est __ "forme [1]". Vous pouvez l'obtenir avec __. -Pour le libellé enseignant y, une des valeurs numériques de "0, 1, 2" est stockée, donc ces valeurs sont traitées de la même manière lorsque __analyzed, et converties en un vecteur __one-hot. À __. (Si elle n'est pas convertie, l'analyse sera telle que "1" est "entre 0 et 2") -La conversion en vecteur one-hot est effectuée par __ "to_categorical (données, nombre de vecteurs)" __. Le nombre de vecteurs cette fois est __3 __ de "0,1,2".

・ Code![Capture d'écran 2020-10-28 16.55.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/771f56a0-2c27-6b77- 730a-11b1474a0fcf.png)

・ La forme de chaque donnée![Capture d'écran 2020-10-28 16.56.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/fc589dba-327a -91cb-0868-70397bbfe331.png)

Implémenter LSTM avec Keras

Définition de la couche LSTM

-Comme nous utiliserons cette fois le Sequential model de Keras, contrairement à l'API fonctionnelle, nous pouvons facilement ajouter la couche LSTM en utilisant __ "add" __. -Comme la première couche est la couche d'entrée, il est nécessaire de spécifier __, "forme des données d'entrée" __. Dans le cas de données bidimensionnelles, seul le nombre de dimensions doit être spécifié par input_dim, mais dans le cas de données tridimensionnelles comme cette fois, la longueur de la séquence doit également être spécifiée par input_length. -En outre, __input_shape = (longueur de la séquence, nombre de dimensions) __ peut être défini.

・ Code![Capture d'écran 2020-10-28 18.33.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/6870e342-6542-c0c7- 79fa-b2754121c393.png)

-Ajoutez la couche LSTM à la deuxième couche et la couche entièrement connectée (couche de sortie) à la troisième couche. Lors de la définition de la couche LSTM, il est nécessaire de spécifier True pour return_sequences si la couche suivante est également LSTM, et de spécifier False si ce n'est pas la couche LSTM.

・ Code![Capture d'écran 2020-10-28 18.39.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/7733ae98-2a75-ef61- ca33-17ea96ea3357.png)

Compiler, apprendre, évaluer

-Après avoir ajouté la couche, _ compilez et définissez le processus d'apprentissage du modèle __. Compilez avec __ "model.compile ()" __, et spécifiez la fonction de perte loss et la fonction d'activation optimizer comme arguments. Puisqu'il s'agit d'un modèle de classification, «Erreur d'entropie __cross __» est utilisée pour la fonction de perte. Utilisez __ 'rmsprop' __ pour la fonction d'activation et spécifiez __ ['precision'] __ pour metrics, qui est un index pour l'évaluation du modèle.

-La formation au modèle est effectuée avec "__model.fit () __". Déterminez le nombre de données à entrer dans le modèle à la fois batch_size est de 32, et le nombre de fois que le modèle est entraîné epochs est de 2.

・ Enfin, évaluez le modèle. Ceci est fait avec "__model.evaluate () __". Vous pouvez lui transmettre les données de test.

・ Code![Capture d'écran 2020-10-28 18.57.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/f529fc7b-6c87-9c53- cbfc-4d705ec18ac7.png)

・ Résultat![Capture d'écran 2020-10-28 18.58.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/27ca0b26-900e-43c4- 8d86-25999751c5dd.png)

Essayez d'utiliser le modèle pour différentes données

Traitement des données d'entrée

・ De là, __ nouvelles données seront transmises au modèle créé pour faire un diagnostic négatif / positif __. -Magasiner le texte anglais dans "texte" comme données d'entrée et le traiter. Commencez par transmettre le texte à la fonction d'analyse morphologique __ "tweet_to_words ()" __ créée au chapitre 2, puis utilisez __split () __ pour le diviser en mots. -Suivant, __ Convertissez les mots divisés en nombres __. Reportez-vous à la base de données __ "vocab_to_ints" __ créée au chapitre 2, et stockez la valeur numérique si elle existe dans la base de données, ou 0 si elle n'existe pas dans la liste vide words_int. -Enfin, comme nous l'avons fait au chapitre 2, nous avons unifié la longueur de la __ liste __ et l'avons complétée.

·code スクリーンショット 2020-10-28 20.32.30.png

・ Résultat![Capture d'écran 2020-10-28 20.32.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/1eb9d879-8cde-b7c7- abef-f86233abaecd.png)

-Après cela, appliquez le modèle entraîné __ "lstm_model" __ à ces fonctionnalités et prédisez avec predict, et affichez celui avec la valeur prédite la plus élevée parmi les trois catégories comme réponse. -Celui avec la valeur prédite la plus élevée peut être obtenu en utilisant __ "np.argmax ()" __ qui renvoie le numéro d'index de la valeur maximale.

-Code (les résultats sont renvoyés comme "négatifs") スクリーンショット 2020-10-28 20.52.35.png

Sommaire

-Lors de l'implémentation du modèle, utilisez les données créées dans __Chapitre2 comme ensemble de données d'apprentissage __. Les données de formation X sont créées à partir de __words quantifiés __ (caractéristiques), et l'étiquette d'enseignant y est créée à partir de __négatif / positif quantifié __ (étiquette). -Les données à former par LSTM doivent être __3 dimensions __ (nombre d'échantillons, longueur de séquence, nombre de dimensions) __. Parmi ceux-ci, sequence length fait référence au nombre de données que le modèle apprend à chaque étape. -Le modèle est implémenté par Modèle séquentiel. __ Ajoutez une couche avec "add" __, compilez avec __ "compile" __, apprenez avec __ "fit" __ et vous avez terminé. Le modèle terminé est évalué avec __ "évaluer" __. -Lors de la transmission d'une autre donnée texte au modèle créé, formatez les données __ à l'aide de la fonction de la section précédente, puis transmettez-la au modèle __. Des prédictions négatives et positives sont faites avec __ "prédire" __.

Cette fois, c'est fini. Merci d'avoir lu jusqu'au bout.

Recommended Posts

Analyse négative / positive 2 Analyse négative / positive Twitter (1)
Analyse négative / positive 3 Analyse négative / positive de Twitter (2)
Python: analyse négative / positive: analyse négative / positive de Twitter à l'aide de RNN-Partie 1
Analyse négative / positive 1 Application de l'analyse de texte
Python: analyse négative / positive: application d'analyse de texte
Raclage et analyse positive négative des articles en ligne Bunharu
Vtuber est-il positif? Est-ce négatif?
Analyse des données Twitter | Analyse des tendances
Créez un nuage de mots avec uniquement des mots positifs / négatifs sur Twitter
Visualisation et analyse des informations de localisation des données Twitter Stava
Programme d'analyse des tendances Twitter (mémo personnel)
Création d'un classificateur négatif / positif à l'aide de BERT