[PYTHON] Apprenez les bases de la classification de documents par traitement du langage naturel, modèle de sujet

Même dans le langage naturel, ces jours-ci, c'est souvent un «apprentissage profond» comme si vous demandiez de la bière crue. En fait, l'apprentissage en profondeur peut souvent enregistrer une précision élevée, mais en réalité, cette précision peut être enregistrée même avec un modèle de base et, dans certains cas, elle peut être vaincue.

Cela s'est produit dans un article publié par Deep Mind, une institution de recherche bien connue.

machine-comprehension-11-638.jpg

Récemment, il y a eu des articles tels que Atteindre la plus grande précision même avec un modèle qui est souvent utilisé comme référence. De cette façon, même un modèle qui a été kické comme ligne de base ne peut pas être placé dans un coin inattendu.

Cette fois, je vais reprendre le modèle thématique, qui est une sorte de méthode de base dans le traitement du langage naturel. Il s'agit d'un modèle utilisé pour la classification des documents, mais c'est aussi un modèle très polyvalent qui peut incorporer diverses hypothèses telles que l'hypothèse de l'existence d'un auteur lors de la classification des documents (modèle de sujet d'auteur).

Cette fois, je voudrais présenter le mécanisme et expliquer la méthode de mise en œuvre.

Qu'est-ce qu'un modèle de sujet?

Le modèle thématique est un type de modèle stochastique. En d'autres termes, nous estimons la «probabilité d'apparition» de quelque chose. Dans le modèle thématique, il s'agit de la «probabilité qu'un mot apparaisse» dans une phrase. Si vous pouvez bien estimer cela, vous serez en mesure de comprendre des phrases dans lesquelles des mots similaires apparaissent. En d'autres termes, le modèle de sujet est un modèle qui estime la «probabilité d'apparition d'un mot dans un document».

De plus, quand j'entends cela, je pense que les phrases peuvent être générées à partir du modèle de sujet (apprentissage de la probabilité d'apparition des mots), mais comme mentionné ci-dessus, le modèle de sujet estime la «probabilité d'apparition des mots». Oui, je me fiche des règles de grammaire. En d'autres termes, le modèle thématique est un modèle qui se concentre sur les mots des phrases et leur fréquence d'occurrence.

Maintenant, comment estimer la "probabilité d'apparition des mots"? En bref, il compte les mots qui apparaissent réellement dans le document et fait une estimation en fonction de cela. Le modèle de rubrique suppose que le type et le nombre de mots qui apparaissent dépendent du thème (= catégorie). Sur le plan de l'image, c'est une hypothèse naturelle, car les mots qui apparaissent dans les sujets de politique et des arts du spectacle sont différents.

Le modèle change en fonction de l'unité dans laquelle ce «sujet» est considéré comme existant. Dans la figure ci-dessous, la case carrée représente le document et la couleur de son contenu représente le sujet.

1.png

En d'autres termes, le modèle thématique introduit cette fois est un modèle avec les hypothèses les plus détaillées. En supposant que le document est composé de plusieurs sujets, il est possible d'en déduire la composition du document telle que "70% de cet article est du sport, 20% du divertissement ..." Cependant, vous pourrez appréhender quantitativement les différences entre les documents (ce document est environ 10% plus politique que ce document, etc.).

Comment implémenter un modèle de sujet

Voyons maintenant comment implémenter réellement le modèle de sujet. Ce qui suit suppose une implémentation en Python.

Le plus simple à implémenter est gensim. Comme il est dit "modélisation de sujets pour les humains", il peut être implémenté en quelques lignes seulement.

Il peut également être implémenté dans PyMC3 et PyStan. Les deux PyMC / PyStan sont des bibliothèques pour estimer les paramètres de modèles statistiques appelés échantillonneurs MCMC. Alors, bien sûr, vous devez construire le modèle statistique lui-même. PyStan est une interface pour Python d'une bibliothèque appelée Stan, et Stan lui-même peut également être utilisé à partir de C ++ et R.

Si vous souhaitez le personnaliser, vous pouvez utiliser gensim si vous souhaitez le rendre plus facile, et PyMC / PyStan si vous souhaitez le personnaliser en construisant votre propre modèle (d'ailleurs, l'installation est également gênante dans cet ordre). Cette fois, j'aimerais utiliser gensim en mettant l'accent sur la facilité d'utilisation. De là, je vais expliquer en fonction du code réel. Le code d'explication est placé dans le référentiel suivant, veuillez donc vous y référer si nécessaire.

icoxfog417/gensim_notebook (Ce sera encourageant si vous me donnez une étoile m (_ _) m)

Veuillez consulter ici pour les paramètres d'environnement lors du développement à l'aide de l'apprentissage automatique avec Python. Présentation de l'utilisation d'un package appelé Miniconda. Si vous construisez l'environnement comme décrit dans l'article ci-dessus, le gensim peut être entré d'un seul coup avec conda install gensim (idem pour PyMC. PyStan n'est pas si facile à entrer ...). Dans le référentiel ci-dessus, iPython notebook, un outil permettant de créer des documents contenant du code Python, est utilisé pour créer des documents explicatifs. Sur cette base, nous expliquerons ce qui suit.

gensim_notebook/topic_model_evaluation.ipynb

Obtenez des données

Tout d'abord, récupérez les données cibles.

Cette fois-ci, les données pour créer le modèle de sujet ont été obtenues auprès de Hot Pepper Beauty API fourni par Recruit. La motivation était que les données ne m'étaient pas du tout familières, donc j'étais curieuse de savoir à quoi elles ressembleraient. Faites une nouvelle inscription à partir du site ci-dessus et obtenez une clé API. Vous pouvez ensuite télécharger les données du salon de coiffure en exécutant scripts / download_data.py dans le référentiel.

Prétraitement des données

Ensuite, prétraitez les données. Plus précisément, il convertit une phrase en un ensemble mot / occurrence. Cet ensemble est appelé un corpus et les mots sont représentés par des identifiants dans le corpus. Le lien entre cet identifiant et le mot réel s'appelle ici un dictionnaire. Le processus de création de ce corpus / dictionnaire est le suivant.

  1. Décomposer les phrases en mots (analyse morphologique) et les compter
  2. Suppression des mots inutiles (suppression des mots vides, etc.)
  3. Unification des mots (issue)

Le processus de décomposition d'une phrase en mots est séparé par un espace en anglais, mais ce n'est pas si facile en japonais. Par conséquent, il est courant d'utiliser une bibliothèque qui peut effectuer une analyse morphologique. MeCab est célèbre comme cette bibliothèque, et un dictionnaire appelé mecab-ipadic-neologd qui enregistre les mots nouvellement apparus est également fourni.

Cependant, en particulier sous Windows, l'installation est compliquée, donc je pense qu'il est bon d'utiliser janome, qui est construit uniquement avec Python et facile à installer. Dans cet échantillon, l'analyse morphologique à l'aide de la bibliothèque ci-dessus n'est pas effectuée afin qu'elle puisse être exécutée facilement. Puisque les "conditions spéciales" dans les données n'étaient que des informations séparées par des barres obliques, je les utilise séparément.

b20fe2c916266f2ac4b38004755fe09c6ed349ff.png

Éliminer les mots inutiles consiste à supprimer les mots que vous jugez inutiles pour la classification. Plus précisément, les mots sont les suivants.

Et, unifier les mots signifie unifier des choses qui ne diffèrent que par la forme d'utilisation, comme «délicieux» et «délicieux». C'est ce qu'on appelle l'extraction.

Dans le traitement du langage naturel, il n'est pas exagéré de dire que la précision est presque déterminée par la mesure dans laquelle ces prétraitements peuvent être effectués. Le script scripts / make_corpus.py pour créer un corpus vous permet d'effectuer les opérations ci-dessus avec différentes options, veuillez donc essayer différents paramètres.

Construire un modèle de sujet

Une fois que vous avez un corpus et un dictionnaire, construisez un modèle basé sur celui-ci. Cependant, avec gensim, la construction d'un modèle n'est qu'une ligne.

m = models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=3)

"En supposant combien de sujets il y a (num_topics)" doit être défini. En d'autres termes, vous devez estimer le nombre de sujets susceptibles d'exister dans tout le document (en fait, il existe également une méthode appelée processus Diricre qui estime le nombre de sujets valables).

Pour déterminer le nombre à définir, vous devez évaluer le modèle.

Évaluation du modèle thématique

Tout d'abord, pour faire une évaluation, le corpus est divisé en apprentissage et évaluation de la même manière que l'apprentissage automatique normal. La classification est apprise pour l'apprentissage et, par conséquent, on examine si l'évaluation (= phrase inconnue) peut être correctement classée.

Un indice appelé perplexité est utilisé pour cette évaluation. Le nombre inverse de perplexité indique le degré auquel l'apparence d'un mot dans un document peut être prédite, de sorte que la valeur la plus élevée est 1, et la valeur devient plus grande à mesure que le modèle devient moins précis (2 chiffres conviennent, et la première moitié de 3 chiffres est OK). Après cela, je pense que c'est mauvais, et dans le cas de 1 chiffre, il vaut mieux revoir le modèle et la méthode de calcul de la perplexité pour d'éventuelles erreurs).

Dans Faire partie du modèle de sujet dans le commentaire, la perplexité est calculée en changeant le nombre de sujets, alors vérifiez-le. s'il vous plaît essayez.

8d37f421f8271baea5c8e21d7d97a09e6c8fee12.png

Et la visualisation du sujet facilite l'évaluation du modèle. La méthode sera expliquée ci-dessous.

Distance entre les sujets

Comme le sujet est une classification de phrases, il est préférable de classer sans omission / duplication, c'est-à-dire s'il est clairement séparé. En d'autres termes, c'est un bon modèle pour avoir une bonne distance entre les sujets et les classifications.

Il y a KL-divergence comme indice pour mesurer la distance entre chaque classification (= distribution des mots de chaque sujet). En utilisant cela, ce qui suit est une illustration de la distance entre les sujets (créé avec 3 sujets, la valeur de l'axe est le numéro du sujet).

9fd51e91164caa900ad51bffb3d74c33adebf005.png

La figure ci-dessus est un mauvais exemple. Plus les sujets sont éloignés, plus la couleur devient claire, donc le fait que la figure entière soit sombre signifie que des sujets similaires (= catégories) sont apparus. Dans ce cas, pensez à réduire le nombre de sujets.

Structure thématique des phrases

Lors de la classification des phrases, il est préférable de dire clairement que le sujet de cette phrase est xx. En d'autres termes, il est préférable d'avoir un thème principal clair pour chaque phrase.

Par conséquent, ce qui suit est une illustration des sujets qui composent chaque phrase (après la vérification ci-dessus, le nombre de sujets a été réduit à 2). 200 documents sont choisis au hasard et le rapport de composition des sujets dans chaque document est affiché.

689a55fb7316f98fee7d97ef6576e0ea1879973d.png

Référence du sujet

Enfin, voyons quels mots sont susceptibles d'apparaître dans chaque sujet. Les mots ne sont pas dupliqués entre les sujets, et c'est si bon qu'il semble que vous puissiez deviner de quel type de sujet il s'agit à partir d'un groupe de mots.

58fd2e84dfc244e44ab6a5acca61112906cfc2ce.png

En regardant cela, au moins le sujet n ° 1 peut être déduit des mots-clés "petit salon" et "d'un styliste" comme étant un petit salon (compte tenu du mot-clé "système de réservation complet", il est de grande classe. Cela peut être un endroit semblable à un magasin). Le sujet n ° 0 a l'impression que c'est un salon de coiffure relativement grand avec beaucoup de personnel et est ouvert toute l'année. Quand je regarde la page d'accueil du salon de coiffure, je pense que le sujet n ° 0 a une sensation majeure, et le sujet n ° 1 a une sensation de magasin spécialisé.

De plus, une méthode qui permet au système lui-même de découvrir et de classer les caractéristiques des données sans être enseignée par une personne comme un modèle de sujet est appelée apprentissage non supervisé (à l'inverse, une méthode qui entraîne les données et leur classification en tant qu'ensemble). Est appelé apprentissage supervisé). Bien que ce type d'apprentissage non supervisé ait l'avantage de pouvoir être démarré immédiatement s'il y a des données, il y a aussi l'inconvénient qu'il est difficile d'interpréter les résultats car ** "comment classer" est laissé au modèle comme décrit ci-dessus *. *.

Application à l'application

De cette façon, en utilisant gensim, vous pouvez facilement créer un modèle de sujet, saisir les caractéristiques des phrases et les classer. En appliquant cela à l'application, je pense que les fonctions suivantes peuvent être implémentées.

De plus, comme mentionné au début, le modèle thématique est un modèle très polyvalent, il y a donc de nombreux développements.

Plus précisément, un modèle de sujet correspondant (modèle de sujet de correspondance) qui permet de prendre en compte des informations supplémentaires telles qu'un index d'évaluation en plus des informations textuelles telles que des critiques, et un modèle de sujet d'auteur qui prend en compte l'auteur qui a écrit le texte (sujet d'auteur) modèle) etc. Des tentatives ont également été faites pour adapter la classification des images en traitant les caractéristiques de l'image comme des mots (cela permet à la fois au texte et aux images d'être manipulés en même temps, de sorte que les images sont automatiquement plafonnées. Il est appliqué à la recherche sur l'annotation etc.).

J'espère que ce commentaire vous aidera à mettre vos idées en forme.

Les références

Voici quelques livres / articles utiles pour ceux qui veulent en savoir plus.

Les articles suivants expliquent soigneusement des idées de base telles que la probabilité.

Si vous souhaitez l'implémenter avec PyMC, ce tutoriel vous sera utile.

Recommended Posts

Apprenez les bases de la classification de documents par traitement du langage naturel, modèle de sujet
Classification des Pokémon par modèle de sujet
Langage naturel: Doc2Vec Part2 - Classification des documents
Apprenez les bases de Python ① Débutants élémentaires
Évaluer la précision du modèle d'apprentissage par test croisé de scikit learn
[Word2vec] Visualisons le résultat du traitement en langage naturel des avis des entreprises
Apprenez à nouveau les bases de Theano
[Linux] Découvrez les bases des commandes shell
Laissez l'API COTOHA faire les choses difficiles - Introduction à "apprendre en utilisant" le traitement du langage naturel -
[Pyro] Modélisation statistique par le langage de programmation probabiliste Pyro ③ ~ Modèle d'analyse distribuée, modèle linéaire normal ~
Python: apprentissage profond du traitement du langage naturel: principes de base
Insoutenable manque d'attention dans le traitement du langage naturel
Traitement d'image par matrice Basics & Contents-Reinventor of Python image processing-
Modèle utilisant un réseau neuronal convolutif dans le traitement du langage naturel
Vérification des performances du prétraitement des données dans le traitement du langage naturel
J'ai essayé la méthode la plus simple de classification de documents multi-étiquettes
Vue d'ensemble du traitement du langage naturel et de son prétraitement des données
Python: traitement du langage naturel
RNN_LSTM2 Traitement du langage naturel
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
Traitement du langage naturel (données originales) avec Word2Vec développé par des chercheurs Google américains
Types de prétraitement dans le traitement du langage naturel et leur puissance
100 points de traitement du langage naturel Chapitre 2 Bases des commandes UNIX (deuxième moitié)
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
100 traitement de la langue knock-42: Affichage de la phrase de la personne concernée et de la personne concernée
Traitement linguistique 100 knocks-29: Obtenez l'URL de l'image du drapeau
■ [Google Colaboratory] Prétraitement du traitement du langage naturel et janome
100 points de traitement du langage naturel Chapitre 2 Bases des commandes UNIX (première moitié)
Analysez le modèle thématique pour devenir romancier avec GensimPy3
(Version préservée) Traitement du langage naturel Liste des articles que les tout-petits devraient lire en premier par Team AI
Modèle de prédiction de langage par TensorFlow
Traitement du langage naturel 1 Analyse morphologique
Apprendre avec l'enseignant 1 Principes de base de l'apprentissage avec l'enseignant (classification)
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Traitement du langage naturel japonais utilisant Python3 (4) Analyse des émotions par régression logistique
Créez facilement un modèle de traitement du langage naturel avec BERT + LightGBM + optuna
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Pourquoi l'expression distribuée des mots est-elle importante pour le traitement du langage naturel?
Principes de base de Python x SIG (1)
100 points de traitement du langage naturel Chapitre 2 Bases des commandes UNIX (deuxième moitié)
Principes de base de Python x SIG (3)
Principes de base de Python x SIG (partie 2)
Comprendre la partie "temporaire" d'UNIX / Linux
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Visualisez la trajectoire de Hayabusa 2
Visualisez l'état de la réponse du recensement national 2020
Apprenez les bases de la classification de documents par traitement du langage naturel, modèle de sujet
[Python] Visualisez les informations acquises par Wireshark
Visualisez la valeur limite du perceptron multicouche
Visualisez les effets de l'apprentissage profond / de la régularisation
Pandas du débutant, par le débutant, pour le débutant [Python]
Visualisez les données d'exportation du journal Piyo