[PYTHON] 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"

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 05, j'écrirai mes propres points.

Préparation

Aperçu des chapitres

À l'étape 04, vous apprendrez la méthode d'extraction de caractéristiques, et à l'étape suivante 06, vous apprendrez à partir du vecteur de caractéristiques extrait pour créer un classificateur. À l'étape 05, vous découvrirez la méthode de compression de dimension qui traite le vecteur de caractéristiques dans la forme souhaitée pour le discriminateur pendant le processus.

--Analyse sémantique latente (LSA)

05.1 Prétraitement des fonctionnalités

BoW est une version vectorisée de la fréquence d'occurrence des mots, et «la distribution des valeurs des vecteurs caractéristiques a tendance à être très biaisée».

Il était difficile de comprendre l'exemple du livre de référence, je vais donc le vérifier moi-même.

test_quantileTransformer.py


import numpy as np
import MeCab
import pprint

from sklearn.preprocessing import QuantileTransformer
from sklearn.feature_extraction.text import CountVectorizer

def _tokenize(text):
~~

texts = [
    'Voitures Voitures Les voitures courent vite',
    'Le vélo tourne vite',
    'Le vélo tourne lentement',
    'Le véhicule à trois roues tourne lentement',
    'La programmation est amusante',
    'Python est Python Python est Python Python est amusant',
]

vectorizer = CountVectorizer(tokenizer=_tokenize, max_features = 5)
bow = vectorizer.fit_transform(texts)
pprint.pprint(bow.toarray())

qt = QuantileTransformer()
qtd = qt.fit_transform(bow)
pprint.pprint(qtd.toarray())

Exemple d'exécution


array([[0, 3, 0, 1, 3],
       [0, 1, 0, 1, 0],
       [0, 2, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 0, 0, 0],
       [5, 5, 0, 0, 0]], dtype=int64)
array([[0.00000000e+00, 7.99911022e-01, 0.00000000e+00, 9.99999900e-01,
        9.99999900e-01],
       [0.00000000e+00, 9.99999998e-08, 0.00000000e+00, 9.99999900e-01,
        0.00000000e+00],
       [0.00000000e+00, 6.00000000e-01, 9.99999900e-01, 9.99999900e-01,
        0.00000000e+00],
       [0.00000000e+00, 9.99999998e-08, 9.99999900e-01, 9.99999900e-01,
        0.00000000e+00],
       [0.00000000e+00, 9.99999998e-08, 0.00000000e+00, 0.00000000e+00,
        0.00000000e+00],
       [9.99999900e-01, 9.99999900e-01, 0.00000000e+00, 0.00000000e+00,
        0.00000000e+00]])

05.2 Analyse sémantique latente (LSA) 05.3 Analyse des éléments principaux (ACP)

Contenu LAS PCA
Aperçu Une méthode pour obtenir un vecteur qui exprime un document au niveau de «signification» derrière un «mot» basé sur un groupe de vecteurs de caractéristiques qui représentent la relation entre un document et un mot tel que BoW. Méthode pour trouver "la direction dans laquelle les points de données sont largement dispersés"
Manipulation mathématique SVD (décomposition en valeurs singulières) EVD (décomposition de valeur unique)
la mise en oeuvre svd = sklearn.decomposition.TruncatedSVD()
svd.fit_transform()
evd = sklearn.decomposition.PCA()
evd.fit_transform()
Importance de chaque dimension singular_values_Vous pouvez voir l'importance de chaque dimension après compression en vous référant à. explained_variance_ratio_Le taux de cotisation cumulatif peut être trouvé en se référant à.
Réduction de dimension À l'instanciation, n_Spécifier les composants À l'instanciation, n_Spécifier les composants

Points à considérer dans les deux méthodes

Modèle LSA-Topic

Le modèle de sujet, qui consiste à savoir "si une phrase et une autre phrase ont la même signification" au lieu de donner explicitement l'ID de classe aux données d'apprentissage, ne donne pas explicitement la bonne réponse (ID de classe). C'est une sorte d '"apprentissage sans professeur".

Blanchiment PCA

En décorrélant chaque composante du vecteur (en multipliant le vecteur cible par le vecteur propre obtenu par PCA) pour obtenir la dispersion moyenne 0 1, «l'extension dans chaque direction axiale» que les données avaient à l'origine a été effacée. On peut s'attendre à ce que les performances d'identification soient améliorées.

Méthode de visualisation PCA

Puisqu'un vecteur de grande dimension peut être converti en un vecteur de faible dimension, il peut également être utilisé comme méthode de visualisation.

05.4 Application / mise en œuvre

Je ne pouvais pas le faire simplement en réécrivant le SVD tronqué en PCA. (Vous ne pouvez pas entrer clairsemé dans PCA)

Exemple d'exécution


    def train(self, texts, labels):
        vectorizer = TfidfVectorizer(tokenizer=self._tokenize, ngram_range=(1, 3))
        bow = vectorizer.fit_transform(texts).toarray()

        pca = PCA(n_components = 500)
        pca_feat = pca.fit_transform(bow)

        classifier = SVC()
        classifier.fit(pca_feat, labels)

        self.vectorizer = vectorizer
        self.pca = pca
        self.classifier = classifier

    def predict(self, texts):
        bow = self.vectorizer.transform(texts).toarray()
        pca_feat = self.pca.transform(bow)
        return self.classifier.predict(pca_feat)

Il peut être exécuté en arrêtant la notation du pipeline, toarray () le résultat (clairsemé) du vectorizer, puis en le saisissant dans PCA.

Recommended Posts

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 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 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 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 3 Étape 13 Mémo «Réseaux de neurones récurrents»
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"
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" -Chapitre 1 Mémo "Connaissances préliminaires avant de commencer les exercices"
[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
[Traitement du langage naturel] J'ai essayé de visualiser les sujets d'actualité cette semaine dans la communauté Slack
[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]