[PYTHON] Langage naturel: Word2Vec Part1 - Corpus japonais

Cible

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.

  1. Préparation du corpus japonais
  2. Prétraitement des données textuelles
  3. Création d'un dictionnaire de mots, distribution de mots, corpus
  4. Création d'un fichier à lire par le lecteur intégré fourni par CNTK

introduction

Préparer le corpus japonais

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

Prétraitement des données textuelles

Dans le traitement du langage naturel, le prétraitement des données textuelles est l'un des facteurs importants pour une meilleure analyse.

Nettoyage de texte

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.

Partage de mots

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.

Normalisation des mots

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.

Arrêter la suppression des mots

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.

Création d'un dictionnaire de mots, distribution de mots, corpus

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 \ comme un mot inconnu.

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éé.

Création d'un fichier à lire par le lecteur intégré fourni par CNTK

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.

  1. Prétraitement des données textuelles
  2. Création d'un dictionnaire de mots, distribution de mots, corpus
  3. Écriture des mots d'entrée et des mots prédits

la mise en oeuvre

Environnement d'exécution

Matériel

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

Logiciel

・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Mecab 0.996 ・ Numpy 1.17.3

Programme à exécuter

Le programme implémenté est publié sur GitHub.

word2vec_corpus.py


Commentaire

Je vais extraire et compléter certaines parties du programme à exécuter.

Installez MeCab

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.

Installer le dictionnaire NEologd

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.

Prétraitement des données textuelles

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.

Entrée et sortie Skip-gram

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.

résultat

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.

référence

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

Langage naturel: Word2Vec Part1 - Corpus japonais
Langage naturel: BERT Part1 - Corpus Wikipedia japonais
Langage naturel: Word2Vec Part3 - Modèle CBOW
Langage naturel: Word2Vec Part2 - Modèle de saut-gramme
Langage naturel: Doc2Vec Part1 --livedoor NEWS Corpus
Natural Language: Machine Translation Part1 - Corpus de sous-titres japonais-anglais
[Traitement du langage naturel] Prétraitement avec le japonais
Langage naturel: Doc2Vec Part2 - Classification des documents
Langage naturel: ChatBot Part1-Twitter API Corpus
Langage naturel: GPT - Transformateur de pré-formation génératif japonais
Natural Language: Machine Translation Part2 - Transformateur de traduction automatique neurale
Langage naturel: BERT Part2 - Préentraînement non supervisé ALBERT
Python: traitement du langage naturel
RNN_LSTM2 Traitement du langage naturel
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage naturel 3 Continuité des mots
Python: représentation vectorielle en langage naturel
Traitement du langage naturel 2 similitude de mots
Traitement du langage naturel japonais utilisant Python3 (4) Analyse des émotions par régression logistique
[Word2vec] Visualisons le résultat du traitement en langage naturel des avis des entreprises