Aidemy 2020/10/30
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 ・ ・
・ 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)
-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.
・ 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".
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.
-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
-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)
-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
・ 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)
-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 () __.
・ 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
·résultat
・ 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