Aidemy 2020/10/29
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
・ __ 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__ 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
-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
#Extraire et afficher le locuteur et le contenu de l'énoncé
for turn in json_data['turns']:
print("{}:{}".format(turn['speaker'],turn['utterance']))
・ À 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
-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.
-__ 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.
-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.
-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")
-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