"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Intégration de mots avec Python : Wordc

Intégration de mots avec Python : Wordc

Publié le 2024-11-08
Parcourir:951

Word-embedding-with-Python: Wordc

Implémentation de word2vec avec Python (& Gensim)

  • Remarque : ce code est écrit en Python 3.6.1 ( Gensim 2.3.0)

  • Implémentation Python et application de word2vec avec Gensim

  • Article original : Mikolov, T., Chen, K., Corrado, G. et Dean, J. (2013). Estimation efficace des représentations de mots dans l’espace vectoriel. préimpression arXiv arXiv:1301.3781.

import re
import numpy as np

from gensim.models import Word2Vec
from nltk.corpus import gutenberg
from multiprocessing import Pool
from scipy import spatial
  • Importer un ensemble de données d'entraînement
  • Importer le corpus Hamlet de Shakespeare depuis la bibliothèque nltk
sentences = list(gutenberg.sents('shakespeare-hamlet.txt'))   # import the corpus and convert into a list

print('Type of corpus: ', type(sentences))
print('Length of corpus: ', len(sentences))

Type de corpus : classe 'liste'
Longueur du corpus : 3106

print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['[', 'Le', 'Tragedie', 'de', 'Hamlet', 'by', 'William', 'Shakespeare', '1599', ']']
['Actus', 'Primus', '.']
['Fran', '.']

Prétraiter les données

  • Utilisez le module re pour prétraiter les données
  • Convertir toutes les lettres en minuscules
  • Supprimez les signes de ponctuation, les chiffres, etc.
for i in range(len(sentences)):
    sentences[i] = [word.lower() for word in sentences[i] if re.match('^[a-zA-Z] ', word)]  
print(sentences[0])    # title, author, and year
print(sentences[1])
print(sentences[10])

['la', 'tragédie', 'de', 'hameau', 'par', 'william', 'shakespeare']
['actus', 'primus']
['fran']

Créer et entraîner un modèle

  • Créez un modèle word2vec et entraînez-le avec le corpus Hamlet
  • Description des paramètres clés (https://radimrehurek.com/gensim/models/word2vec.html)
    • phrases : données d'entraînement (doit être une liste avec des phrases symbolisées)
    • taille : dimension de l'espace d'intégration
    • sg : CBOW si 0, sauter-gramme si 1
    • fenêtre : nombre de mots pris en compte pour chaque contexte (si la fenêtre
    • la taille est de 3, 3 mots dans le quartier de gauche et 3 mots dans le quartier de droite sont pris en compte)
    • min_count : nombre minimum de mots à inclure dans le vocabulaire
    • iter : nombre d'itérations d'entraînement
    • workers : nombre de threads de travail à former
model = Word2Vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = Pool()._processes)

model.init_sims(replace = True)

Enregistrer et charger le modèle

  • le modèle word2vec peut être enregistré et chargé localement
  • Cela peut réduire le temps nécessaire pour entraîner à nouveau le modèle
model.save('word2vec_model')
model = Word2Vec.load('word2vec_model')

Calcul de similarité

  • La similarité entre les mots incorporés (c'est-à-dire les vecteurs) peut être calculée à l'aide de métriques telles que la similarité cosinus
model.most_similar('hamlet')

[('horatio', 0.9978846311569214),
('reine', 0,9971947073936462),
('laertes', 0.9971820116043091),
('roi', 0.9968599081039429),
('mère', 0,9966716170310974),
("où", 0.9966292381286621),
('deere', 0,9965540170669556),
('ophélie', 0.9964221715927124),
('très', 0,9963752627372742),
('oh', 0,9963476657867432)]

v1 = model['king']
v2 = model['queen']

# define a function that computes cosine similarity between two words
def cosine_similarity(v1, v2):
    return 1 - spatial.distance.cosine(v1, v2)

cosine_similarity(v1, v2)

0,99437165260314941

Déclaration de sortie Cet article est reproduit à: https://dev.to/ragoli86/word-embedding-with-python-word2vec-540c?1 S'il y a une contrefaçon, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3