Nous avons résumé Word2Vec à l'aide du Microsoft Cognitive Toolkit (CNTK).
Dans la partie 1, nous préparerons Word2Vec en utilisant CNTK.
Je vais les présenter dans l'ordre suivant.
Dans le traitement du langage naturel, l'ensemble de données de phrase à traiter est appelé un corpus.
Cette fois, j'ai utilisé mon propre roman léger "Enfants magiques" comme corpus japonais. Ce travail est publié sur le site de publication de roman "Kakuyomu" exploité par KADOKAWA.
Combinez le texte, à l'exclusion du titre et du sous-titre, en une seule donnée de texte et enregistrez-le sous MagicalChildren.txt.
La structure des répertoires cette fois est la suivante.
Word2Vec MagicalChildren.txt stop_words.pkl word2vec_corpus.py
Dans le traitement du langage naturel, le prétraitement des données textuelles est l'un des facteurs importants pour une meilleure analyse.
Les données de texte brut préparées contiennent souvent du bruit. Les données textuelles extraites du Web peuvent inclure du code HTML et JavaScript.
Ceux-ci peuvent être supprimés à l'aide du module standard Python re et des expressions régulières.
Dans le traitement du langage naturel, la plus petite unité qui a du sens en tant que mot est appelée un jeton. En anglais, il est relativement facile à comprendre car il est séparé par un espace demi-largeur, mais en japonais, il est nécessaire de préciser le mot car il n'est pas séparé.
Le moteur d'analyse morphologique open source [MeCab](# http: //taku910.github.io/mecab/) est une méthode bien connue pour diviser des phrases japonaises en mots. Cette fois, j'ai installé MeCab et divisé les mots.
Cependant, il est difficile de partager des mots inventés récemment avec MeCab seul. Par conséquent, la division des mots est effectuée sur la base du dictionnaire NEologd, qui prend également en charge les derniers mots inventés.
La normalisation dans le prétraitement du traitement du langage naturel signifie l'unification de la notation des caractères. Le traitement est le suivant.
-Remplacer les nombres katakana demi-largeur par des nombres pleine largeur
-Convertir l'anglais en majuscules en minuscules.
-Remplacez le nombre par N.
· Remplacer les mots inconnus à faible fréquence de mots \ à
La plupart de ces problèmes peuvent également être résolus en utilisant le module standard Python re et les expressions régulières.
Un mot d'arrêt est un mot qui est nécessaire pour faire une phrase, mais qui n'a pas de sens en soi.
En japonais, les adjoints, les assistants, les connecteurs, les verbes auxiliaires, les verbes émotionnels, etc. sont applicables.
Puisque Word2Vec n'est pas destiné cette fois à la génération de phrases, nous le supprimerons en utilisant un ensemble de mots vides.
Après avoir appliqué le prétraitement aux données de texte préparées, attribuez un identifiant au mot pour gérer le mot sur un ordinateur et créez un dictionnaire de mots. A cette époque, la fréquence peu de mot d'occurrence est remplacé par le mot, comme \
Puisque nous utiliserons la distribution de mots pendant l'entraînement cette fois, enregistrez la distribution de mots unigramme sous forme de fichier Numpy en utilisant le nombre d'occurrences des mots inclus dans le dictionnaire de mots créé.
Au cours de cette formation, nous utiliserons CTFDeserializer, qui est l'un des lecteurs intégrés spécialisés dans les fichiers texte. Pour CTFDeserializer, voir Computer Vision: Image Caption Part1 --STAIR Captions et Computer Vision: Image Caption Part2 --Neural Image Caption System.
Le flux de processus général du programme qui prépare Word2Vec est le suivant.
・ Processeur Intel (R) Core (TM) i7-6700K 4,00 GHz
・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Mecab 0.996 ・ Numpy 1.17.3
Le programme implémenté est publié sur GitHub.
word2vec_corpus.py
Je vais extraire et compléter certaines parties du programme à exécuter.
Voici les étapes pour installer MeCab sur Windows 10. Tout d'abord, utilisez pip pour installer MeCab.
> pip install MeCab
Cependant, MeCab ne peut pas être exécuté par cela seul, alors téléchargez mecab-0.996.exe à partir du site officiel ci-dessous et exécutez-le.
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
Sélectionnez UTF-8 comme code de caractère.
Tout d'abord, installez et lancez votre distribution Linux préférée à partir du Microsoft Store.
Si vous obtenez l'erreur WslRegisterDistribution a échoué avec l'erreur 0x8007019e, le sous-système Windows pour Linux n'est pas activé, donc dans le panneau de configuration, vérifiez Programmes et fonctionnalités-> Activer ou désactiver les fonctionnalités Windows-> Sous-système Windows pour Linux. Allumez-le et redémarrez.
Si Linux peut être démarré sans problème, définissez le nom d'utilisateur et le mot de passe et saisissez la commande suivante.
$ 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
Après cela, tapez la commande selon Préparation de l'installation de mecab-ipadic-NEologd. Si tout va bien, tapez oui à la fin et appuyez sur Entrée.
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
...
yes
Vous pouvez désormais utiliser un dictionnaire prenant en charge les derniers mots inventés.
Le nettoyage du texte, le fractionnement de mots, la normalisation des mots et la suppression des mots vides sont effectués sur le fichier texte chargé.
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)
Pour créer un dictionnaire de mots, réutilisez la fonction de Computer Vision: Image Caption Part1 --STAIR Captions Faire.
Le Skip-gram que nous entraînons cette fois-ci considère 5 mots avant et après, donc le CTFDeserializer ressemble à ceci:
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
...
Il existe une correspondance biunivoque entre l'entrée et la sortie, et il y a 10 mots cibles pour chaque mot d'entrée.
Lorsque le programme est exécuté, le dictionnaire de mots est créé et la distribution de mots est enregistrée comme suit.
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
Une fois que vous avez créé le dictionnaire de mots, enregistré la distribution des mots et créé le fichier à charger avec le lecteur intégré, vous êtes prêt à vous entraîner, et la partie 2 utilisera CNTK pour entraîner Word2Vec Skip-gram.
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