[PYTHON] Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»

Contenu

Ceci est un mémo pour moi pendant que je lis Introduction aux applications de traitement du langage naturel en 15 étapes. Cette fois, au chapitre 2, étape 06, j'écrirai mes propres points.

Préparation

Aperçu des chapitres

En apprenant avec le vecteur d'entités et l'ID de classe comme entrées, l'ID de classe peut être prédit à partir du vecteur d'entités.

06.1 Maîtriser le classificateur

Vous pouvez facilement changer de classificateur en assignant un classificateur à la variable classifier.

# SVC
from sklearn.svm import SVC
classifier = SVC()

# RandomForest
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier()

06.2 SVM(Support Vector Machine)

Le contour du SVM de base est omis. Un problème dans lequel un espace de caractéristiques ne peut pas être séparé et identifié sur une surface d'identification droite ou plate (surface d'identification linéaire) est appelé un problème ** linéairement inséparable **. Il existe les méthodes suivantes pour résoudre ce problème.

SVM à marge rigide, SVM à marge souple

Il existe deux types, ** SVM à marge souple ** et SVM simple ** à marge rigide **, qui tentent de définir la surface de la frontière de manière à "permettre à la limite de dépasser et de réduire la saillie autant que possible". Le degré de tolérance pour la protrusion peut être spécifié au moment de l'instanciation (par défaut 1.0).

noyau

Dans les cas où la limite ne peut pas être séparée dans la mesure où la limite peut dépasser, la méthode du noyau est utilisée dans laquelle le vecteur d'entités est copié dans un espace d'entités plus élevé en dimension que l'espace d'entités d'origine et la surface de discrimination y est définie. Le type de noyau peut être spécifié au moment de l'instanciation.

--RBF Kernel (Gauss Kernel): Spécification par défaut, la plus orthodoxe --Polygon kernel: populaire dans le traitement du langage naturel --Autre --Kernel inutilisé (SVM linéaire)

Classe fournie par Scikit-learn

06.3 Ensemble

La méthode de combinaison de plusieurs classificateurs pour former un classificateur est appelée un ensemble. Bien que l'explication de l'arbre de décision soit omise, les propriétés de l'ensemble d'arbre de décision sont les suivantes.

Les méthodes d'ensemble typiques sont le bagging et le boosting (reference).

--Bagage --Apprendre séparément plusieurs fois en utilisant une partie des données, et enfin faire correspondre les résultats - Random Forest

article Random Forest GBDT
Méthode d'ensemble Ensachage Booster
Méthode sklearn.ensemble.RandomForestClassifier() skleran.ensemble.GradientBoostingClassifier()
Créer un arbre de décision Quelques arbres profonds De nombreux arbres peu profonds
Courir - Plus rapide et plus efficace en mémoire que Random Forest

06.4 méthode de voisinage k

Il s'agit d'un classificateur qui sélectionne k vecteurs d'entités proches du vecteur d'entités d'entrée à partir des données d'apprentissage et prend une décision majoritaire par leur ID de classe. En fonction de la valeur numérique de k, l'ID de classe identifié peut changer, ou si le nombre d'ID de classe dans les données d'apprentissage est biaisé, le résultat souhaité peut ne pas être obtenu.

Distance pour mesurer la proximité

type Contenu
Distance euclidienne La longueur du vecteur dans l'espace
Distance de Manhattan Somme des longueurs axiales dans l'espace
Distance de Minkovsky Une distance généralisée de distance euclidienne et de distance de Manhattan
Distance de Levenstein Insérez un caractère à la fois pour représenter la distance entre les chaînes/Effacer/Nombre de fois pour remplacer et créer la même chaîne

Paramétrique et non paramétrique

article paramétrique ノンparamétrique
réglages des paramètres Il faut faire attention aux paramètres pour que la surface d'identification puisse être réglée correctement. Vous n'avez pas à penser aux paramètres liés à la surface d'identification
Coût de calcul Le coût de calcul de la surface d'identification est requis au moment de l'apprentissage
Le coût de calcul au moment de l'identification est presque constant
Le coût de calcul au moment de l'apprentissage est pratiquement nul
Le coût de calcul au moment de l'identification augmente en fonction de la quantité de données d'entraînement
Nombre de données d'entraînement requises Relativement peu Relativement nombreux
Exemple de discriminateur SVM méthode de voisinage k

06.5 Appliquer à Dialogue Agent

Ajouts / modifications par rapport au chapitre précédent

  1. Identifiant: SVM → Forêt aléatoire
  2. TF-IDF ngram_range: 1 ~ 3 → 1 ~ 2
~~
pipeline = Pipeline([
#    ('vectorizer', TfidfVectorizer(tokenizer=self._tokenize, ngram_range=(1, 3))),
    ('vectorizer', TfidfVectorizer(tokenizer=self._tokenize, ngram_range=(1, 2))),
#    ('classifier', SVC()),
    ('classifier', RandomForestClassifier(n_estimators=30)),
])
~~

Résultat d'exécution


# evaluate_dialogue_agent.Modifiez le nom du module de chargement py si nécessaire
from dialogue_agent import DialogueAgent

$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python evaluate_dialogue_agent.py
0.61702127

Recommended Posts

Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 09 Mémo "Identifier par Neural Network"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 4 Etape 14 Mémo "Recherche Hyper Paramètre"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 05 Mémo "Conversion de quantité de fonctionnalités"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 12 Mémo "Réseaux de neurones convolutifs"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 01 Mémo «Créer un agent de dialogue»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 2 Étape 03 Mémo "Analyse morphologique et écriture écrite"
Essayons le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 10 Mémo "Détails et amélioration du réseau neuronal"
[WIP] Pré-traitement des notes dans le traitement du langage naturel
Résumé du début au chapitre 1 de l'introduction aux modèles de conception appris en langage Java
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Réunion de changement d'emploi] Essayez de classer les entreprises en traitant le bouche-à-oreille en langage naturel avec word2vec
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
Résumé du chapitre 2 de l'introduction aux modèles de conception appris en langage Java
Chapitre 4 Résumé de l'introduction aux modèles de conception appris en langage Java
Résumé du chapitre 3 de l'introduction aux modèles de conception appris en langage Java
[Introduction à RasPi4] Construction de l'environnement, système de traitement du langage naturel mecab, etc. .. .. ♪
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
100 traitements du langage naturel frappent le chapitre 4 Commentaire
100 Language Processing Knock Chapitre 1 en Python
Essayez Cython dans les plus brefs délais
Se préparer à démarrer le traitement du langage naturel
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
100 Knocking Natural Language Processing Chapitre 1 (Mouvement préparatoire)
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Mémo de produits pratique autour du traitement du langage naturel
Même si le langage de développement est changé en python3 dans Cloud9, la version 2 est affichée en python --version
Laissez l'API COTOHA faire les choses difficiles - Introduction à "apprendre en utilisant" le traitement du langage naturel -
J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA
J'ai essayé de résoudre la version 2020 de 100 coups de traitement de langue [Chapitre 1: Mouvement préparatoire 00-04]
J'ai essayé de résoudre la version 2020 de 100 traitements linguistiques [Chapitre 1: Mouvement préparatoire 05-09]