"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Incrustación de palabras con Python: Wordc

Incrustación de palabras con Python: Wordc

Publicado el 2024-11-08
Navegar:634

Word-embedding-with-Python: Wordc

Implementación de word2vec con Python (y Gensim)

  • Nota: Este código está escrito en Python 3.6.1 (Gensim 2.3.0)

  • Implementación en Python y aplicación de word2vec con Gensim

  • Artículo original: Mikolov, T., Chen, K., Corrado, G. y Dean, J. (2013). Estimación eficiente de representaciones de palabras en el espacio vectorial. preimpresión de 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
  • Importar conjunto de datos de entrenamiento
  • Importar el corpus Hamlet de Shakespeare desde la biblioteca 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))

Tipo de corpus: clase 'lista'
Longitud del corpus: 3106

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

['[', 'La', 'Tragedia', 'de', 'Hamlet', 'por', 'William', 'Shakespeare', '1599', ']']
['Actus', 'Primus', '.']
['Fran', '.']

Datos previos al proceso

  • Utilice el módulo re para preprocesar datos
  • Convertir todas las letras a minúsculas
  • Eliminar puntuaciones, números, 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', 'tragedia', 'de', 'hamlet', 'por', 'william', 'shakespeare']
['actus', 'primus']
['fran']

Crear y entrenar modelo

  • Crear un modelo word2vec y entrenarlo con el corpus Hamlet
  • Descripción del parámetro clave (https://radimrehurek.com/gensim/models/word2vec.html)
    • sentencias: datos de entrenamiento (tiene que ser una lista con oraciones tokenizadas)
    • tamaño: dimensión del espacio de incrustación
    • sg: CBOW si 0, saltar gramo si 1
    • ventana: número de palabras contabilizadas para cada contexto (si la ventana
    • el tamaño es 3, se consideran 3 palabras en el vecindario izquierdo y 3 palabras en el vecindario derecho)
    • min_count: recuento mínimo de palabras a incluir en el vocabulario
    • iter: número de iteraciones de entrenamiento
    • trabajadores: número de subprocesos de trabajadores para entrenar
model = Word2Vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = Pool()._processes)

model.init_sims(replace = True)

Guardar y cargar modelo

  • El modelo word2vec se puede guardar y cargar localmente
  • Hacerlo puede reducir el tiempo para entrenar el modelo nuevamente
model.save('word2vec_model')
model = Word2Vec.load('word2vec_model')

Cálculo de similitud

  • La similitud entre palabras incrustadas (es decir, vectores) se puede calcular usando métricas como la similitud del coseno
model.most_similar('hamlet')

[('horacio', 0.9978846311569214),
('reina', 0.9971947073936462),
('laertes', 0.9971820116043091),
('rey', 0.9968599081039429),
('madre', 0.9966716170310974),
('donde', 0.9966292381286621),
('deere', 0.9965540170669556),
('ofelia', 0.9964221715927124),
('muy', 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

Declaración de liberación Este artículo se reproduce en: https://dev.to/ragoli86/word-embedding-with-python-word2vec-540c?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3