Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Implémentation de Word2Vec | Incorporations de Mots
Introduction au NLP
course content

Contenu du cours

Introduction au NLP

Introduction au NLP

1. Fondamentaux du Prétraitement de Texte
2. Racine et Lemmatisation
3. Modèles de Texte de Base
4. Incorporations de Mots

book
Implémentation de Word2Vec

Ayant compris comment fonctionne Word2Vec, passons à son implémentation en utilisant Python. La bibliothèque Gensim, un outil open-source robuste pour le traitement du langage naturel, offre une implémentation simple via sa classe Word2Vec dans gensim.models.

Préparation des données

Word2Vec nécessite que les données textuelles soient tokenisées, c'est-à-dire décomposées en une liste de listes où chaque liste interne contient des mots d'une phrase spécifique. Pour cet exemple, nous utiliserons le roman Emma de l'auteur anglais Jane Austen comme notre corpus. Nous chargerons un fichier CSV contenant des phrases prétraitées, puis nous diviserons chaque phrase en mots :

12345678
import pandas as pd emma_df = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') # Split each sentence into words sentences = emma_df['Sentence'].str.split() # Print the fourth sentence (list of words) print(sentences[3])
copy

Cette ligne emma_df['Sentence'].str.split() applique la méthode .split() à chaque phrase dans la colonne 'Sentence', résultant en une liste de mots pour chaque phrase. Étant donné que les phrases ont déjà été prétraitées, avec des mots séparés par des espaces, la méthode .split() est suffisante pour cette tokenisation.

Entraînement du Modèle Word2Vec

Concentrons-nous maintenant sur l'entraînement du modèle Word2Vec en utilisant les données tokenisées. En fait, la classe Word2Vec offre une variété de paramètres pour la personnalisation ; cependant, vous traiterez le plus souvent les paramètres suivants :

  • vector_size (100 par défaut) : la dimensionnalité ou taille des embeddings de mots ;
  • window (5 par défaut) : la taille de la fenêtre de contexte ;
  • min_count (5 par défaut) : les mots apparaissant moins que ce nombre seront ignorés ;
  • sg (0 par défaut) : l'architecture du modèle à utiliser (1 pour Skip-Gram, 0 pour CBOW).

En parlant des architectures de modèle, CBoW est adapté pour les ensembles de données plus grands et les scénarios où l'efficacité computationnelle est cruciale. Skip-gram, en revanche, est préférable pour les tâches nécessitant une compréhension détaillée des contextes de mots, particulièrement efficace dans les ensembles de données plus petits ou lorsqu'il s'agit de mots rares.

Voyons maintenant un exemple :

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() # Initialize the model model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0)
copy

Ici, nous définissons la taille des embeddings à 200, la taille de la fenêtre de contexte à 5 et incluons tous les mots en définissant min_count=1. En définissant sg=0, nous avons choisi d'utiliser le modèle CBoW.

Trouver des mots similaires

Ayant chaque mot représenté comme un vecteur, nous pouvons maintenant calculer la similarité de deux mots comme une similarité de deux vecteurs. Comment pouvons-nous la mesurer ? Eh bien, nous pourrions calculer la distance entre ces vecteurs, cependant, il y a quelques inconvénients.

Lorsque deux vecteurs de mots pointent dans la même direction, même si l'un est plus long (indiquant peut-être plus d'occurrences dans les données d'entraînement), ils peuvent toujours représenter des mots avec des significations similaires, donc ce que nous faisons est de considérer l'angle entre les vecteurs. C'est crucial car dans de nombreuses tâches de NLP, en particulier impliquant des embeddings de mots, la direction des vecteurs—indiquant l'orientation des mots dans l'espace vectoriel—porte plus de signification sémantique que la magnitude.

En pratique, cependant, utiliser un angle comme métrique de similarité directement n'est pas si pratique, donc le cosinus de l'angle est utilisé, qui varie de -1 à 1. C'est ce qu'on appelle la similarité cosinus. Voici une illustration :

Angles

Plus la similarité cosinus est élevée, plus les deux vecteurs sont similaires, et vice versa. Par exemple, si deux vecteurs de mots ont une similarité cosinus proche de 1 (l'angle proche de 0 degrés), cela indique qu'ils sont étroitement liés ou similaires dans le contexte au sein de l'espace vectoriel.

Trouvons maintenant les 5 mots les plus similaires au mot "man" en utilisant la similarité cosinus :

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0) # Retrieve the top-5 most similar words to 'man' similar_words = model.wv.most_similar('man', topn=5) print(similar_words)
copy

model.wv accède aux vecteurs de mots du modèle entraîné, tandis que la méthode .most_similar() trouve les mots dont les embeddings sont les plus proches de l'embedding du mot spécifié, basé sur la similarité cosinus. Le paramètre topn détermine le nombre de mots top-N similaires à retourner.

Quel modèle est meilleur pour gérer les mots rares dans un corpus ?

Quel modèle est meilleur pour gérer les mots rares dans un corpus ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
We're sorry to hear that something went wrong. What happened?
some-alt