Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Implémentation de Word2Vec | Représentations Vectorielles de Mots
Introduction au TALN

bookImplémentation de Word2Vec

Après avoir compris le fonctionnement de Word2Vec, passons à son implémentation en Python. La bibliothèque Gensim, un outil open-source robuste pour le traitement du langage naturel, propose 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écoupées en une liste de listes où chaque liste interne contient les mots d'une phrase spécifique. Pour cet exemple, nous utiliserons le roman Emma de l'auteure anglaise Jane Austen comme corpus. Nous chargerons un fichier CSV contenant des phrases prétraitées, puis nous découperons chaque phrase en mots :

12345678
import pandas as pd emma_df = pd.read_csv( 'https://staging-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

emma_df['Sentence'].str.split() applique la méthode .split() à chaque phrase de la colonne 'Sentence', produisant ainsi 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() suffit pour cette étape de tokenisation.

Entraînement du modèle Word2Vec

Concentrons-nous maintenant sur l'entraînement du modèle Word2Vec à l'aide des données tokenisées. La classe Word2Vec propose divers paramètres de personnalisation. Cependant, les paramètres les plus couramment utilisés sont les suivants :

  • vector_size (100 par défaut) : dimensionnalité ou taille des embeddings de mots ;
  • window (5 par défaut) : taille de la fenêtre de contexte ;
  • min_count (5 par défaut) : les mots apparaissant moins de ce nombre de fois seront ignorés ;
  • sg (0 par défaut) : architecture du modèle à utiliser (1 pour Skip-gram, 0 pour CBoW).
  • cbow_mean (1 par défaut) : spécifie si le contexte d'entrée CBoW est additionné (0) ou moyenné (1)

Concernant les architectures de modèle, CBoW convient aux ensembles de données volumineux et aux situations où l'efficacité computationnelle est essentielle. Skip-gram, en revanche, est préférable pour les tâches nécessitant une compréhension fine des contextes de mots, particulièrement efficace sur de petits ensembles de données ou lors du traitement de mots rares.

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-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, la taille de l'embedding est fixée à 200, la taille de la fenêtre de contexte à 5, et tous les mots sont inclus en définissant min_count=1. En définissant sg=0, le modèle CBoW est utilisé.

Note
Approfondir

Le choix de la taille de l'embedding et de la fenêtre de contexte implique des compromis. Des embeddings plus grands capturent plus de sens mais augmentent le coût computationnel et le risque de surapprentissage. Des fenêtres de contexte plus petites sont plus efficaces pour capturer la syntaxe, tandis que des fenêtres plus grandes sont meilleures pour capturer la sémantique.

Recherche de mots similaires

Une fois que les mots sont représentés sous forme de vecteurs, il est possible de les comparer pour mesurer leur similarité. Bien que l'utilisation de la distance soit une option, la direction d'un vecteur porte souvent plus de signification sémantique que sa magnitude, en particulier dans les embeddings de mots.

Cependant, utiliser directement l'angle comme métrique de similarité n'est pas très pratique. À la place, il est possible d'utiliser le cosinus de l'angle entre deux vecteurs, également appelé similarité cosinus. Cette mesure varie de -1 à 1, des valeurs plus élevées indiquant une similarité plus forte. Cette approche se concentre sur l'alignement des vecteurs, indépendamment de leur longueur, ce qui la rend idéale pour comparer le sens des mots. Voici une illustration :

Angles

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

Détermination des 5 mots les plus similaires au mot "man" à l'aide de la similarité cosinus :

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-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 permet d’accéder aux vecteurs de mots du modèle entraîné, tandis que la méthode .most_similar() identifie les mots dont les embeddings sont les plus proches de celui du mot spécifié, selon la similarité cosinus. Le paramètre topn détermine le nombre de mots top-N similaires à retourner.

question mark

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

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 3.45

bookImplémentation de Word2Vec

Glissez pour afficher le menu

Après avoir compris le fonctionnement de Word2Vec, passons à son implémentation en Python. La bibliothèque Gensim, un outil open-source robuste pour le traitement du langage naturel, propose 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écoupées en une liste de listes où chaque liste interne contient les mots d'une phrase spécifique. Pour cet exemple, nous utiliserons le roman Emma de l'auteure anglaise Jane Austen comme corpus. Nous chargerons un fichier CSV contenant des phrases prétraitées, puis nous découperons chaque phrase en mots :

12345678
import pandas as pd emma_df = pd.read_csv( 'https://staging-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

emma_df['Sentence'].str.split() applique la méthode .split() à chaque phrase de la colonne 'Sentence', produisant ainsi 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() suffit pour cette étape de tokenisation.

Entraînement du modèle Word2Vec

Concentrons-nous maintenant sur l'entraînement du modèle Word2Vec à l'aide des données tokenisées. La classe Word2Vec propose divers paramètres de personnalisation. Cependant, les paramètres les plus couramment utilisés sont les suivants :

  • vector_size (100 par défaut) : dimensionnalité ou taille des embeddings de mots ;
  • window (5 par défaut) : taille de la fenêtre de contexte ;
  • min_count (5 par défaut) : les mots apparaissant moins de ce nombre de fois seront ignorés ;
  • sg (0 par défaut) : architecture du modèle à utiliser (1 pour Skip-gram, 0 pour CBoW).
  • cbow_mean (1 par défaut) : spécifie si le contexte d'entrée CBoW est additionné (0) ou moyenné (1)

Concernant les architectures de modèle, CBoW convient aux ensembles de données volumineux et aux situations où l'efficacité computationnelle est essentielle. Skip-gram, en revanche, est préférable pour les tâches nécessitant une compréhension fine des contextes de mots, particulièrement efficace sur de petits ensembles de données ou lors du traitement de mots rares.

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-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, la taille de l'embedding est fixée à 200, la taille de la fenêtre de contexte à 5, et tous les mots sont inclus en définissant min_count=1. En définissant sg=0, le modèle CBoW est utilisé.

Note
Approfondir

Le choix de la taille de l'embedding et de la fenêtre de contexte implique des compromis. Des embeddings plus grands capturent plus de sens mais augmentent le coût computationnel et le risque de surapprentissage. Des fenêtres de contexte plus petites sont plus efficaces pour capturer la syntaxe, tandis que des fenêtres plus grandes sont meilleures pour capturer la sémantique.

Recherche de mots similaires

Une fois que les mots sont représentés sous forme de vecteurs, il est possible de les comparer pour mesurer leur similarité. Bien que l'utilisation de la distance soit une option, la direction d'un vecteur porte souvent plus de signification sémantique que sa magnitude, en particulier dans les embeddings de mots.

Cependant, utiliser directement l'angle comme métrique de similarité n'est pas très pratique. À la place, il est possible d'utiliser le cosinus de l'angle entre deux vecteurs, également appelé similarité cosinus. Cette mesure varie de -1 à 1, des valeurs plus élevées indiquant une similarité plus forte. Cette approche se concentre sur l'alignement des vecteurs, indépendamment de leur longueur, ce qui la rend idéale pour comparer le sens des mots. Voici une illustration :

Angles

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

Détermination des 5 mots les plus similaires au mot "man" à l'aide de la similarité cosinus :

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-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 permet d’accéder aux vecteurs de mots du modèle entraîné, tandis que la méthode .most_similar() identifie les mots dont les embeddings sont les plus proches de celui du mot spécifié, selon la similarité cosinus. Le paramètre topn détermine le nombre de mots top-N similaires à retourner.

question mark

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

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
some-alt