# Installation des packages (à faire une fois)
! pip install pandas
! pip install gensim==3.8.3
# Chargement des packages
import os
import pandas as pd
from gensim.models import word2vec, Word2Vec
from gensim.models import KeyedVectors
from gensim.utils import tokenize
# Chargement de nos données (les 1000 tweets)
df = pd.DataFrame(pd.read_pickle("tweets.txt"))
df.columns = ["tweets"]
df.head()
# Exemple de tweet
df["tweets"][998]
# Tokenisation des tweets
df["tweets_tok"] = [list(tokenize(tweet,deacc=True,lower=True)) for tweet in df["tweets"]]
df.head()
# Nom du fichier (ou chemin d'accès aux données)
file_name= "frWac_no_postag_no_phrase_700_skip_cut50.bin"
# Chargement du modèle pré-entrainé
model = KeyedVectors.load_word2vec_format(file_name, binary=True, unicode_errors="ignore")
print("Le modèle pré-entrainé a un vocabulaire qui contient {} mots distincts".format(len(model.wv.vocab)))
Le modèle pré-entrainé a un vocabulaire qui contient 184373 mots distincts
# Initialisation du modèle
## Dim des vecteurs : 700
## Fréquence minimale des mots : 1
## Méthode utilisée : Skip-gram
my_model = Word2Vec(size=700, min_count=1,sg = 1)
# Création du vocabulaire
Vocab = list(df["tweets_tok"])
my_model.build_vocab(Vocab)
# Nombre de tweets utilisés dans notre corpus
total_examples = my_model.corpus_count
print("{} tweets ont été utilisés pour créer le vocabulaire de notre corpus.".format(total_examples))
# Taille du vocabulaire de notre modèle
print("Le vocabulaire comporte {} mots distincts".format(len(my_model.wv.vocab)))
1000 tweets ont été utilisés pour créer le vocabulaire de notre corpus.
Le vocabulaire comporte 4207 mots distincts
# Ajout du vocabulaire du modèle pré-entrainé à notre modèle
my_model.build_vocab([list(model.vocab.keys())], update=True)
# Taille du vocabulaire de notre modèle
print("Le vocabulaire comporte maintenant {} mots distincts".format(len(my_model.wv.vocab)))
Le vocabulaire comporte maintenant 185013 mots distincts
# Intersection des matrices
my_model.intersect_word2vec_format(file_name, binary=True, lockf=1.0)
# Vecteur du mot "assurance"
my_model['assurance']
# Le mot "groupama" est-il dans le vocabulaire de notre modèle ?
'groupama' in my_model.wv.vocab
# Affichage des 5 premiers mots du vocabulaire
print(list(my_model.wv.vocab.keys())[:5])
['ouai', 'mettre', 'conducteur', 'occasionnel', 'poter']
my_model.most_similar("assurance")
my_model.most_similar("bienveillance")
# Similarité des mots "assurer" et "assurance"
my_model.similarity('assurer','assurance')
# Similarité des mots "bienveillance" et "assurance"
my_model.similarity('bienveillance', 'assurance')
# Fonction permettant de renvoyer une erreur
# si un mot du groupe de mots n'est pas dans le vocabulaire
def get_unmatching_word(words):
for word in words:
if not word in my_model.wv.vocab:
print("Word is not in vocabulary:", word)
return None
return my_model.wv.doesnt_match(words)
# Trouver l'intrus dans une liste de mots
get_unmatching_word(['assurance', 'sinistre', 'tomate', 'garantie'])
my_model.most_similar(positive=['réclamation','assurance'], negative=['sinistre'], topn=6)