Cómo entrenar el modelo word2vec usando la biblioteca gensim
¿Qué es la incrustación de palabras?
La incrustación de palabras es un proceso de comprensión del texto mediante algoritmos de aprendizaje automático, también decimos que la incrustación de palabras es una representación aprendida para el texto donde se captura el contexto de la palabra en un documento, la similitud semántica y sintáctica, así como la relación entre otras palabras en el corpus.
Este enfoque es la clave para resolver los problemas de procesamiento del lenguaje natural utilizando el aprendizaje automático y el algoritmo de aprendizaje profundo. Básicamente, la incrustación de palabras es una representación vectorial de palabras. Calculando la distancia o la posición de las palabras, representa el significado de las palabras, las frases, los párrafos o los documentos.
Hay varias técnicas de incrustación de palabras que se han introducido hasta ahora. En general, decimos que hay dos tipos de incrustación de palabras –
- Incorporación de palabras estáticas
- Incorporación de palabras contextuales
1. Incrustación de palabras estáticas: Los métodos tradicionales como Skip-Gram y Continuous Bag-of-Words aprenden la incrustación estática entrenando tablas de búsqueda que traducen las palabras en vectores densos. La incrustación estática es directamente útil para resolver la tarea de semántica léxica.
Problema: no se pueden resolver las ambigüedades de las palabras polisémicas. Por ejemplo, cuando una palabra representa un significado múltiple en dos frases diferentes, los métodos Skip-Gram o BOW fallan.
2. Incrustación de palabras contextuales: La incrustación de palabras contextualizadas tiene como objetivo capturar la semántica de la palabra en diferentes contextos para abordar el problema de la polisemia y la naturaleza dependiente del contexto de las palabras. Los modelos LSTM, LSTM bidireccional, etc., ayudan a obtener la forma vectorial de las palabras.
Modelo Word2Vec: Word2Vec es un método para construir tal incrustación estática de palabras. Se ha conseguido utilizando dos métodos Skip Gram y Common Bag of Words (CBOW) con ayuda de redes neuronales. Fue desarrollado por Tomas Mikolov en 2013 en Google.
¿Por qué los necesitamos?
Digamos que tenemos las siguientes frases.
«Me encanta codificar en Jupyter.» y «Disfruto codificando en Pycharm».
Ambas frases son muy cercanas entre sí. Si construimos un vocabulario exhaustivo (llamémoslo V), tendrá V = {I, love, enjoy, coding, in, Jupyter, Pycharm}. Si vamos con una codificación caliente. No vamos a ser capaces de obtener el significado exacto como el amor, disfrutar, la codificación de cada palabra están siendo tratados como el mismo, mientras que el amor y disfrutar y muy cerca uno del otro.
Nuestro motivo es tener palabras con contexto similar será muy cerca de la posición espacial. Matemáticamente, la distancia coseno identificará lo cerca que están dos palabras. La distancia coseno de la palabra más cercana o coseno del ángel será cercana a 0 y para la más lejana será cercana a 1.
¿Cómo funciona Word2Vec?
El modelo Word2Vec puede funcionar con dos algoritmos –
- Skip-gram
- CBOW (Continuous Bag of Words)
Modelo CBOW: Este método toma el contexto de cada palabra como entrada e intenta predecir la palabra correspondiente al contexto. En el proceso de predicción de la palabra objetivo, aprendemos la representación vectorial de la palabra objetivo. Como entrada habrá múltiples palabras según el tamaño de la ventana (5 palabras), pero devolverá una palabra como salida.
Veamos la arquitectura en profundidad:
Modelo de recorte de trama: Este es otro algoritmo para Word2Vec. Es justo lo contrario del modelo CBOW. El modelo tomará una palabra como entrada, pero devolverá múltiples palabras según el tamaño de la ventana.
Implementación del modelo Word2Vec con Gensim:
Aquí, explicaré paso a paso cómo entrenar el modelo word2vec usando Gensim. Conjunto de datos, he recogido de la plataforma Kaggle. Este conjunto de datos en de Myers-Briggs Type Indicator datos públicos. Contiene dos columnas «type» y «post». «type» define 16 tipos de personalidad y «post «define el comentario de esos 16 tipos de individuo personalizado.
1. Carga de datos y descripción de datos
# Carga del conjunto de datos
data_df = pd.read_csv(«data/mbti_1.csv»)
data_df.head()
2. Limpieza y preprocesamiento de datos
Después de cargar los datos, es necesario encontrar si los datos contienen valor NA, si el valor NA dentro del conjunto de datos, lo eliminaremos.
# Eliminar los valores na del marco de datos
def data_na_value_cleaning(data):
print(«\nAntes de la limpieza, Forma de los datos : «, data.shape)
print(«Antes de eliminar los valores nulos: – – – – – -«)
print(data.isna().sum())
data.dropna(inplace=True)
data.reset_index(inplace=True,drop=True)
print(«Después de eliminar los valores nulos: – – – – – -«)
print(data.isna().sum())
print(«Después de la limpieza, Forma de los datos : «, data.shape)
return data
Como nuestros datos en no tienen ningún valor NA. Por lo tanto, no se ha eliminado ninguna fila. Ahora, comprobamos si hay valores duplicados en el Dataset.
# Eliminación de valores duplicados
def duplicate_content_removal(data, col, ini_row):
print(«\nAntes de eliminar los duplicados, el número de datos era : «, ini_row)
duplicate_count = data.duplicados().sum()
print(«\NNNúmero de duplicados: «, duplicate_count)description_data = data.drop_duplicates()
cleaned_row = len(description_data)
if (ini_row – cleaned_row) > 0:
print(«\nReducción total de datos : «, (ini_row – cleaned_row))
print(«\nDespués de eliminar los duplicados, el número de datos es :», cleaned_row)
else:
print(«\nEl conjunto de datos no contiene ningún dato duplicado.»)
return list(description_data)posts = duplicate_content_removal(data_df, ‘posts’, data_df.shape)
Leave a Reply