Aidemy 2020/10/30
Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais 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 deuxième article de l'analyse négative-positive. Ravi de vous rencontrer.
Quoi apprendre cette fois ・ Analyse négative / positive de Twitter avec RNN ・ Création d'une base de données
RNN ・ L'analyse négative-positive peut être effectuée à l'aide d'un dictionnaire de polarité, mais il est difficile de porter un jugement en fonction du contexte. Par conséquent, en utilisant __ "RNN (Retroactive Neural Network)" __ traité dans "Topic Extraction 1 of Japanese Text", il est possible de porter un jugement en contexte. ・ Bien que le contexte RNN puisse être estimé en japonais, __ cette fois, nous utiliserons l'anglais __.
-__ Twitter__ est composé d'une courte phrase de 140 caractères, il convient donc à l'analyse du __ traitement du langage naturel _. Cette fois, nous utiliserons les données Twitter de USAirline. -D'abord, ouvrez le fichier csv dans lequel les données du Tweet sont enregistrées, et extrayez la colonne __ 'texte' __ et __ 'ligne aérienne' __ __ toutes les lignes de celui-ci __. La méthode est "__loc [:, [nom de la colonne]] __".
-Lors de l'analyse des relations entre les mots avec RNN, les mots fréquemment utilisés __ tels que __ "@" et "I" sont appelés __ "mots vides" __ qui interfèrent avec l'analyse. Cette fois, je supprimerai ce __stop mot __. -Pour les données de tweet lues dans la section précédente, divisez-les d'abord en mots par __ analyse morphologique , puis utilisez __ "lower ()" __ pour les rendre tous inférieurs ( normalisation __). -Egalement, téléchargez le module stopwords de nltk et définissez les informations de mots vides en anglais dans la variable "stops" avec "__set (stopwords.words (" english ")) _". -Pour chaque mot w dans les mots, seuls __ "pas en stop (pas en stop)" __ et __ "ne contient pas @ et en vol" __ les mots sont renvoyés sous forme de "mots significatifs". -De ces conditions, la première peut être décrite par __ "sinon w dans les arrêts" , et la seconde par " not re.match ('^ [chaîne de caractères]', w)" __.
・ Code![Capture d'écran 2020-10-27 18.04.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/693ead18-245f-1050- 07de-fe398abc1569.png)
-Ensuite, mettez tous les mots de __Tweet ensemble dans la base de données __. En faisant cela, vous serez en mesure de vérifier la fréquence d'occurrence de __words et de marquer les négatifs et les positifs en même temps __.
・ Code![Capture d'écran 2020-10-27 18.38.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/a115f91f-0811-1a2f- bbf3-5bb47e0c5430.png)
・ Contenu des mots![Capture d'écran 2020-10-27 18.39.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/b9d684fe-1bf6- 78f9-64cb-aba87ea7f537.png)
-Ajouter une balise numérique à chaque __word en fonction du nombre de fois où le mot apparaît __. Créez également une nouvelle liste de chaînes __cleanTweet converties en nombres __. -Le nombre de fois qu'un mot apparaît peut être calculé avec __ "Counter () ". Triez les mots par ordre décroissant du nombre d'occurrences, et créez un dictionnaire de sorte que "{mot: nombre d'occurrences}". Le nombre d'occurrences peut être obtenu avec " pour ii, mot dans enumerate (vocab, 1) __". Pour __enumerate () __, si vous passez une liste comme argument et en faites une instruction for, l'index sera entré dans la première variable (ii) et la colonne sera entrée dans la deuxième variable (mot). Par conséquent, on peut dire que ce code crée un dictionnaire dans lequel les numéros d'index sont attribués dans l'ordre du mot dans lequel le "vocabulaire" apparaît le plus fréquemment.
-Ensuite, convertissez la chaîne __cleanTweet en un nombre __ et créez une nouvelle liste. Tout d'abord, créez une liste vide "tweet_ints". -Pour chaque ligne (chacune) de cleanTweet divisée en mots (mot), convertissez-le en numéro d'index attribué immédiatement avant et stockez-le dans la liste vide tweet_ints tel quel. Ensuite, tweet_ints contient une liste dans laquelle le numéro d'index est stocké pour chaque ligne (tweet). -Pour la méthode de conversion, reportez-vous à la valeur du dictionnaire créé immédiatement avant pour chaque mot.
・ Code![Capture d'écran 2020-10-27 20.36.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/71666eae-8acf-2146- 218f-a1a04ee76b5f.png)
・ Résultat (seulement une partie)![Screenshot 2020-10-27 20.37.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/1cbd9513 -e394-12a4-4687-ed90a9ec809f.png)
-Dans la colonne __ 'Airlines_sentiment' __ de tweetData extraite au début de ce chapitre, des informations indiquant que chaque tweet est __ négatif, positif ou neutre sont stockées. Ces informations sont converties en valeurs numériques telles que __ "négatif = 0, positif = 1, neutre = 2" __. __ En en faisant une valeur numérique, il sera possible de l'utiliser lors de l'apprentissage __. -Si chaque ligne de "airline_sentiment" est chacune, if __ "each == 'negative'", la valeur représente "0" __ if instructions, et elles sont combinées dans un format np.array. Faire.
・ Code![Capture d'écran 2020-10-27 21.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/af152708-57ec-3735- fa90-16e3728c50f3.png)
-Les __ "tweet_ints" __ créés dans la section précédente contiennent le numéro d'index du mot de chaque tweet, mais la __ longueur de chaque liste est différente __. Cependant, lors de l'apprentissage de __, il est nécessaire de rendre les longueurs uniformes. __ Supprimez également la ligne où le nombre de mots est devenu 0 dans le processus cleanTweet __. -D'abord, obtenez la longueur de chaque liste avec __ "Counter ()" __. Dans le processus immédiatement après, __ les longueurs des autres listes seront ajustées en fonction de celle avec la longueur maximale __, donc seule la longueur maximale sera acquise avec __ "max ()" __ et la variable "seq_len". Stocker dans. -Suivant, supprimez la ligne avec __ longueur 0 __. Au lieu de le supprimer directement avec drop () etc., tweet_ints Pour la colonne (tweet), seuls ceux avec len (tweet)> 0 sont acquis. Stockez l'index de la ligne qui satisfait la condition de len (tweet)> 0 dans "__tweet_index" __, et stockez à nouveau __labels et tweetData en conséquence __. Enfin, vous pouvez à nouveau stocker tweet_ints selon les conditions. ・ __ Alignez la longueur de chaque liste __. Comme mentionné ci-dessus, __ ajustez la longueur au plus long . Si la longueur n'est pas suffisante, remplissez les mots numérisés sur la ligne de droite et remplacez le manque par 0. (Par exemple, lorsque la longueur de la liste de __ [1,2,3] __ est définie sur 5 par cette méthode, elle devient __ [0,0,3,2,1] __) -La partie "__np.zeros ((len (tweet_ints), seq_len), dtype = int) __" du code ci-dessous est un tableau avec tous les 0 éléments, avec des lignes de longueur tweet_ints et le nombre maximum de colonnes. Indique que vous créez. Lorsque chaque row de tweet_ints est i et column est row, en mettant la ligne dans la partie où __row est i et la colonne est -len (ligne) __ dans le tableau avec 0 élément, La méthode complémentaire ci-dessus est réalisée.
・ Code![Capture d'écran 2020-10-28 15.23.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/69e4bdd0-0c2e-398f- ec5a-dee991526845.png)
・ Résultat (seulement une partie)![Capture d'écran 2020-10-27 22.52.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/907dc703 -1da6-ec31-9c8a-5b964658ed11.png)
-En utilisant RNN, il est possible de réaliser une analyse négative-positive qui prend en compte le flux du contexte __. -Les mots qui apparaissent fréquemment dans les données sont appelés __ "mots vides" __ et interfèrent avec l'analyse, il est donc nécessaire de supprimer __. -En créant une __database de mots dans les données Twitter, il est possible d'effectuer une analyse négative / positive pour chaque __word __. -Les données de mots sont quantifiées en attribuant __ID dans l'ordre de fréquence __, et la valeur __PN correspondante est également stockée à l'aide du dictionnaire de polarité __. De plus, il devrait être possible de distinguer numériquement le négatif du positif, qui sera l'étiquette de l'enseignant lors de la mise en œuvre du modèle. -Pour les données qui seront des données d'apprentissage, uniformisez la longueur des colonnes pour chaque __ liste __.
Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.