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.
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.
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.
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.).
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
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.
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.
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.
É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.
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.
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.
Et la visualisation du sujet facilite l'évaluation du modèle. La méthode sera expliquée ci-dessous.
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).
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.
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é.
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.
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 *. *.
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.
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.