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.
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
Bei der Verarbeitung natürlicher Sprache ist die Vorverarbeitung von Textdaten einer der wichtigen Faktoren für eine bessere Analyse.
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.
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.
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.
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.
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 \
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.
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.
・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz
・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Mecab 0,996 ・ Numpy 1.17.3
Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/NaturalLanguage/tree/master/Word2Vec).
word2vec_corpus.py
Ich werde einige Teile des auszuführenden Programms extrahieren und ergänzen.
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 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.
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.
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.
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.
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