[PYTHON] Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus

Ziel

Wir haben Word2Vec mit dem Microsoft Cognitive Toolkit (CNTK) zusammengefasst.

In Teil 1 werden wir uns mit CNTK auf Word2Vec vorbereiten.

Ich werde sie in der folgenden Reihenfolge vorstellen.

  1. Vorbereitung des japanischen Korpus
  2. Vorverarbeitung von Textdaten
  3. Erstellen eines Wortwörterbuchs, einer Wortverteilung und eines Korpus
  4. Erstellen einer Datei, die von dem von CNTK bereitgestellten integrierten Reader gelesen werden soll

Einführung

Vorbereitung des japanischen Korpus

In der Verarbeitung natürlicher Sprache wird der zu verarbeitende Satzdatensatz als Korpus bezeichnet.

Dieses Mal verwendete ich meinen eigenen leichten Roman "Magische Kinder" als japanischen Korpus. Diese Arbeit wird auf der von KADOKAWA betriebenen Roman-Posting-Site "Kakuyomu" veröffentlicht.

Kombinieren Sie den Text ohne Titel und Untertitel zu einem einzigen Textstück und speichern Sie ihn als MagicalChildren.txt.

Die Verzeichnisstruktur ist diesmal wie folgt.

Word2Vec  MagicalChildren.txt  stop_words.pkl  word2vec_corpus.py

Vorverarbeitung von Textdaten

Bei der Verarbeitung natürlicher Sprache ist die Vorverarbeitung von Textdaten einer der wichtigen Faktoren für eine bessere Analyse.

Textbereinigung

Die vorbereiteten Rohtextdaten enthalten häufig Rauschen. Aus dem Web stammende Textdaten können HTML- und JavaScript-Code enthalten.

Diese können mit dem Python-Standardmodul re und regulären Ausdrücken entfernt werden.

Wort geteilt

In der Verarbeitung natürlicher Sprache wird die kleinste Einheit, die als Wort sinnvoll ist, als Token bezeichnet. Auf Englisch ist es relativ leicht zu verstehen, da es durch ein Leerzeichen halber Breite getrennt ist. Auf Japanisch ist es jedoch erforderlich, das Wort anzugeben, da es nicht getrennt ist.

Die Open-Source-Engine für morphologische Analysen [MeCab](# http: //taku910.github.io/mecab/) ist eine bekannte Methode, um japanische Sätze in Wörter zu unterteilen. Dieses Mal habe ich MeCab installiert und die Wörter aufgeteilt.

Es ist jedoch schwierig, die neuesten geprägten Wörter nur mit MeCab zu teilen. Daher wird die Wortteilung basierend auf dem NEologd-Wörterbuch durchgeführt, das auch die neuesten geprägten Wörter unterstützt.

Wortnormalisierung

Normalisierung bei der Vorverarbeitung der Verarbeitung natürlicher Sprache bedeutet Vereinheitlichung der Zeichenschreibweise. Die Verarbeitung ist wie folgt.

Die meisten dieser Probleme können auch mit dem Python-Standardmodul re und regulären Ausdrücken gelöst werden.

Stoppen Sie die Wortentfernung

Ein Stoppwort ist ein Wort, das notwendig ist, um einen Satz zu bilden, aber an sich keine Bedeutung hat.

Im Japanischen gelten Hilfsmittel, Assistenten, Konnektiva, Hilfsverben, emotionale Verben usw.

Da Word2Vec dieses Mal nicht für die Satzgenerierung vorgesehen ist, werden wir es mit einer Reihe von Stoppwörtern entfernen.

Erstellen eines Wortwörterbuchs, einer Wortverteilung und eines Korpus

Weisen Sie dem Wort nach dem Anwenden der Vorverarbeitung auf die vorbereiteten Textdaten eine ID zu, um das Wort auf einem Computer zu verarbeiten und ein Wortwörterbuch zu erstellen. Zu diesem Zeitpunkt wird Wörtchen Häufigkeit des Auftretens mit dem Wort ersetzt, wie \ als ein unbekanntes Wort.

Da wir die Wortverteilung dieses Mal während des Trainings verwenden, speichern Sie die Unigramm-Wortverteilung als Numpy-Datei unter Verwendung der Anzahl der Vorkommen der Wörter, die im erstellten Wortwörterbuch enthalten sind.

Erstellen einer Datei zum Lesen durch den von CNTK bereitgestellten integrierten Reader

Während dieser Schulung verwenden wir CTFDeserializer, einen der integrierten Lesegeräte, die sich auf Textdateien spezialisiert haben. Informationen zum CTFDeserializer finden Sie unter Computer Vision: Bildunterschrift Teil1 - STAIR-Untertitel und Computer Vision: Bildunterschrift Teil2 --Neural Image Caption System.

Der allgemeine Prozessablauf des Programms, das sich auf Word2Vec vorbereitet, lautet wie folgt.

  1. Vorverarbeitung von Textdaten
  2. Erstellen eines Wortwörterbuchs, einer Wortverteilung und eines Korpus
  3. Schreiben von Eingabewörtern und vorhergesagten Wörtern

Implementierung

Ausführungsumgebung

Hardware-

・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz

Software

・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Mecab 0,996 ・ Numpy 1.17.3

Programm zum Ausführen

Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/NaturalLanguage/tree/master/Word2Vec).

word2vec_corpus.py


Kommentar

Ich werde einige Teile des auszuführenden Programms extrahieren und ergänzen.

Installieren Sie MeCab

Hier sind die Schritte zum Installieren von MeCab unter Windows 10. Verwenden Sie zuerst pip, um MeCab zu installieren.

> pip install MeCab

MeCab kann jedoch nicht alleine ausgeführt werden. Laden Sie daher mecab-0.996.exe von der folgenden offiziellen Website herunter und führen Sie es aus.

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

Wählen Sie UTF-8 als Zeichencode.

Installieren Sie das NEologd-Wörterbuch

Installieren und starten Sie zunächst Ihre bevorzugte Linux-Distribution im Microsoft Store.

Wenn der Fehler WslRegisterDistribution mit dem Fehler 0x8007019e fehlgeschlagen ist, ist das Windows-Subsystem für Linux nicht aktiviert. Aktivieren Sie daher in der Systemsteuerung Programme und Funktionen-> Windows-Funktionen aktivieren oder deaktivieren-> Windows-Subsystem für Linux. Schalten Sie es ein und starten Sie es neu.

Wenn Linux problemlos gestartet werden kann, legen Sie den Benutzernamen und das Kennwort fest und geben Sie den folgenden Befehl ein.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file
$ sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config

Geben Sie danach den Befehl gemäß [Vorbereiten der Installation von mecab-ipadic-NEologd] ein (https://github.com/neologd/mecab-ipadic-neologd#how-to-installupdate-mecab-ipadic-neologd). Wenn alles in Ordnung ist, geben Sie am Ende yes ein und drücken Sie die Eingabetaste.

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
...
yes

Jetzt können Sie ein Wörterbuch verwenden, das die neuesten geprägten Wörter unterstützt.

Vorverarbeitung von Textdaten

Textbereinigung, Wortteilung, Wortnormalisierung und Stoppwortentfernung werden für die geladene Textdatei durchgeführt.

word2vec_corpus.py


tokenized_list = []
for t in text:
    t = text_cleaning(t)  # text cleaning
        
    word_list = mecab.tokenize(t)  # word tokenized

    word_list = [re.sub(r"[0-9]+|[0-9].+[0-9]", NUM, word) for word in word_list]  # word normalization

    for w in word_list:
        if w in stop_words:
            word_list.remove(w)  # remove stop words

    tokenized_list.append(word_list)

Verwenden Sie zum Erstellen eines Wortwörterbuchs die Funktion von Computer Vision: Bildunterschrift Teil1 - STAIR Captions. tun.

Eingabe und Ausgabe überspringen

Das Skip-Gramm, das wir dieses Mal trainieren, berücksichtigt 5 Wörter davor und danach, sodass der CTFDeserializer folgendermaßen aussieht:

skipgram_corpus.txt


|word 254:1	|target 982:1
|word 254:1	|target 3368:1
|word 254:1	|target 2178:1
|word 254:1	|target 3368:1
|word 254:1	|target 2179:1
|word 254:1	|target 545:1
|word 254:1	|target 2180:1
|word 254:1	|target 3368:1
|word 254:1	|target 2181:1
|word 254:1	|target 254:1
|word 545:1	|target 3368:1
|word 545:1	|target 2178:1
|word 545:1	|target 3368:1
|word 545:1	|target 2179:1
|word 545:1	|target 254:1
|word 545:1	|target 2180:1
|word 545:1	|target 3368:1
|word 545:1	|target 2181:1
|word 545:1	|target 254:1
|word 545:1	|target 169:1
...

Es gibt eine Eins-zu-Eins-Entsprechung zwischen Eingabe und Ausgabe, und es gibt 10 Zielwörter für jedes Eingabewort.

Ergebnis

Wenn das Programm ausgeführt wird, wird das Wortwörterbuch erstellt und die Wortverteilung wie folgt gespeichert.

Number of total words: 6786
Number of words: 3369

Saved word2id.
Saved id2word.

Saved unigram distribution as sampling_weights.npy

Skip-gram

Now 10000 samples...
Now 20000 samples…
...
Now 310000 samples...

Number of samples 310000

Sobald Sie das Wortwörterbuch erstellt, die Wortverteilung gespeichert und die Datei zum Laden mit dem integrierten Lesegerät erstellt haben, können Sie trainieren. Teil 2 verwendet CNTK zum Trainieren von Word2Vec Skip-Gramm.

Referenz

MeCab: Yet Another Part-of-Speech and Morphological Analyzer neologd/mecab-ipadic-neologd

Computer Vision : Image Caption Part1 - STAIR Captions Computer Vision : Image Caption Part2 - Neural Image Caption System

Recommended Posts

Natürliche Sprache: Word2Vec Part1 - Japanischer Korpus
Natürliche Sprache: BERT Part1 - Japanischer Wikipedia Corpus
Natürliche Sprache: Word2Vec Part3 - CBOW-Modell
Natürliche Sprache: Word2Vec Part2 - Skip-Gramm-Modell
Natürliche Sprache: Doc2Vec Part1 --livedoor NEWS Corpus
Natürliche Sprache: Maschinelle Übersetzung Teil 1 - Japanisch-Englisch Untertitel Corpus
[Verarbeitung natürlicher Sprache] Vorverarbeitung mit Japanisch
Natürliche Sprache: Doc2Vec Part2 --Dokumentklassifizierung
Natürliche Sprache: ChatBot Part1-Twitter API Corpus
Natürliche Sprache: GPT - Japanischer generativer Pretraining-Transformator
Natürliche Sprache: Maschinelle Übersetzung Teil 2 - Neuronaler maschineller Übersetzungstransformator
Natürliche Sprache: BERT Part2 - Unüberwachte Vorschulung ALBERT
Python: Verarbeitung natürlicher Sprache
RNN_LSTM2 Verarbeitung natürlicher Sprache
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Python: Vektordarstellung in natürlicher Sprache
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
Japanische Verarbeitung natürlicher Sprache mit Python3 (4) Emotionsanalyse durch logistische Regression
[Word2vec] Lassen Sie uns das Ergebnis der Verarbeitung von Unternehmensbewertungen in natürlicher Sprache visualisieren