[PYTHON] Traitement du langage naturel 3 Continuité des mots

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! Ceci est le troisième article du traitement du langage naturel. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ ・

Préparation à la continuité des mots

Créer un dictionnaire de mots

・ Afin d'effectuer une «analyse de continuité de mot», les données de mot sont quantifiées comme une préparation. -Après avoir divisé l'ensemble de données, créez d'abord un dictionnaire __word (liste) __ avec l'ID défini afin d'attribuer un ID à chaque mot et de le quantifier. Parmi ceux-ci, nous voulons numéroter les mots par ordre décroissant d'apparence, donc nous comptons le nombre d'occurrences de __words et les trions par ordre décroissant __.

-Compter le nombre d'occurrences de mots en utilisant __Counter () __ et __itertools.chain () __. __Counter (itertools.chain (* liste des données de mots à compter)) __

-Counter () compte le nombre d'éléments, mais comme le résultat est renvoyé dans plusieurs dimensions, chaque élément ne peut pas être accédé individuellement. Ceci est renvoyé à une dimension en utilisant __itertools.chain () __. Ajoutez __ "*" __ à la liste multidimensionnelle passée à cette itertools.chain ().

-Utilisez __most_common (n) __ pour trier par ordre décroissant. Si n est spécifié, le nombre de taples sera renvoyé par ordre décroissant.

・ Une fois que vous avez fait cela, vous pouvez créer un dictionnaire de mots en attribuant un identifiant à chacune des listes de comptage d'apparences triées et en les stockant dans un dictionnaire vide.

・ Code![Capture d'écran 2020-10-19 12.50.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/27647f46-ce71-8d11- 4745-85d91fbe0912.png)

Convertir les données de mot en données numériques

-Une fois le dictionnaire créé, faites le __ "quantifier l'ensemble de données" __. -Reportez-vous à la partie ID du dictionnaire de mots créé dans la section précédente, et convertissez l'ensemble de données vocales "wakatiO" en un nouveau tableau appelé "wakatiO_n" avec uniquement des données numériques.

-Le code est comme suit. スクリーンショット 2020-10-19 13.02.59.png

・ Ce code est facile à comprendre si vous le regardez de derrière. Premièrement, la partie __ "pour waka dans wakati O" __ indique que chaque liste de mots (séparés par une phrase) de l'ensemble de données "wakatiO" est stockée dans waka. Ensuite, __ "pour mot dans waka" __ indique que la liste de mots est divisée en chaque mot et stockée dans le mot. -Et, pour chaque mot, __ "dic_inv [mot]" __ fait référence à l'ID du dictionnaire et indique qu'il est stocké dans "wakatiO_n".

Extraction de fonctionnalités à partir de la continuité des mots

N-gram -__ N-gram__ est un modèle utilisé lors de l'extraction de sujets à partir de texte, et utilise la méthode de division de __text en N caractères consécutifs. ・ Pour N divisions, s'il y a une chaîne de caractères "aiueo", N=1 "1-Pour "gramme", "Ah|je|U|e|Divisé en "O" et "2-Pour "gramme", "Ahje|jeU|Ue|eお」と分割される。 ・ J'ai essayé d'extraire des sujets de la "matrice de documents de mots" qui apparaissait dans "Traitement du langage naturel 2", mais c'est __ "cooccurrence de mots (apparaît-elle dans la même phrase)" __ En revanche, N-gramme représente __ "la continuité des mots (dans quel ordre)" __.

-Puisqu'il n'y a pas de méthode pour créer N-gramme, la méthode de stockage d'une liste de chaînes de caractères divisée en listes vides par traitement itératif est utilisée.

list = []
word = ['Bien','conditions météorologiques','est','Hey','。']
#3-Créer un modèle gramme
for i range(len(word)-2):
    list.append([word[i],word[i+1],word[i+2]])
print(list)
#[['Bien','conditions météorologiques','est']['conditions météorologiques','est','Hey']['est','Hey','。']]

-Pour __ "len (mot) -2" __, spécifiez le même nombre afin que "i + 2" en dessous ne dépasse pas la longueur du mot.

2-Création d'une liste de grammes

-Pour le N-gramme ci-dessus, en créant une liste de 2 grammes à partir de "wakatiO_n" __, le nombre d'occurrences (poids) des deux nœuds est calculé __. -D'abord, appliquez le modèle de 2 grammes à "wakatiO_n" pour créer le tableau de 2 grammes "bigramO". Convertissez-le en __DataFrame __ (df_bigramO), groupez-le par "'node1' et'node2 '" (deux nœuds qui calculent des valeurs continues) (__groupby () __), et enfin "__sum () __ ] Pour compléter le nombre total d'apparitions.

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

-Résultat de sortie![Capture d'écran 2020-10-19 16.16.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/7464f40b-c219-42b5 -5f38-523171df5761.png)

Créer un réseau de 2 grammes

-Dans le chapitre 2, un graphe non orienté a été créé avec la similitude des mots comme des arêtes (poids). Cette fois, __ Créez un graphe orienté avec le nombre d'occurrences de la paire de mots comme arête (poids) __. Les données de la source de création sont df_bigramO créées dans la section précédente. -Un graphe orienté se réfère à celui qui a le concept de «direction» au bord __ __. En ce qui concerne le nombre d'occurrences de paires de mots, le graphe orienté a également un sens dans l'information «par ordre d'apparition», c'est-à-dire «quel mot vient en premier». -La méthode de création est exactement la même que pour les graphes non orientés, spécifiez simplement __ "nx.DiGraph" __ dans l'argument de __nx.from_pandas_edgelist () __.

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

・ Résultat![Capture d'écran 2020-10-19 16.52.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/7770095a-ae2c-b57d- 92b7-b7b396299952.png)

Fonctionnalités réseau de 2 grammes

-Semblable au chapitre précédent, il est difficile de comprendre les caractéristiques simplement en regardant le graphique, donc calculez __ "coefficient de cluster moyen" __ et __ "centralité de médiation" __ pour saisir les caractéristiques quantitativement. ・ (Review) Le coefficient de cluster moyen est calculé par __nx.average_clustering () __, et la centralité de la médiation est calculée par __nx.betweenness_centrality () __.

Voir l'effet de chaque mot

・ Pour voir comment chaque mot affecte les uns les autres, visualisez __ "distribution de l'ordre" __. -Dans le cas d'un graphe orienté, il est divisé en "influencé par d'autres mots" __ dans l'ordre __ et "influencé en d'autres termes" __out ordre __. -Vérifiez l'ordre d'entrée en utilisant la méthode __in_degree (weight) __. Il est renvoyé sous la forme de (numéro de nœud, ordre d'entrée). -De même, vérifiez l'ordre de sortie en utilisant la méthode __out_degree (weight) __.

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

·résultat スクリーンショット 2020-10-19 17.21.32.png

Sommaire

・ Pour comprendre les caractéristiques de la continuité de __ mots __, écrivez d'abord __ texte parlé __, puis créez un dictionnaire __ mots __ pour convertir __ données en valeurs numériques. __. -Convertir les données converties en valeurs numériques en N-grammes list, calculer le nombre d'occurrences de chaque combinaison de mots __, et créer un graphique dirigé à partir de celle-ci __. -Comme il est difficile de comprendre les caractéristiques si le graphe reste orienté, les caractéristiques sont appréhendées quantitativement en calculant __ "coefficient de cluster moyen" __ et __ "centralité de médiation" __. -En outre, les caractéristiques quantitatives peuvent être rendues __visualisées en faisant __order distribution __.

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

Recommended Posts

Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Python: traitement du langage naturel
3. Traitement du langage naturel par Python 1-1. Word N-gram
RNN_LSTM2 Traitement du langage naturel
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage 100 Knock-87: similitude des mots
Étudiez le traitement du langage naturel avec Kikagaku
100 traitements du langage naturel frappent le chapitre 4 Commentaire
Traitement du langage naturel pour les personnes occupées
[Traitement du langage naturel] Prétraitement avec le japonais
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
Logivan du langage artificiel et traitement du langage naturel (traitement du langage artificiel)
Traitement du langage 100 knock-86: affichage vectoriel Word
[Traitement du langage 100 coups 2020] Chapitre 7: Vecteur Word
Se préparer à démarrer le traitement du langage naturel
Résumé de l'installation de l'analyseur de traitement du langage naturel
100 traitements linguistiques frappent 03 ~ 05
100 coups de traitement linguistique (2020): 40
100 coups de traitement linguistique (2020): 32
100 coups de traitement linguistique (2020): 47
Traiter le nom de la carte Yugioh en langage naturel --Yugiou Data Science 2. PNL
100 coups de traitement linguistique (2020): 22
100 coups de traitement linguistique (2020): 26
100 coups de traitement linguistique (2020): 34
100 Knocking Natural Language Processing Chapitre 1 (Mouvement préparatoire)
100 coups de traitement linguistique (2020): 28
100 coups de traitement linguistique (2020): 42
100 coups de traitement linguistique (2020): 29
100 coups de traitement linguistique (2020): 49
Le traitement de 100 langues frappe 06 ~ 09
100 coups de traitement linguistique (2020): 43
100 coups de traitement linguistique (2020): 24
100 coups de traitement linguistique (2020): 45
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
100 coups de traitement linguistique (2020): 10-19
[WIP] Pré-traitement des notes dans le traitement du langage naturel
100 coups de traitement linguistique (2020): 30
100 coups de traitement linguistique (2020): 00-09
100 coups de traitement linguistique (2020): 31
100 coups de traitement linguistique (2020): 38
100 coups de traitement linguistique (2020): 48
100 coups de traitement linguistique (2020): 44
100 coups de traitement linguistique (2020): 41
100 coups de traitement linguistique (2020): 37
100 traitement de la langue frapper 00 ~ 02
100 coups de traitement linguistique (2020): 25
100 coups de traitement linguistique (2020): 23
100 coups de traitement linguistique (2020): 33
J'ai essayé le traitement du langage naturel avec des transformateurs.
100 coups de traitement linguistique (2020): 20
100 coups de traitement linguistique (2020): 27
Étude de cas sur le traitement du langage naturel: Fréquence des mots dans'Anne avec un E '
100 coups de traitement linguistique (2020): 46
100 coups de traitement linguistique (2020): 21
Mémo de produits pratique autour du traitement du langage naturel
100 coups de traitement linguistique (2020): 36
Python: apprentissage profond du traitement du langage naturel: principes de base
Profitons du traitement du langage naturel à l'aide de l'API COTOHA
Insoutenable manque d'attention dans le traitement du langage naturel
100 coups de traitement du langage amateur: 41