[PYTHON] Traitement du langage naturel 1 Analyse morphologique

Aidemy 2020/10/29

introduction

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

Quoi apprendre cette fois ・ Qu'est-ce que le traitement du langage naturel? ・ À propos du corpus de texte ・ À propos de l'analyse morphologique

À propos du traitement du langage naturel

・ __ Le "langage naturel" __ est un langage parlé / écrit que les humains utilisent habituellement. Laisser un ordinateur traiter cela s'appelle «traitement du langage naturel». -Le langage naturel utilisé par les humains peut contenir des expressions ambiguës, que les ordinateurs ne peuvent pas «interpréter» __. -Pour que l'ordinateur traite le langage naturel, il est nécessaire de convertir le langage naturel en numeric. -Le traitement du langage naturel est utilisé pour la traduction automatique, la reconnaissance vocale, la recherche d'informations, etc.

Corpus

-__ Corpus__ est __ données qui résument les documents en langage naturel __. Il prend en charge de nombreuses langues et il existe également une version japonaise. ・ Cette fois, nous utiliserons un "corpus de dialogue de discussion". -Les données sont divisées en 100 ensembles de données de discussion __ répertoire "init100" __ et 1046 ensembles de données de discussion __ répertoire "rest1046" __. Cette fois "init100" Utilisez celui-ci. -La structure du fichier est fournie au __ "format JSON" __. Il est divisé en «données de question (parole humaine)» et «données de réponse (parole système)». -Ces données sont stockées dans la touche __ "tours" __ du fichier. Parmi ceux-ci, __ "énoncé" __ correspond aux données vocales, __ "locuteur" __ est __ "U" __, la personne et __ "S" __ est la parole du système. -De plus, le drapeau "ventilation" __ est défini dans les données vocales du système. Il s'agit de déterminer si la parole du système est naturelle. __ "O" signifie naturel, "T" signifie non naturel et "X" signifie extrêmement artificiel (cassé) __. Cet indicateur est donné plusieurs fois pour une seule réponse. ・ À l'intérieur du corpus スクリーンショット 2020-10-18 13.07.11.png

Lecture de corpus / extraction de données

-La lecture du corpus se fait avec __ "open ()" __, tout comme la lecture d'un fichier normal. Concernant la lecture, le fichier étant de type JSON, lisez-le avec __ "json.load ()" __. -Les données peuvent être extraites en spécifiant la clé des données que vous souhaitez acquérir pour le fichier lu.

・ Obtenez l'identifiant de la conversation スクリーンショット 2020-10-18 13.14.23.png

#Extraire et afficher le locuteur et le contenu de l'énoncé
for turn in json_data['turns']:
    print("{}:{}".format(turn['speaker'],turn['utterance']))

Extraction de données analytiques

・ À partir de là, nous analyserons la "conversation naturelle". C'est-à-dire que, puisque la ventilation est utilisée, __ d'abord «le contenu de la parole des gens» et «l'indicateur de la parole du système» sont acquis __. -A ce moment, si des données sont acquises, des données en double seront générées, utilisez donc __drop_duplicates () __ pour supprimer les données en double. Comme ce sont les données Dataframe qui peuvent être transmises à ce moment, il est nécessaire de convertir les données acquises en df.

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

-Dans le code ci-dessus, obtenez d'abord le «numéro de tour de parole», «l'ID du locuteur» et le «contenu de la parole» à partir des «tours» dans lesquels les données d'énoncé sont stockées de la même manière que dans la section précédente, puis à partir du «contenu de la parole (énoncé)». Nous avons acquis le "contenu de la parole humaine" et le "drapeau de la parole du système" et les avons mis dans une liste appelée liste_étiquettes. Enfin, il est transformé en DataFrame et les données en double sont supprimées.

Analyse morphologique

Qu'est-ce que l'analyse morphologique?

-__ L'analyse morphologique __ est l'une des méthodes de traitement du langage naturel, et est une méthode de division d'une phrase par des mots (éléments morphologiques) et de classification des parties. • Par exemple, "Bonjour, c'est Yope!" Si "Bonjour /, / je / est / Ngayope / est /!" Devient. -Il existe des outils d'exécution d'analyse morphologique tels que MeCab et Janome.

MeCab ・ Effectuer une analyse morphologique avec MeCab. L'utilisation est la suivante. Pour k avec __k = MeCab.Tagger ('spécifier le mode de sortie') __ Exécuter en tant que __k.parse ('chaîne de caractères pour l'analyse morphologique') __. Plus précisément, c'est comme suit.

スクリーンショット 2020-10-18 15.06.54.png

-Aussi, si vous ne spécifiez rien sur le mode à définir dans Tagger (), il sera affiché comme ci-dessus, mais si vous définissez __ "'-Owakati'" __, vous pouvez simplement séparer chaque mot (élément de formulaire) par un espace. __ Sortie comme "écriture séparée" __. -En plus, il existe des modes tels que "'-Oyomi'" dont seule la lecture est sortie.

Janome -Lors de l'analyse morphologique avec Janome, vous pouvez créer un objet avec __t = Tokenizer () __ puis l'exécuter avec __t.tokenize ('chaîne de caractères pour l'analyse morphologique') __. -En cas d'écriture séparée, définissez "wakati = True" dans ce deuxième argument.

-Comme une autre fonction, vous pouvez filtrer par partie. ・ Si vous ne voulez obtenir qu'une partie spécifique, __POSKeepFilter (['part of part']) __ ・ Lorsque vous souhaitez exclure une pièce spécifique, __POSStopFilter (['part of part']) __

-Si __Analyzer () __ est utilisé, le traitement jusqu'à ce point et le prétraitement du texte pour l'analyse morphologique peuvent être effectués en même temps. -L'argument à passer est __ (prétraitement, objet Tokenizer (t), filtre) __. -La partie pré-traitement comprend UnicodeNormalizeCharFilter () __ qui normalise la fluctuation de notation des chaînes de caractères Unicode. À propos, cela effectue une normalisation telle que l'unification des alphabets pleine largeur et des katakana en demi-largeur. -En outre, parfois le premier argument ne peut pas être omis même si le prétraitement n'est pas effectué, donc dans un tel cas, écrivez uniquement " [] __". -Pour les deux arguments restants, définissez l'objet et le filtre mentionnés ci-dessus.

-Exécutez Analyzer () comme suit. スクリーンショット 2020-10-18 15.55.35.png

Normalisation du texte

-Puisque l'analyse morphologique dépend du dictionnaire utilisé, l'analyse peut devenir non naturelle si des mots qui ne sont pas dans le dictionnaire apparaissent. ・ Il existe deux types de contre-mesures dans de tels cas. La première consiste à préparer un dictionnaire utilisateur. (Cependant, cela n'est pas expliqué ici) -Une autre méthode est la "normalisation du texte". Il s'agit de supprimer les symboles inutiles dans le texte et d'unifier la notation en tant que prétraitement.

-Par exemple, lorsque "," et "," sont mélangés dans une phrase, il est unifié à l'un ou l'autre, et la notation de "pomme" et "pomme" est également unifiée à l'un ou l'autre. -Utiliser "expression régulière" pour spécifier la chaîne de caractères à normaliser. -Spécifiquement, utilisez __re.sub ("chaîne de caractères à supprimer", "chaîne de caractères après conversion", "texte à supprimer") __, et décrivez la partie spécifiée ici dans une expression régulière. -Les expressions régulières ne sont pas traitées en détail ici. (Voir Qiita pour divers articles)

・ Code (à l'exclusion des caractères alphanumériques de "J'achèterai 10 articles A") スクリーンショット 2020-10-18 16.44.49.png

Sommaire

-Le traitement du langage naturel peut être effectué en demandant à un ordinateur de traiter le langage naturel sous forme de valeur numérique. -Un corpus est constitué de __ données qui résument les documents en langage naturel . - L'analyse morphologique __ est l'une des méthodes de traitement du langage naturel, et est une méthode de division d'une phrase par des mots (éléments morphologiques) et de classification des parties. ・ L'analyse morphologique peut être effectuée avec "MeCab" ou "Janome". -Comme l'analyse morphologique dépend du dictionnaire utilisé, il est important d'effectuer un prétraitement à l'aide d'expressions __normal afin que le dictionnaire puisse être jugé.

Cette fois, c'est fini. Merci d'avoir lu jusqu'à la fin.

Recommended Posts

Traitement du langage naturel 1 Analyse morphologique
100 coups de traitement du langage 2020: Chapitre 4 (analyse morphologique)
100 Language Processing Knock 2020 Chapitre 4: Analyse morphologique
100 Traitement du langage Knock Chapitre 4: Analyse morphologique
[Traitement du langage 100 coups 2020] Chapitre 4: Analyse morphologique
100 Language Processing Knock 2015 Chapitre 4 Analyse morphologique (30-39)
100 traitements du langage naturel frappent Chapitre 4 Analyse morphologique (première moitié)
100 traitements du langage naturel frappent Chapitre 4 Analyse morphologique (seconde moitié)
Python: traitement du langage naturel
Traitement du langage 100 coups Chapitre 4: Analyse morphologique 31. Verbes
RNN_LSTM2 Traitement du langage naturel
■ [Google Colaboratory] Prétraitement du traitement du langage naturel et janome
100 traitements du langage frappent l'analyse morphologique apprise au chapitre 4
100 Language Processing Knock-57: Analyse des dépendances
Traitement du langage naturel 3 Continuité des mots
100 Language Processing Knock-56: analyse de co-référence
Traitement du langage naturel 2 similitude de mots
100 Language Processing Knock-30 (en utilisant des pandas): lecture des résultats de l'analyse morphologique
Le traitement du langage naturel à 100 coups
100 points de traitement du langage naturel Chapitre 5 Analyse des dépendances (premier semestre)
Étudiez le traitement du langage naturel avec Kikagaku
100 Language Processing Knock 2015 Chapitre 5 Analyse des dépendances (40-49)
100 traitements du langage naturel frappent le chapitre 4 Commentaire
Traitement du langage naturel pour les personnes occupées
[Traitement du langage 100 coups 2020] Chapitre 5: Analyse des dépendances
[Traitement du langage naturel] Prétraitement avec le japonais
Logivan du langage artificiel et traitement du langage naturel (traitement du langage artificiel)
100 Language Processing Knock 2020 Chapitre 5: Analyse des dépendances
100 traitement du langage knock-59: analyse de la formule S
Se préparer à démarrer le traitement du langage naturel
Résumé de l'installation de l'analyseur de traitement du langage naturel
[Pour les débutants] Analyse du langage à l'aide de l'outil de traitement du langage naturel "GiNZA" (de l'analyse morphologique à la vectorisation)
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): 35
100 coups de traitement linguistique (2020): 39
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
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