[PYTHON] Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"

Inhalt

Dies ist ein Memo für mich, während ich Einführung in Anwendungen zur Verarbeitung natürlicher Sprache in 15 Schritten lese. Dieses Mal werde ich in Kapitel 2, Schritt 05 meine eigenen Punkte aufschreiben.

Vorbereitung

Kapitelübersicht

In Schritt 04 lernen Sie die Feature-Extraktionsmethode und im nächsten Schritt 06 lernen Sie aus dem extrahierten Feature-Vektor, um einen Klassifikator zu erstellen. In Schritt 05 lernen Sie die Dimensionskomprimierungsmethode kennen, mit der der Merkmalsvektor während des Prozesses in die gewünschte Form für den Diskriminator verarbeitet wird.

05.1 Merkmalsvorbehandlung

BoW ist eine vektorisierte Version der Häufigkeit des Auftretens von Wörtern, und "die Verteilung von Merkmalsvektorwerten ist tendenziell sehr voreingenommen."

Es war schwierig, das Beispiel des Nachschlagewerks zu verstehen, deshalb werde ich es selbst überprüfen.

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 = [
    'Autos Autos Autos fahren schnell',
    'Das Fahrrad läuft schnell',
    'Das Fahrrad läuft langsam',
    'Dreirad fährt langsam',
    'Programmieren macht Spaß',
    'Python ist Python Python ist Python Python macht Spaß',
]

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())

Ausführungsbeispiel


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 Latent Semantic Analysis (LSA) 05.3 Hauptelementanalyse (PCA)

Inhalt LAS PCA
Überblick Eine Methode zum Erhalten eines Vektors, der ein Dokument auf der Ebene "Bedeutung" hinter einem "Wort" ausdrückt, basierend auf einer Gruppe von Merkmalsvektoren, die die Beziehung zwischen einem Dokument und einem Wort wie BoW darstellen. Methode zum Finden der "Richtung, in der Datenpunkte stark gestreut sind"
Mathematische Manipulation SVD (Singularwertzerlegung) EVD (eindeutige Wertzerlegung)
Implementierung svd = sklearn.decomposition.TruncatedSVD()
svd.fit_transform()
evd = sklearn.decomposition.PCA()
evd.fit_transform()
Bedeutung jeder Dimension singular_values_Sie können die Wichtigkeit jeder Dimension nach der Komprimierung unter Bezugnahme auf sehen. explained_variance_ratio_Den kumulierten Beitragssatz finden Sie unter.
Dimensionsreduzierung Bei der Instanziierung_Geben Sie die Komponenten an Bei der Instanziierung_Geben Sie die Komponenten an

Bei beiden Methoden zu berücksichtigende Punkte

LSA-Themenmodell

Das Themenmodell, bei dem es darum geht, "ob ein Satz und ein anderer Satz dieselbe Bedeutung haben", anstatt den Trainingsdaten explizit die Klassen-ID zuzuweisen, gibt nicht explizit die richtige Antwort (Klassen-ID). Es ist eine Art "Lernen ohne Lehrer".

PCA-Bleaching

Durch Aufkorrelieren jeder Komponente des Vektors (Multiplizieren des Zielvektors mit dem durch PCA erhaltenen Eigenvektor), um die durchschnittliche 0-Dispersion 1 zu erhalten, wurde die "Ausdehnung in jeder axialen Richtung", die die Daten ursprünglich hatten, gelöscht. Es ist zu erwarten, dass die Identifikationsleistung verbessert wird.

PCA-Visualisierungsmethode

Da ein hochdimensionaler Vektor in einen niedrigdimensionalen Vektor umgewandelt werden kann, kann er auch als Visualisierungsmethode verwendet werden.

05.4 Anwendung / Implementierung

Ich konnte es nicht einfach tun, indem ich die abgeschnittene SVD in PCA umschrieb. (Sie können nicht spärlich in PCA eingeben)

Ausführungsbeispiel


    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)

Sie kann ausgeführt werden, indem Sie die Pipeline-Notation stoppen, das Ergebnis (spärlich) des Vektorisierers anzeigen () und es dann in PCA eingeben.

Recommended Posts

Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 06 Memo "Identifier"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 02 Memo "Vorverarbeitung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 2 Schritt 07 Memo "Evaluation"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 04 Memo "Feature Extraction"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 4 Schritt 15 Memo "Datenerfassung"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 3 Schritt 08 Memo "Einführung in neuronale Netze".
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 12 Memo "Convolutional Neural Networks".
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 3 Schritt 13 Memo "Wiederkehrende neuronale Netze"
Probieren Sie das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 01 Memo "Erstellen eines Dialogagenten"
Versuchen Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 2 Schritt 03 Memo "Morphologische Analyse und schriftliches Schreiben"
Versuchen wir das Buch "Einführung in die Entwicklung natürlicher Anwendungen in 15 Schritten" - Kapitel 3 Schritt 10 Memo "Details und Verbesserung des neuronalen Netzes"
Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 1 Memo "Vorkenntnisse vor Beginn der Übungen".
[WIP] Vorverarbeiten von Notizen in der Verarbeitung natürlicher Sprache
Zusammenfassung von Anfang bis Kapitel 1 der Einführung in Entwurfsmuster, die in der Java-Sprache gelernt wurden
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Verarbeitung natürlicher Sprache] Ich habe diese Woche versucht, die aktuellen Themen in der Slack-Community zu visualisieren
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
Zusammenfassung von Kapitel 2 der Einführung in Entwurfsmuster, die in Java gelernt wurden
Kapitel 4 Zusammenfassung der Einführung in Entwurfsmuster, die in Java gelernt wurden
Zusammenfassung von Kapitel 3 der Einführung in Entwurfsmuster, die in Java gelernt wurden
[Einführung in RasPi4] Umgebungskonstruktion, Mecab des Verarbeitungssystems für natürliche Sprache usw. .. .. ♪
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
100 Sprachverarbeitung Knock Kapitel 1 in Python
Probieren Sie Cython in kürzester Zeit aus
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache
Von der Einführung der GoogleCloudPlatform Natural Language API bis zur Verwendung
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]