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.
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.
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.
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).
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)
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 |
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.
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 |
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 |
Ajouts / modifications par rapport au chapitre précédent
~~
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