Incrustaciones de palabras y Word2Vec con ejemplo

โšก Resumen inteligente

Word Embedding y Word2Vec convierten texto en vectores numรฉricos densos para que los modelos de aprendizaje automรกtico reconozcan palabras con significado similar. Este recurso explica la tรฉcnica, sus arquitecturas CBOW y Skip-Gram, las funciones de activaciรณn y una implementaciรณn completa en Gensim para aplicaciones reales.

  • ๐Ÿ”ข Definiciรณn bรกsica: La tรฉcnica de incrustaciรณn de palabras transforma un vocabulario en vectores de valores reales, colocando palabras semรกnticamente similares cerca unas de otras en el espacio vectorial.
  • ๐Ÿง  Modelos Word2Vec: El algoritmo Continuous Bag of Words predice una palabra a partir de su contexto, mientras que Skip-Gram predice el contexto circundante a partir de una sola palabra.
  • โš™๏ธ Mecรกnica del entrenamiento: Las funciones softmax, softmax jerรกrquica y el muestreo negativo activan neuronas y optimizan el aprendizaje en vocabularios extensos de manera eficiente.
  • ๐Ÿ”— Integraciรณn con NLTK: NLTK realiza un preprocesamiento como la tokenizaciรณn y la lematizaciรณn, mientras que Word2Vec captura las relaciones semรกnticas y sintรกcticas.
  • ๐Ÿ› ๏ธ Implementaciรณn de Gensim: La biblioteca Gensim crea, guarda y vuelve a cargar un modelo Word2Vec para calcular la similitud de palabras en datos reales.

Modelo de incrustaciรณn de palabras y Word2Vec

ยฟQuรฉ es la incrustaciรณn de Word?

Incrustaciรณn de palabras es un tipo de representaciรณn de palabras que permite a los algoritmos de aprendizaje automรกtico comprender palabras con significados similares. Es una tรฉcnica de modelado de lenguaje y aprendizaje de caracterรญsticas para mapear palabras en vectores de nรบmeros reales utilizando redes neuronales, modelos probabilรญsticos o reducciรณn de dimensionalidad en la matriz de coocurrencia de palabras. Algunos modelos de incrustaciรณn de palabras son Word2vec (Google), GloVe (Stanford) y fastText (Facebook).

La incrustaciรณn de palabras tambiรฉn se denomina modelo semรกntico distribuido, modelo representado distribuido, espacio vectorial semรกntico o modelo de espacio vectorial. Al leer estos nombres, se encuentra con la palabra semรกnticoEsto significa agrupar palabras similares. Por ejemplo, frutas como manzana, mango y plรกtano deberรญan agruparse, mientras que los libros se ubicarรญan lejos de ellas. En un sentido mรกs amplio, la incrustaciรณn de palabras crearรก un vector de frutas que se ubicarรก lejos de la representaciรณn vectorial de los libros.

ยฟDรณnde se utiliza la incrustaciรณn de Word?

La incrustaciรณn de palabras ayuda en la generaciรณn de caracterรญsticas, la agrupaciรณn de documentos, la clasificaciรณn de texto y las tareas de procesamiento del lenguaje natural. Enumeremos estas aplicaciones y analicemos cada una.

  • Calcular palabras similares: La representaciรณn vectorial de palabras se utiliza para sugerir palabras similares a la palabra que se estรก analizando con el modelo de predicciรณn. Ademรกs, tambiรฉn sugiere palabras diferentes, asรญ como las palabras mรกs comunes.
  • Crea un grupo de palabras relacionadas: Se utiliza para grupos semรกnticosping, que agrupa cosas con caracterรญsticas similares y aleja los elementos diferentes.
  • Caracterรญstica para la clasificaciรณn de texto: El texto se transforma en matrices de vectores que se introducen en el modelo para su entrenamiento y predicciรณn. Los modelos clasificadores basados โ€‹โ€‹en texto no pueden entrenarse con cadenas de caracteres, por lo que este proceso convierte el texto a un formato que la mรกquina puede entrenar. Sus caracterรญsticas de construcciรณn semรกntica facilitan aรบn mรกs la clasificaciรณn basada en texto.
  • Agrupaciรณn de documentos: Esta es otra aplicaciรณn donde Word Embedding y Word2vec se utilizan ampliamente.
  • Procesamiento natural del lenguaje: Hay muchas aplicaciones donde la incrustaciรณn de palabras es รบtil y supera a las caracterรญsticas.tracfases de anรกlisis, como el etiquetado de partes de la oraciรณn, el anรกlisis de sentimientos y el anรกlisis sintรกctico.

Ahora que ya entiendes dรณnde se aplica la incrustaciรณn de palabras, veamos el modelo mรกs popular que se utiliza para crear estas incrustaciones.

ยฟQuรฉ es Word2vec?

palabra2vec Es una tรฉcnica o modelo que genera incrustaciones de palabras para una mejor representaciรณn de las mismas. Es un mรฉtodo de procesamiento del lenguaje natural que captura un gran nรบmero de relaciones sintรกcticas y semรกnticas precisas entre palabras. Se trata de una red neuronal de dos capas, poco profunda, que puede detectar sinรณnimos y sugerir palabras adicionales para oraciones incompletas una vez entrenada.

Antes de continuar, vea la diferencia entre una red neuronal superficial y una profunda, como se muestra en el siguiente diagrama de ejemplo de incrustaciรณn de palabras:

Una red neuronal superficial consta de una sola capa oculta entre la entrada y la salida, mientras que una red neuronal profunda contiene mรบltiples capas ocultas entre la entrada y la salida. La entrada se procesa mediante nodos, mientras que la capa oculta, al igual que la capa de salida, contiene neuronas.

Aprendizaje superficial versus aprendizaje profundo
Aprendizaje superficial versus aprendizaje profundo

Word2vec es una red de dos capas, compuesta por una capa de entrada, una capa oculta y una capa de salida.

Word2vec fue desarrollado por un grupo de investigadores encabezado por Tomas Mikolov en GoogleWord2vec es mejor y mรกs eficiente que el modelo de anรกlisis semรกntico latente.

ยฟPor quรฉ Word2vec?

Word2vec representa las palabras en un espacio vectorial. Las palabras se representan como vectores, y su ubicaciรณn se realiza de forma que las palabras con significados similares aparezcan juntas y las palabras con significados diferentes se encuentren alejadas. Esto tambiรฉn se denomina relaciรณn semรกntica. Las redes neuronales no entienden texto; solo entienden nรบmeros. La incrustaciรณn de palabras (Word Embedding) proporciona una forma de convertir texto en un vector numรฉrico.

Word2vec reconstruye el contexto lingรผรญstico de las palabras. Antes de continuar, entendamos quรฉ es el contexto lingรผรญstico. En general, cuando hablamos o escribimos para comunicarnos, otras personas intentan comprender el objetivo de la oraciรณn. Por ejemplo, "ยฟCuรกl es la temperatura de la India?". En este caso, el contexto es que el usuario quiere saber la temperatura de la India. En resumen, el objetivo principal de una oraciรณn es el contexto. Las palabras o frases que rodean el lenguaje hablado o escrito ayudan a determinar el significado del contexto. Word2vec aprende la representaciรณn vectorial de las palabras a travรฉs de estos contextos.

ยฟQuรฉ hace Word2vec?

Antes de incrustar Word

Es importante conocer el enfoque utilizado antes de la incrustaciรณn de palabras y sus desventajas. A continuaciรณn, veremos cรณmo se superan dichas desventajas mediante la incrustaciรณn de palabras con el enfoque Word2vec. Finalmente, explicaremos cรณmo funciona Word2vec, ya que es fundamental comprender su funcionamiento.

Enfoque para el anรกlisis semรกntico latente

Este es el mรฉtodo que se utilizaba antes de las incrustaciones de palabras. Emplea el concepto de bolsa de palabras, donde las palabras se representan mediante vectores codificados. Se trata de una representaciรณn vectorial dispersa cuya dimensiรณn es igual al tamaรฑo del vocabulario. Si la palabra aparece en el diccionario, se contabiliza; de lo contrario, no. Para obtener mรกs informaciรณn, consulte el programa a continuaciรณn.

Ejemplo de Word2vec

Ejemplo de Word2vec

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."]
vocabulary = vectorizer.fit(data_corpus)
X = vectorizer.transform(data_corpus)

print(X.toarray())
print(vectorizer.get_feature_names_out())

Salida:

[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

Code Explicaciรณn

  1. CountVectorizer es el mรณdulo que se utiliza para almacenar el vocabulario en funciรณn de las palabras que contiene. Se importa desde sklearn.
  2. Crea el objeto usando la clase CountVectorizer.
  3. Escriba en la lista los datos que se van a ajustar en el CountVectorizer.
  4. Los datos se ajustan al objeto creado a partir de la clase CountVectorizer.
  5. Aplique un enfoque de bolsa de palabras para contar las palabras en los datos utilizando el vocabulario. Si una palabra o token no estรก disponible en el vocabulario, su posiciรณn de รญndice se establece en cero.
  6. La variable de la lรญnea 5, que es x, se convierte en una matriz (un mรฉtodo disponible para x). Esto proporciona el recuento de cada token en la oraciรณn o lista proporcionada en la lรญnea 3.
  7. Esto muestra las caracterรญsticas que forman parte del vocabulario cuando se ajusta utilizando los datos de la lรญnea 4.

En el enfoque de semรกntica latente, la fila representa palabras รบnicas, mientras que la columna representa la cantidad de veces que esa palabra aparece en el documento. Se trata de una representaciรณn de palabras en forma de matriz de documento. La frecuencia de tรฉrmino-frecuencia inversa de documento (TF-IDF) se utiliza para contar la frecuencia de las palabras en el documento, que es la frecuencia del tรฉrmino en el documento dividida por la frecuencia del tรฉrmino en todo el corpus.

Defecto del mรฉtodo Bolsa de palabras

  • Ignora el orden de la palabra; por ejemplo, esto es malo = Esto es malo.
  • Ignora el contexto de las palabras. Supongamos que escribimos la oraciรณn ยซLe encantaban los libros. La mejor educaciรณn se encuentra en los librosยป. Esto crearรญa dos vectores: uno para ยซLe encantaban los librosยป y otro para ยซLa mejor educaciรณn se encuentra en los librosยป. Los tratarรญa como ortogonales, lo que los harรญa independientes, pero en realidad estรกn relacionados entre sรญ.

Para superar estas limitaciones, se desarrollรณ la tรฉcnica de incrustaciรณn de palabras, y Word2vec es uno de los mรฉtodos utilizados para implementarla.

ยฟCรณmo funciona Word2vec?

Word2vec aprende una palabra prediciendo su contexto circundante. Por ejemplo, tomemos la palabra "ร‰l" ama. Fรบtbol americano."

Queremos calcular el Word2vec para la palabra: ama..

Supongamos:

loves = Vin. P(Vout / Vin) is calculated
where,
Vin is the input word.
P is the probability of likelihood.
Vout is the output word.

La palabra ama. El algoritmo recorre cada palabra del corpus. Se codifican tanto las relaciones sintรกcticas como semรกnticas entre las palabras. Esto facilita la bรบsqueda de palabras similares y anรกlogas.

Todas las caracterรญsticas aleatorias de la palabra. ama. se calculan. Estas caracterรญsticas se modifican o actualizan con respecto a las palabras vecinas o de contexto con la ayuda de un Propagaciรณn hacia atrรกs mรฉtodo.

Otra forma de aprendizaje es que si los contextos de dos palabras son similares, o si dos palabras tienen caracterรญsticas similares, entonces esas palabras estรกn relacionadas.

palabra2vec Architectura

Word2vec utiliza dos arquitecturas:

  1. Bolsa continua de palabras (CBOW)
  2. Saltar gramo

Antes de continuar, analicemos la importancia de estas arquitecturas o modelos desde la perspectiva de la representaciรณn de palabras. El aprendizaje de la representaciรณn de palabras es esencialmente no supervisado, pero se necesitan etiquetas para entrenar el modelo. Skip-gram y CBOW transforman la representaciรณn no supervisada en una representaciรณn supervisada para el entrenamiento del modelo.

En CBOW, la palabra actual se predice utilizando la ventana de ventanas de contexto circundantes. Por ejemplo, si wi-1, Wi-2, Wi + 1, Wi + 2 se les dan palabras o contexto, este modelo proporcionarรก wi.

Skip-Gram realiza lo opuesto a CBOW, lo que implica que predice la secuencia o el contexto dado a partir de la palabra. Puedes invertir el ejemplo para entenderlo. Si wi Se da, esto predecirรก el contexto, o wi-1, Wi-2, Wi + 1, Wi + 2.

Word2vec ofrece la opciรณn de elegir entre CBOW (Continuous Bag of Words) y skip-gram. Estos parรกmetros se proporcionan durante el entrenamiento del modelo. Se puede optar por utilizar muestreo negativo o una capa softmax jerรกrquica.

Bolsa continua de palabras

Dibujemos un diagrama de ejemplo sencillo de Word2vec para comprender la arquitectura continua de bolsa de palabras.

Bolsa continua de palabras Architectura

Bolsa continua de palabras Architectura

Calculemos las ecuaciones matemรกticamente. Supongamos que V es el tamaรฑo del vocabulario y N es el tamaรฑo de la capa oculta. La entrada se define como {xi-1, Xi-2, Xi + 1, Xi + 2 }. Obtenemos la matriz de pesos multiplicando V * N. Otra matriz se obtiene multiplicando el vector de entrada por la matriz de pesos. Esto tambiรฉn se puede entender mediante la siguiente ecuaciรณn.

h = xitW

donde xit y W son el vector de entrada y la matriz de pesos, respectivamente.

Para calcular la coincidencia entre el contexto y la siguiente palabra, consulte la siguiente ecuaciรณn.

u = representaciรณn predicha * h

donde la representaciรณn predicha se obtiene del modelo en la ecuaciรณn anterior.

Modelo de salto de gramo

El mรฉtodo Skip-Gram se utiliza para predecir una oraciรณn a partir de una palabra de entrada. Para comprenderlo mejor, veamos el diagrama que aparece en el siguiente ejemplo de Word2vec.

Modelo de salto de gramo

Modelo de salto de gramo

Se puede considerar como el inverso del modelo de bolsa de palabras continua, donde la entrada es la palabra y el modelo proporciona el contexto o la secuencia. Tambiรฉn podemos concluir que la palabra objetivo se introduce en la entrada, y la capa de salida se replica varias veces para dar cabida al nรบmero de palabras de contexto elegido. El vector de error de todas las capas de salida se suma para ajustar los pesos mediante un mรฉtodo de retropropagaciรณn.

ยฟQuรฉ modelo elegir?

CBOW es varias veces mรกs rรกpido que skip-gram y proporciona una mejor frecuencia para las palabras frecuentes, mientras que skip-gram requiere una pequeรฑa cantidad de datos de entrenamiento y representa incluso palabras o frases poco comunes. La siguiente tabla compara ambas arquitecturas de un vistazo.

Aspecto CBOW Saltar-Gramo
Predicciรณn Predice la palabra objetivo a partir del contexto. Predice el contexto a partir de la palabra objetivo.
Velocidad de entrenamiento Mรกs rรกpido Mรกs lento
Palabras frecuentes Mayor precisiรณn Menor precisiรณn
Palabras raras Representaciรณn mรกs dรฉbil Mayor representaciรณn
Datos de entrenamiento Necesita mรกs datos Funciona con menos datos

La relaciรณn entre Word2vec y NLTK

NLTK es lo natural Language ToolKit. Se utiliza para el preprocesamiento de texto. Permite realizar diversas operaciones como el etiquetado de partes de la oraciรณn, la lematizaciรณn, la derivaciรณn, la eliminaciรณn de palabras vacรญas y la eliminaciรณn de palabras poco frecuentes o de uso escaso. Ayuda a limpiar el texto y a extraer caracterรญsticas de las palabras mรกs relevantes. Por otro lado, Word2vec se utiliza para la coincidencia semรกntica (relaciona elementos cercanos) y sintรกctica (secuencia). Con Word2vec, se pueden encontrar palabras similares y diferentes, realizar reducciones dimensionales y mucho mรกs. Otra caracterรญstica importante de Word2vec es la conversiรณn de la representaciรณn de texto de alta dimensiรณn en vectores de baja dimensiรณn.

ยฟDรณnde utilizar NLTK y Word2vec?

Si se necesitan realizar tareas de propรณsito general como las mencionadas anteriormente, como la tokenizaciรณn, el etiquetado POS y el anรกlisis sintรกctico, se debe optar por NLTK, mientras que para predecir palabras segรบn algรบn contexto, modelado de temas o similitud de documentos, se debe usar Word2vec.

Relaciรณn de NLTK y Word2vec con ayuda de cรณdigo

NLTK y Word2vec se pueden usar juntos para encontrar representaciones de palabras similares o coincidencias sintรกcticas. El kit de herramientas de NLTK permite cargar muchos paquetes incluidos, y se puede crear un modelo con Word2vec. Posteriormente, se puede probar con palabras reales. Veamos la combinaciรณn de ambos en el siguiente cรณdigo. Antes de continuar, consulte los corpus que proporciona NLTK. Puede descargarlos con el siguiente comando:

nltk(nltk.download('all'))

Relaciรณn de NLTK y Word2vec

Corpora descargado usando NLTK

Consulte la captura de pantalla del cรณdigo.

import nltk
import gensim
from nltk.corpus import abc

model = gensim.models.Word2Vec(abc.sents())
X = list(model.wv.vocab)
data = model.most_similar('science')
print(data)

Relaciรณn de NLTK y Word2vec con la ayuda de Code

Salida:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

Explicaciรณn de Code

  1. Se importa la biblioteca nltk, desde donde se puede descargar el corpus abc que utilizaremos en el siguiente paso.
  2. Gensim se ha importado. Si Gensim Word2vec no estรก instalado, instรกlelo con el comando โ€œpip3 install gensimโ€. Consulte la captura de pantalla a continuaciรณn.
Instalaciรณn de Gensim usando PIP

Instalaciรณn de Gensim usando PIP
  1. Importa el corpus abc, que se ha descargado usando nltk.download('abc').
  2. Pasa los archivos al modelo Word2vec, que se importa usando Gensim, como oraciones.
  3. El vocabulario se almacena en forma de variable.
  4. El modelo se prueba con la palabra de muestra. ciencia, ya que estos archivos estรกn relacionados con la ciencia.
  5. Aquรญ, el modelo predice la palabra similar "ciencia".

Activadores y Word2Vec

La funciรณn de activaciรณn de una neurona define su respuesta ante una serie de estรญmulos. Se inspira biolรณgicamente en la actividad cerebral, donde diferentes neuronas se activan con distintos estรญmulos. Veamos la funciรณn de activaciรณn a travรฉs del siguiente diagrama.

Funciรณn de activaciรณn en Word2vec.

Comprender la funciรณn de activaciรณn

Aquรญ, x1, x2, โ€ฆ x4 son los nodos de la red neuronal.

w1, w2, w3 son los pesos de los nodos.

La suma (ฮฃ) de todos los pesos y valores de los nodos funciona como la funciรณn de activaciรณn.

ยฟPor quรฉ la funciรณn de activaciรณn?

Si no se utiliza ninguna funciรณn de activaciรณn, la salida serรญa lineal, pero la funcionalidad de una funciรณn lineal es limitada. Para lograr una funcionalidad compleja como la detecciรณn de objetos, la clasificaciรณn de imรกgenes, etc.ping Para la generaciรณn de texto mediante voz y muchas otras salidas no lineales, se necesita una funciรณn de activaciรณn.

Cรณmo se calcula la capa de activaciรณn en la incrustaciรณn de palabras (Word2vec)

La capa Softmax (funciรณn exponencial normalizada) es la funciรณn de la capa de salida que activa o dispara cada nodo. Otro enfoque utilizado es Softmax jerรกrquico, donde la complejidad se calcula mediante O(log2En softmax, la complejidad es O(V), mientras que en softmax es O(V), donde V es el tamaรฑo del vocabulario. La diferencia radica en la reducciรณn de la complejidad en la capa softmax jerรกrquica. Para comprender su funcionamiento, consulte el siguiente ejemplo de incrustaciรณn de palabras:

Estructura tipo รกrbol Softmax jerรกrquico

Estructura jerรกrquica tipo รกrbol softmax

Supongamos que queremos calcular la probabilidad de observar la palabra amor dado un contexto determinado. El flujo desde la raรญz hasta el nodo hoja se moverรก primero al nodo 2 y luego al nodo 5. Entonces, si tenemos un tamaรฑo de vocabulario de 8, solo se necesitan tres cรกlculos. Esto permite descomponer el cรกlculo de la probabilidad de una palabra (amor).

ยฟQuรฉ otras opciones estรกn disponibles ademรกs de Softmax jerรกrquico?

En tรฉrminos generales, las opciones de incrustaciรณn de palabras disponibles son Softmax diferenciado, CNN-Softmax, muestreo de importancia, muestreo de importancia adaptativo, estimaciรณn contrastiva de ruido, muestreo negativo, autonormalizaciรณn y normalizaciรณn infrecuente.

Hablando especรญficamente de Word2vec, disponemos de muestreo negativo.

El muestreo negativo es una forma de muestrear los datos de entrenamiento. Es similar al descenso de gradiente estocรกstico, pero con algunas diferencias. El muestreo negativo busca รบnicamente ejemplos de entrenamiento negativos. Se basa en la estimaciรณn contrastiva del ruido y muestrea aleatoriamente palabras que no estรกn en el contexto. Es un mรฉtodo de entrenamiento rรกpido y elige el contexto al azar. Si la palabra predicha aparece en el contexto elegido aleatoriamente, ambos vectores estรกn cerca uno del otro.

ยฟQuรฉ conclusiรณn se puede sacar?

Los activadores estimulan las neuronas de la misma manera que lo hacen ante estรญmulos externos. La capa Softmax es una de las funciones de la capa de salida que activa las neuronas en el caso de las incrustaciones de palabras. En Word2vec, disponemos de opciones como Softmax jerรกrquico y muestreo negativo. Mediante los activadores, se puede convertir una funciรณn lineal en una no lineal, y se puede implementar un algoritmo complejo de aprendizaje automรกtico utilizando dichas funciones.

ยฟQuรฉ es Gensim?

Gensim es un conjunto de herramientas de cรณdigo abierto para modelado de temas y procesamiento de lenguaje natural que se implementa en Python y Cython. El conjunto de herramientas Gensim permite a los usuarios importar Word2vec para el modelado de temas y descubrir estructuras ocultas en el texto. Gensim ofrece no solo una implementaciรณn de Word2vec, sino tambiรฉn de Doc2vec y FastText.

Esta secciรณn se centra en Word2vec, asรญ que nos ceรฑiremos al tema actual.

Cรณmo implementar Word2vec usando Gensim

Hasta ahora, hemos hablado de quรฉ es Word2vec, sus diferentes arquitecturas, por quรฉ se estรก produciendo un cambio de una bolsa de palabras a Word2vec, la relaciรณn entre Word2vec y NLTK con cรณdigo en vivo y las funciones de activaciรณn.

A continuaciรณn se describe el mรฉtodo paso a paso para implementar Word2vec usando Gensim:

Paso 1) Recopilaciรณn de datos

El primer paso para implementar cualquier modelo de aprendizaje automรกtico o procesamiento del lenguaje natural es la recopilaciรณn de datos.

Observe los datos para crear un chatbot inteligente como se muestra en el siguiente ejemplo de Gensim Word2vec.

[{"tag": "welcome",
"patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],
"responses": ["Hello, thanks for contacting us", "Good to see you here", "Hi there, how may I assist you?"]
        },
{"tag": "goodbye",
"patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],
"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]
        },
{"tag": "thankful",
"patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],
"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]
        },
        {"tag": "hoursopening",
"patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],
"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]
        },
{"tag": "payments",
"patterns": ["Can I pay using credit card?", "Can I pay using Mastercard?", "Can I pay using cash only?"],
"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don't worry"]
        }
   ]

Esto es lo que entendemos de los datos:

  • Estos datos contienen tres elementos: etiqueta, patrรณn y respuestas. La etiqueta representa la intenciรณn (cuรกl es el tema de discusiรณn).
  • Los datos estรกn en formato JSON.
  • Un patrรณn es una pregunta que los usuarios le harรกn al bot.
  • Las respuestas son las soluciones que el chatbot proporcionarรก a la pregunta o patrรณn correspondiente.

Paso 2) Preprocesamiento de datos

Es muy importante procesar los datos sin procesar. Si se introducen datos limpios en la mรกquina, el modelo responderรก con mayor precisiรณn y aprenderรก los datos de manera mรกs eficiente.

Este paso implica eliminar palabras vacรญas, aplicar la lematizaciรณn, eliminar palabras innecesarias, etc. Antes de continuar, es importante cargar los datos y convertirlos en un marco de datos. Consulte el cรณdigo a continuaciรณn para obtener mรกs informaciรณn.

import json
json_file = 'intents.json'
with open('intents.json', 'r') as f:
    data = json.load(f)

Explicaciรณn de Code:

  1. Como los datos estรกn en formato JSON, se importa JSON.
  2. El archivo se almacena en la variable.
  3. El archivo se abre y se carga en la variable de datos.

Ahora que los datos se han importado, es momento de convertirlos en un marco de datos. Consulte el cรณdigo a continuaciรณn para ver el siguiente paso.

import pandas as pd
df = pd.DataFrame(data)
df['patterns'] = df['patterns'].apply(', '.join)

Explicaciรณn de Code:

1. Los datos se convierten en un marco de datos utilizando pandas, que se importรณ anteriormente.

2. Convierte la lista de patrones de columna en una cadena de texto.

from nltk.corpus import stopwords
from textblob import Word
stop = stopwords.words('english')
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns'] = df['patterns'].str.replace('[^\w\s]', '')
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Code Explicaciรณn:

1. Las palabras vacรญas en inglรฉs se importan utilizando el mรณdulo stop-word del kit de herramientas nltk.

2. Todas las palabras del texto se convierten a minรบsculas usando una condiciรณn for y una funciรณn lambda. funciรณn lambda Es una funciรณn anรณnima.

3. Se comprueba si hay signos de puntuaciรณn en todas las filas del texto del marco de datos, y estas se filtran.

4. Los caracteres como nรบmeros o puntos se eliminan mediante una expresiรณn regular.

5. DigiLos ts se eliminan del texto.

6. En esta etapa se eliminan las palabras vacรญas.

7. Ahora se filtran las palabras y se eliminan las variantes de una misma palabra mediante lematizaciรณn. Con esto, hemos finalizado el preprocesamiento de los datos.

Salida:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening
4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please dont worry']",payments

Paso 3) Construcciรณn de redes neuronales usando Word2vec

Ahora es el momento de crear un modelo utilizando el mรณdulo Word2vec de Gensim. Debemos importar Word2vec desde Gensim. Hagรกmoslo, luego lo construiremos y, en la etapa final, comprobaremos el modelo con datos en tiempo real.

from gensim.models import Word2Vec

Ahora podemos construir el modelo con รฉxito usando Word2Vec. Consulte la siguiente lรญnea de cรณdigo para aprender cรณmo crear el modelo con Word2Vec. El texto se proporciona al modelo en forma de lista, por lo que convertiremos el texto del marco de datos a una lista usando el siguiente cรณdigo.

Bigger_list = []
for i in df['patterns']:
     li = list(i.split(""))
     Bigger_list.append(li)
Model = Word2Vec(Bigger_list, min_count=1, size=300, workers=4)

Explicaciรณn de Code:

1. Se creรณ la lista mรกs grande donde se agrega la lista interna. Este es el formato que se le pasa al modelo Word2Vec.

2. Se implementa un bucle y se itera sobre cada entrada de la columna de patrones del marco de datos.

3. Cada elemento de los patrones de columna se divide y se almacena en la lista interna li.

4. La lista interna se aรฑade a la lista externa.

5. Esta lista se proporciona al modelo Word2Vec. Analicemos algunos de los parรกmetros que se incluyen aquรญ.

Recuento_mรญnimo: Ignora todas las palabras con una frecuencia total inferior a esta.

Tamaรฑo: Indica la dimensionalidad de los vectores de palabras.

Trabajadores: Estos son los hilos para entrenar el modelo.

Tambiรฉn existen otras opciones disponibles, y algunas de las mรกs importantes se explican a continuaciรณn.

Ventana: Distancia mรกxima entre la palabra actual y la prevista dentro de una oraciรณn.

Sg: Se trata de un algoritmo de entrenamiento: 1 para skip-gram y 0 para bolsa de palabras continua. Ya hemos hablado de esto en detalle anteriormente.

HS: Si el valor es 1, entonces utilizamos softmax jerรกrquico para el entrenamiento, y si es 0, se utiliza el muestreo negativo.

Alfa: Tasa de aprendizaje inicial.

Mostremos el cรณdigo final a continuaciรณn:

# list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
# data in json format
json_file = 'intents.json'
with open('intents.json', 'r') as f:
    data = json.load(f)
# displaying the list of stopwords
stop = stopwords.words('english')
# dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# cleaning the data using the NLP approach
print(df)
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns'] = df['patterns'].str.replace('[^\w\s]', '')
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
# taking the outer list
bigger_list = []
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
# structure of data to be taken by the model.word2vec
print("Data format for the overall list:", bigger_list)
# custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1, size=300, workers=4)

Paso 4) Guardar modelo

El modelo se puede guardar en formato binario (bin) o como archivo de modelo. El formato binario es el que se muestra a continuaciรณn. Consulte las siguientes lรญneas para guardar el modelo.

model.save("word2vec.model")
model.save("model.bin")

Explicaciรณn del cรณdigo anterior.

1. El modelo se guarda en forma de archivo .model.

2. El modelo se guarda en formato de archivo .bin.

Utilizaremos este modelo para realizar pruebas en tiempo real, como por ejemplo, palabras similares, palabras diferentes y palabras mรกs comunes.

Paso 5) Cargar el modelo y realizar pruebas en tiempo real

El modelo se carga utilizando el siguiente cรณdigo:

model = Word2Vec.load('model.bin')

Si desea imprimir el vocabulario, puede hacerlo utilizando el siguiente comando:

vocab = list(model.wv.vocab)

Por favor vea el resultado:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

Paso 6) Verificaciรณn de palabras mรกs similares

Implementemos las cosas de manera prรกctica:

similar_words = model.most_similar('thanks')
print(similar_words)

Por favor vea el resultado:

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]

Paso 7) No coincide con las palabras proporcionadas

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

Hemos proporcionado las palabras ยกHasta luego, gracias por su visita!Esto imprime la palabra mรกs diferente de entre estas palabras. Ejecutemos este cรณdigo y veamos el resultado.

El resultado despuรฉs de la ejecuciรณn del cรณdigo anterior:

Thanks

Paso 8) Encontrar la similitud entre dos palabras

Esto indica el resultado en tรฉrminos de la probabilidad de similitud entre dos palabras. Consulte el cรณdigo a continuaciรณn para ver cรณmo ejecutar esta secciรณn.

similarity_two_words = model.similarity('please', 'see')
print("Please provide the similarity between these two words:")
print(similarity_two_words)

El resultado del cรณdigo anterior es el siguiente:

0.13706

Puedes encontrar palabras similares ejecutando el siguiente cรณdigo:

similar = model.similar_by_word('kind')
print(similar)

Salida del cรณdigo anterior:

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]

Preguntas Frecuentes

Word2Vec produce un vector fijo por palabra. Los modelos de IA modernos, como BERT y GPT, generan incrustaciones contextuales, lo que significa que la misma palabra recibe diferentes vectores dependiendo de la oraciรณn que la rodea, capturando asรญ el significado con mayor precisiรณn.

Sรญ. Las incrustaciones de palabras siguen siendo รบtiles para tareas sencillas, como bรบsquedas, recomendaciones y agrupamiento, donde la velocidad y el bajo consumo computacional son cruciales. Ademรกs, constituyen el concepto fundamental de las capas de incrustaciรณn utilizadas en los modelos de lenguaje complejos.

No. Word2Vec es una red neuronal superficial con una sola capa oculta. Si bien se inspira en las redes neuronales, no se considera aprendizaje profundo, que requiere mรบltiples capas ocultas entre la entrada y la salida.

Los tamaรฑos de vectores mรกs comunes oscilan entre 100 y 300 dimensiones. Los tamaรฑos mรกs pequeรฑos se entrenan mรกs rรกpido y son adecuados para conjuntos de datos pequeรฑos, mientras que los tamaรฑos mรกs grandes capturan relaciones mรกs complejas, pero requieren mรกs datos y capacidad de cรกlculo para evitar el sobreajuste.

No. Word2Vec no puede procesar palabras fuera del vocabulario porque aprende un vector por cada palabra conocida. Modelos como FastText solucionan esto construyendo vectores de palabras a partir de n-gramas de caracteres, lo que permite la representaciรณn de palabras desconocidas.

Resumir este post con: