[PYTHON] Probieren Sie das Buch "Einführung in die Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" aus - Kapitel 3 Schritt 11 Memo "Worteinbettungen"

Inhalt

Dies ist ein Memo für mich, während ich Einführung in Anwendungen zur Verarbeitung natürlicher Sprache in 15 Schritten lese. Notieren Sie sich diesmal in Kapitel 3, Schritt 11 Ihre eigenen Punkte. Persönlich ist dies eine Technologie, die mich besonders an der Verarbeitung natürlicher Sprache interessiert.

Vorbereitung

Kapitelübersicht

Bisher war die Methode zur Merkmalsextraktion BoW (oder eine Variante von BoW), die durch die Anzahl der Dimensionen ausgedrückt wurde, die der Anzahl der Vokabeln entspricht. Bei Worteinbettungen kann es durch einen Vektor einer bestimmten Anzahl von Dimensionen dargestellt werden (** verteilte Darstellung von Wörtern **). Dieser Vektor hat Informationen, als ob er die Bedeutung eines Wortes darstellt.

11.1 Was sind Worteinbettungen?

Vergleich mit One-Hot-Ausdrücken wie BoW

Artikel One-heißer Ausdruck Word embeddings
Anzahl der Dimensionen des Vektors ・ Anzahl der Vokabeln
・ Es kann Zehntausende bis Millionen sein
・ Vom Designer festgelegter fester Wert
・ Hunderte
Vektorwert 1 für bestimmte Dimensionen, 0 für andere Alle Dimensionen nehmen reale Werte an

11.2 Nehmen Sie Kontakt mit Word-Einbettungen auf

Analogy task

analogy_sample.Versuchen Sie es mit py


$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python analogy_sample.py
tokyo - japan + france =  ('paris', 0.9174968004226685)

gensim.downloader.load ('<Worteinbettungsmodell>') enthält den dem Wort entsprechenden Merkmalsvektor. Je nach Modell dürfen jedoch nur englische Wörter verwendet werden.

In diesem Beispiel werden die Wörter "Tokio", "Japan" und "Frankreich" behandelt. Wenn Sie eine Pseudoberechnung versuchen, die auf der Bedeutung der Wörter basiert, Es ist ersichtlich, dass es ausgedrückt werden kann als "(tokyo --japan) + frankreich = (kapital) + frankreich ≒ paris".

Anwendungsprobleme

Probieren wir einige der Beispiele aus, die wir in anderen Büchern gelesen haben.

king - man + woman =  [('king', 0.8859834671020508), ('queen', 0.8609581589698792), ('daughter', 0.7684512138366699), ('prince', 0.7640699148178101), ('throne', 0.7634970545768738), ('princess', 0.7512727975845337), ('elizabeth', 0.7506488561630249), ('father', 0.7314497232437134), ('kingdom', 0.7296158075332642), ('mother', 0.7280011177062988)]

gone - go + see =  [('see', 0.8548812866210938), ('seen', 0.8507398366928101), ('still', 0.8384071588516235), ('indeed', 0.8378400206565857), ('fact', 0.835073709487915), ('probably', 0.8323071002960205), ('perhaps', 0.8315557837486267), ('even', 0.8241520524024963), ('thought', 0.8223952054977417), ('much', 0.8205327987670898)]

Synonyme

Es kann von model.wv.similar_by_vector (..) abgerufen werden, wie in der Analogie-Aufgabe behandelt.

Die Art der Worteinbettungen

Die durch Word-Einbettungen erhaltene verteilte Darstellung weist die folgenden Eigenschaften auf.

Arten von Worteinbettungen

Artikel Inhalt
Word2Vec Erhalten Sie einen verteilten Ausdruck, indem Sie sich auf mehrere aufeinanderfolgende Wörter in einem Satz konzentrieren
Glove Erhalten Sie eine verteilte Darstellung unter Verwendung von Häufigkeitsinformationen zum gleichzeitigen Auftreten von Wörtern in den gesamten Trainingsdaten
fastText Zeichen n-Holen Sie sich die verteilte Darstellung von Gramm und addieren Sie sie, um die verteilte Darstellung von Wörtern zu erstellen

11.3 Verwendung von geschultem Modell und japanischer Unterstützung

Wie oben erwähnt, können bei Word-Einbettungen bereits trainierte Modelle verwendet werden (beim Einbetten in eine Anwendung und bei der Verwendung trainierter Modelle ist es besser, das Transferlernen durchzuführen und es vor der Verwendung in gewissem Umfang für Daten geeignet zu machen. damit)

Beachten Sie bei der Verwendung des trainierten Modells, das später verteilt wird, die Lizenz und die Nutzungsbedingungen dieses Modells.

11.4 Worteinbettungen in die Identifikationsaufgabe

Verwenden Sie die verteilte Darstellung als Merkmalsmenge

simple_we_classification.py befindet sich unter sec130_140_cnn_rnn / klassifikation /. Da tokenize.py in diesem Verzeichnis nicht vorhanden ist, habe ich "sec40_preprocessing / tokenizer.py" verwendet.

Ergänzungen / Änderungen gegenüber dem vorherigen Kapitel (Schritt 09)

def calc_text_feature(text):
    """
Finden Sie die Funktion von Text basierend auf dem verteilten Ausdruck von Wörtern.
Nachdem Sie den Text getoken und die verteilte Darstellung jedes Tokens gefunden haben,
Die Summe aller verteilten Darstellungen sei die Merkmalsmenge des Textes.
    """
    tokens = tokenize(text)

    word_vectors = np.empty((0, model.wv.vector_size))
    for token in tokens:
        try:
            word_vector = model[token]
            word_vectors = np.vstack((word_vectors, word_vector))
        except KeyError:
            pass

    if word_vectors.shape[0] == 0:
        return np.zeros(model.wv.vector_size)
    return np.sum(word_vectors, axis=0)

Ausführungsergebnis


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

Normale Implementierung (Schritt 01): 37,2% Vorverarbeitung hinzugefügt (Schritt 02): 43,6% Änderung der Vorverarbeitung + Merkmalsextraktion (Schritt 04): 58,5% Vorverarbeitung + Änderung der Merkmalsextraktion (Schritt 11): 40,4%

Die Leistung ist mit den Funktionen auf Satzebene, die durch einfaches Hinzufügen von Worteinbettungen erhalten werden, gering.


Vorverarbeitung + Änderung der Merkmalsextraktion + Änderung des Klassifikators (Schritt 06): 61,7% Vorverarbeitung + Änderung der Merkmalsextraktion + Änderung des Klassifikators (Schritt 09): 66,0%

Vereinheitlichung des morphologischen Analysators und Vorverarbeitung

Es ist wünschenswert, dass das Modell der zu verwendenden Worteinbettungen ** reproduziert wird, wenn dieselbe Schreib- und Vorverarbeitungsmethode verwendet wird, die beim Lernen verwendet wurde **.

Recommended Posts

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 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 Verarbeitung natürlicher Sprachanwendungen in 15 Schritten" - Kapitel 4 Schritt 14 Memo "Hyperparametersuche"
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 Entwicklung natürlicher Anwendungen in 15 Schritten" aus - Kapitel 2 Schritt 05 Memo "Feature Quantity Conversion"
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"
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 09 Memo "Identifier by Neural Network"
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 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"
[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
[Jobwechsel-Meeting] Versuchen Sie, Unternehmen zu klassifizieren, indem Sie Mundpropaganda in natürlicher Sprache mit word2vec verarbeiten
[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
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
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
[Sprachverarbeitung 100 Schläge 2020] Kapitel 7: Wortvektor
100 Sprachverarbeitung Knock 2020 Kapitel 7: Word Vector
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]