Aller au contenu

Créer un plongement de mots#

Un plongement de mot#

Le plongement de mot est une représentation des données textuelle qui consiste à associer un vecteur à chaque mot.

Gensim#

Gensim est un package Python dédié au NLP. Il propose qui permet de

Installation#

Gensim peut être installé depuis le répertoire Pypi avec pip

pip install gensim
Vous pouvez également lancer l'installation depuis votre notebook
!pip install -q gensim

Importation des modules#

import os
import pickle
import re
import unicodedata
import nltk
import numpy as np
from gensim.models import Word2Vec

Prétraitement des textes#

tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+')

def preprocess(line):
    def remove_no_latin(string):
        return unicodedata \
                        .normalize('NFKD', string) \
                        .encode('ASCII', 'ignore') \
                        .decode('utf-8')
    new_line = remove_no_latin(line)
    new_line = re.sub(r"(@[A-Za-z]+)|([^A-Za-z \t])|(\w+:\/\/\S+)", " ", new_line)
    new_line = new_line.lower()
    tokens = tokenizer.tokenize(new_line)

    return tokens
class MyCorpus(object):
    def __init__(self, dirname):
        self.dirname = dirname

    def __iter__(self):
        for fname in os.listdir(self.dirname):
            for line in open(os.path.join(self.dirname, fname)):
                yield preprocess(line)
sentences = MyCorpus(dirname=DATA_PATH)
model = Word2Vec(sentences=sentences, 
                 size=EMBEDDING_DIM, 
                 sg=0, 
                 hs=1, 
                 min_count=10)

Tester le modèle#

model.wv.most_similar('musique')
[('le', 0.9998461008071899),
 ('lannee', 0.9998108148574829),
 ('disque', 0.9998019933700562),
 ('il', 0.9998003244400024),
 ('ses', 0.9997894763946533),
 ('carriere', 0.9997774362564087),
 ('apres', 0.9997769594192505),
 ('on', 0.9997597932815552),
 ('ou', 0.9997404217720032),
 ('en', 0.9997389316558838)]

Sauvegarder les poids#

# save the weights
output_file = os.path.join(EMBEDDING_PATH, f'embedding-word2vec-{EMBEDDING_DIM}d.txt')
if not os.path.exists(EMBEDDING_PATH):
    os.makedirs(EMBEDDING_PATH)
model.wv.save_word2vec_format(output_file, binary=False)