Incrustación de Word y modelo Word2Vec con ejemplo

¿Qué es la incrustación de Word?

Incrustación de palabras es un tipo de representación de palabras que permite que los algoritmos de aprendizaje automático comprendan 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 dimensión en la matriz de coocurrencia de palabras. Algunos modelos de incrustación de palabras son Word2vec (Google), Glove (Stanford) y Faster (Facebook).

Word Embedding también se denomina modelo semántico distribuido o espacio vectorial semántico o representado distribuido o modelo de espacio vectorial. Al leer estos nombres, se encontrará con la palabra semántica, que significa categorizar palabras similares juntas. Por ejemplo, frutas como manzana, mango o plátano deben colocarse cerca, mientras que los libros estarán lejos de estas palabras. En un sentido más amplio, la incrustación de palabras creará el 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 algunas de ellas y analicemos cada una de estas aplicaciones.

  • Calcular palabras similares: La incrustación de palabras se utiliza para sugerir palabras similares a la palabra sometida al 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 agrupaciones semánticas que agruparán cosas de características similares y diferentes lejos.
  • Característica para la clasificación de texto: El texto se asigna a matrices de vectores que se envían al modelo para entrenamiento y predicción. Los modelos de clasificador basados ​​en texto no se pueden entrenar en la cadena, por lo que esto convertirá el texto en un formato entrenable por máquina. Además, sus características de creación de ayuda semántica en la clasificación basada en texto.
  • Agrupación de documentos: es otra aplicación donde se usa ampliamente Word Embedding Word2vec
  • Procesamiento natural del lenguaje: Hay muchas aplicaciones en las que la incrustación de palabras es útil y supera las fases de extracción de características, como el etiquetado de partes del discurso, el análisis sentimental y el análisis sintáctico. Ahora tenemos algunos conocimientos sobre la incrustación de palabras. También se arroja algo de luz sobre diferentes modelos para implementar la incrustación de palabras. Todo este tutorial de incrustación de Word se centra en uno de los modelos (Word2vec).

¿Qué es Word2vec?

palabra2vec es una técnica/modelo para producir incrustación de palabras para una mejor representación de las mismas. Es un método de procesamiento del lenguaje natural que captura una gran cantidad de relaciones sintácticas y semánticas precisas de palabras. Es una red neuronal poco profunda de dos capas que puede detectar palabras sinónimas y sugerir palabras adicionales para oraciones parciales una vez entrenada.

Antes de continuar con este tutorial de Word2vec, consulte la diferencia entre redes neuronales superficiales y profundas como se muestra en el siguiente diagrama de ejemplo de incrustación de Word:

La red neuronal superficial consiste únicamente en una capa oculta entre la entrada y la salida, mientras que la red neuronal profunda contiene múltiples capas ocultas entre la entrada y la salida. La entrada está sujeta a nodos, mientras que la capa oculta, así como la capa de salida, contienen neuronas.

Aprendizaje superficial versus aprendizaje profundo
Aprendizaje superficial versus aprendizaje profundo

Word2vec es una red de dos capas donde hay entrada, una capa oculta y salida.

Word2vec fue desarrollado por un grupo de investigadores dirigido por Tomas Mikolov en Google. Word2vec es mejor y más eficiente que el modelo de análisis semántico latente.

¿Por qué Word2vec?

Word2vec representa palabras en representación del espacio vectorial. Las palabras se representan en forma de vectores y la ubicación se realiza de tal manera que las palabras con significado similar aparezcan juntas y las palabras diferentes se encuentren lejos. Esto también se denomina relación semántica. Las redes neuronales no entienden texto, sino que sólo entienden números. 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, comprendamos qué es el contexto lingüístico. En el escenario general de la vida, cuando hablamos o escribimos para comunicarnos, otras personas intentan descubrir cuál es el objetivo de la oración. Por ejemplo, "¿Cuál es la temperatura de la India?", aquí el contexto es que el usuario quiere saber "la temperatura de la India", que es el contexto. En definitiva, el principal objetivo de una frase es el contexto. La palabra u oración que rodea el lenguaje hablado o escrito (divulgación) ayuda a determinar el significado del contexto. Word2vec aprende la representación vectorial de palabras a través de los contextos.

¿Qué hace Word2vec?

Antes de incrustar Word

Es importante saber qué enfoque se utiliza antes de la incrustación de palabras y cuáles son sus desventajas y luego pasaremos al tema de cómo se superan las deméritos mediante la incrustación de Word utilizando el enfoque Word2vec. Finalmente, veremos cómo funciona Word2vec porque es importante entender cómo funciona.

Enfoque para el análisis semántico latente

Este es el enfoque que se utilizaba antes de la incorporación de palabras. Utilizó el concepto de Bolsa de palabras donde las palabras se representan en forma de vectores codificados. Es una representación vectorial escasa donde la dimensión es igual al tamaño del vocabulario. Si la palabra aparece en el diccionario, se cuenta; en caso contrario, no. Para comprender más, consulte el siguiente programa.

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']

Explicación del código

  1. CountVectorizer es el módulo que se utiliza para almacenar el vocabulario según el ajuste de las palabras que contiene. Esto se importa de sklearn.
  2. Crea el objeto usando la clase CountVectorizer.
  3. Escriba los datos en la lista que se incluirán en 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 palabras en los datos usando vocabulario. Si la palabra o el token no están disponibles en el vocabulario, dicha posición del índice se establece en cero.
  6. La variable en la línea 5, que es x, se convierte en una matriz (método disponible para x). Esto proporcionará el recuento de cada token en la oración o lista proporcionada en la Línea 3.
  7. Esto mostrará 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 aparece esa palabra en el documento. Es una representación de palabras en forma de matriz de documento. La frecuencia inversa de documento de término-frecuencia (TFIDF) se utiliza para contar la frecuencia de las palabras en el documento, que es la frecuencia del término en el documento/frecuencia del término en todo el corpus.

Defecto del método Bolsa de palabras

  • Ignora el orden de las palabras, por ejemplo, esto es malo = malo es esto.
  • Ignora el contexto de las palabras. Supongamos que escribo la frase “Le encantaban los libros. La educación se encuentra mejor en los libros”. Crearía dos vectores, uno para "Le encantaban los libros" y otro para "La educación se encuentra mejor en los libros". Los trataría a ambos de forma ortogonal, lo que los hace independientes, pero en realidad están relacionados entre sí.

Para superar estas limitaciones, se desarrolló la incrustación de palabras y Word2vec es un enfoque para implementarla.

¿Cómo funciona Word2vec?

Word2vec aprende palabras prediciendo su contexto circundante. Por ejemplo, tomemos la palabra “Él ama. Fútbol americano."

Queremos calcular el Word2vec de la palabra: amores.

Suponer

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

Palabra ama. se desplaza sobre cada palabra del corpus. La relación sintáctica y semántica entre palabras está codificada. Esto ayuda a encontrar palabras similares y analogías.

Todas las características aleatorias de la palabra. ama. es calculado. Estas características se cambian o actualizan con respecto a palabras vecinas o de contexto con la ayuda de un Propagación hacia atrás método.

Otra forma de aprender es que si el contexto de dos palabras es similar o dos palabras tienen características similares, entonces dichas palabras están relacionadas.

palabra2vec Architectura

Word2vec utiliza dos arquitecturas:

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

Antes de continuar con este tutorial de Word2vec, analicemos por qué estas arquitecturas o modelos son importantes desde el punto de vista de la representación de palabras. El aprendizaje de la representación de palabras es esencialmente no supervisado, pero se necesitan objetivos/etiquetas para entrenar el modelo. Skip-gram y CBOW convierten la representación no supervisada en una forma 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 + 2se les dan palabras o contexto, este modelo proporcionará wi

Skip-Gram funciona de manera opuesta a CBOW, lo que implica que predice la secuencia o 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,wyo+2.

Word2vec ofrece la opción de elegir entre CBOW (Bolsa de palabras continua) y skim-gram. Estos parámetros se proporcionan durante el entrenamiento del modelo. Se puede optar por utilizar un muestreo negativo o una capa jerárquica softmax.

Bolsa continua de palabras

Dibujemos un diagrama de ejemplo simple de Word2vec para comprender la bolsa continua de la arquitectura 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, xyo+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? W son el vector de entrada y la matriz de peso respectivamente,

Para calcular la coincidencia entre el contexto y la siguiente palabra, consulte la siguiente ecuación

u=representación prevista*h

donde se obtiene la representación predicha del modelo? h en la ecuación anterior.

Modelo de salto de gramo

El método Skip-Gram se utiliza para predecir una oración dada una palabra de entrada. Para entenderlo mejor, dibujemos el diagrama como se muestra en el siguiente ejemplo de Word2vec.

Modelo de salto de gramo

Modelo de salto de gramo

Se puede tratar como lo contrario del modelo de bolsa continua de palabras, donde la entrada es la palabra y el modelo proporciona el contexto o la secuencia. También podemos concluir que el objetivo se envía a la capa de entrada y salida y se replica varias veces para acomodar la cantidad elegida de palabras de contexto. El vector de error de toda la capa 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 palabras frecuentes, mientras que skip gram necesita una pequeña cantidad de datos de entrenamiento y representa incluso palabras o frases raras.

La relación entre Word2vec y NLTK

NLTK es un conjunto de herramientas de lenguaje natural. Se utiliza para el preprocesamiento del texto. Se pueden realizar diferentes operaciones, como etiquetar partes del discurso, lematizar, derivar, eliminar palabras vacías, eliminar palabras raras o palabras menos utilizadas. Ayuda a limpiar el texto y a preparar las características de las palabras efectivas. Por otro lado, Word2vec se utiliza para la comparación semántica (elementos estrechamente relacionados entre sí) y sintáctica (secuencia). Usando Word2vec, uno puede encontrar palabras similares, palabras diferentes, reducción dimensional y muchas otras. Otra característica importante de Word2vec es convertir la representación de dimensiones superiores del texto en vectores de dimensiones inferiores.

¿Dónde utilizar NLTK y Word2vec?

Si uno tiene que realizar algunas tareas de propósito general como se mencionó anteriormente, como tokenización, etiquetado de POS y análisis, debe optar por usar NLTK, mientras que para predecir palabras de acuerdo con algún contexto, modelado de temas o similitud de documentos, debe usar Word2vec.

Relación de NLTK y Word2vec con ayuda de código

NLTK y Word2vec se pueden utilizar juntos para encontrar representaciones de palabras similares o coincidencias sintácticas. El kit de herramientas NLTK se puede utilizar para cargar muchos paquetes que vienen con NLTK y se puede crear un modelo utilizando Word2vec. Luego se puede probar en las palabras en tiempo real. Veamos la combinación de ambos en el siguiente código. Antes de continuar con el procesamiento, eche un vistazo a los corpus que proporciona NLTK. Puede descargarlos utilizando el 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 del código

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 del código

  1. Se importa la biblioteca nltk, desde donde puede descargar el corpus abc que usaremos en el siguiente paso.
  2. Gensim es importado. Si Gensim Word2vec no está instalado, instálelo usando el comando "pip3 install gensim". Consulte la siguiente captura de pantalla.
Instalación de Gensim usando PIP

Instalación de Gensim usando PIP
  1. importe el corpus abc que se ha descargado mediante nltk.download('abc').
  2. Pasar los archivos al modelo Word2vec el cual se importa usando Gensim como oraciones.
  3. El vocabulario se almacena en forma de variable.
  4. El modelo se prueba con ejemplos de ciencia de palabras, ya que estos archivos están relacionados con la ciencia.
  5. Aquí el modelo predice la palabra similar de “ciencia”.

Activadores y Word2Vec

La función de activación de la neurona define la salida de esa neurona dado un conjunto de entradas. Biológicamente inspirada por una actividad en nuestro cerebro donde diferentes neuronas se activan usando diferentes estímulos. Entendamos 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 es el nodo de la red neuronal.

w1, w2, w3 es el peso del nodo,

? es la suma de todos los pesos y valores de nodos que funcionan como función de activación.

¿Por qué la función de activación?

Si no se utiliza una función de activación, la salida sería lineal, pero la funcionalidad de la función lineal es limitada. Para lograr funciones complejas, como detección de objetos, clasificación de imágenes, escritura de texto mediante voz y muchas otras salidas no lineales, se necesita lograrlas mediante la 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 el Softmax jerárquico, donde la complejidad se calcula mediante O(log2V) donde el softmax es O(V) donde V es el tamaño del vocabulario. La diferencia entre estos es la reducción de la complejidad en la capa softmax jerárquica. Para comprender su funcionalidad (softmax jerárquico), observe el siguiente ejemplo de incrustación de Word:

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 el nodo raíz al nodo hoja será el primer movimiento al nodo 2 y luego al nodo 5. Entonces, si hemos tenido un tamaño de vocabulario de 8, solo se necesitan tres cálculos. Por lo que permite descomponer, calcular la probabilidad de una palabra (amor).

¿Qué otras opciones están disponibles además de Softmax jerárquico?

Si hablamos en un sentido general, las opciones de incrustación de palabras disponibles son Softmax diferenciado, CNN-Softmax, muestreo de importancia, muestreo de importancia adaptativa, estimaciones de contraste de ruido, muestreo negativo, autonormalización y normalización poco frecuente.

Hablando específicamente de Word2vec tenemos disponible muestreo negativo.

El muestreo negativo es una forma de muestrear los datos de entrenamiento. Es algo así como el descenso de gradiente estocástico, pero con alguna diferencia. El muestreo negativo busca sólo ejemplos de entrenamiento negativos. Se basa en una estimación contrastiva de ruido y muestra palabras al azar, no en el contexto. Es un método de entrenamiento rápido y elige el contexto de forma aleatoria. Si la palabra predicha aparece en el contexto elegido al azar, ambos vectores están cerca uno del otro.

¿Qué conclusión se puede sacar?

Los activadores activan las neuronas de la misma manera que nuestras neuronas se activan cuando se utilizan estímulos externos. La capa Softmax es una de las funciones de la capa de salida que activa las neuronas en caso de incrustaciones de palabras. En Word2vec tenemos opciones como softmax jerárquico y muestreo negativo. Con los activadores, se puede convertir la función lineal en una función no lineal y se puede implementar un algoritmo complejo de aprendizaje automático con ellos.

¿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 kit de herramientas Gensim permite a los usuarios importar Word2vec para modelar temas y descubrir estructuras ocultas en el cuerpo del texto. Gensim proporciona no sólo una implementación de Word2vec sino también de Doc2vec y FastText.

Este tutorial trata sobre Word2vec, por lo que nos ceñiremos al tema actual.

Cómo implementar Word2vec usando Gensim

Hasta ahora hemos discutido qué es Word2vec, sus diferentes arquitecturas, por qué hay un cambio de una bolsa de palabras a Word2vec, la relación entre Word2vec y NLTK con código en vivo y funciones de activación.

A continuación se muestra 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 implementar procesamiento de 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 es 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.
  • Respuestas es la respuesta que proporcionará el chatbot a la pregunta/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, derivaciones, palabras innecesarias, etc. Antes de continuar, es importante cargar datos y convertirlos en un marco de datos. Consulte el siguiente código para tal

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

Explicación del código:

  1. Como los datos están en formato json, se importa json
  2. El archivo se almacena en la variable.
  3. El archivo está abierto y cargado en la variable de datos.

Ahora se importan los datos y es el momento de convertirlos en un marco de datos. Consulte el siguiente código para ver el siguiente paso.

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

Explicación del código:

1. Los datos se convierten en un marco de datos utilizando pandas que se importó anteriormente.

2. Convertirá la lista en patrones de columnas en cadena.

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't']= 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 not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Explicación del código:

1. Las palabras vacías en inglés se importan utilizando el módulo de palabras vacías del kit de herramientas nltk

2. Todas las palabras del texto se convierten a minúsculas utilizando la condición y la función lambda. función lambda Es una función anónima.

3. Se verifican todas las filas del texto en el marco de datos en busca de puntuaciones de cadena 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. Las palabras ahora se filtran y se eliminan las diferentes formas de la misma palabra mediante lematización. Con estos hemos finalizado el preprocesamiento de 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 don’t worry']",payments

Paso 3) Construcción de redes neuronales usando Word2vec

Ahora es el momento de construir un modelo usando el módulo Gensim Word2vec. Tenemos que importar Word2vec desde Gensim. Hagamos esto, luego construiremos y en la etapa final verificaremos el modelo con datos en tiempo real.

from gensim.models import Word2Vec

Ahora, en este tutorial de Gensim Word2vec, podemos construir con éxito el modelo usando Word2Vec. Consulte la siguiente línea de código para aprender cómo crear el modelo usando 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 del código:

1. Creó la lista_más grande donde se agrega la lista interna. Este es el formato que se alimenta al modelo Word2Vec.

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

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

4. la lista interna se agrega a la lista externa.

5. Esta lista se proporciona para el modelo Word2Vec. Entendamos algunos de los parámetros proporcionados aquí.

Recuento_mínimo: Ignorará 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 hay otras opciones disponibles, y algunas importantes se explican a continuación.

Ventana: Distancia máxima entre la palabra actual y la prevista dentro de una oración.

Sg: Es un algoritmo de entrenamiento y 1 para skip-gram y 0 para una bolsa continua de palabras. Hemos analizado estos detalles anteriormente.

HS: Si es 1, entonces usamos softmax jerárquico para el entrenamiento y si es 0, entonces se usa un 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)
# print(df['patterns'])
#print(df['patterns'])
#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 not x 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)
#print(model)

Paso 4) Guardar modelo

El modelo se puede guardar en forma de contenedor y modelo. Bin es el formato binario. Consulte las líneas siguientes 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 forma de archivo .bin

Usaremos este modelo para realizar pruebas en tiempo real, como palabras similares, palabras diferentes y palabras más comunes.

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

El modelo se carga usando el siguiente código:

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

Si desea imprimir el vocabulario, hágalo usando 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 visitarnos". Esto se imprima las palabras más diferentes de estas palabras. Ejecutemos este código y encontremos el resultado.

El resultado después de la ejecución del código anterior:

Thanks

Paso 8) Encontrar la similitud entre dos palabras

Esto indicará el resultado de la probabilidad de similitud entre dos palabras. Consulte el siguiente código sobre 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

Puede encontrar más 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)] 

Conclusión

  • Word Embedding es un tipo de representación de palabras que permite que los algoritmos de aprendizaje automático comprendan palabras con significado similar.
  • La incrustación de palabras se utiliza para calcular palabras similares, crear un grupo de palabras relacionadas, función para la clasificación de texto, agrupación de documentos y procesamiento de lenguaje natural.
  • Word2vec explicó: Word2vec es un modelo de red neuronal superficial de dos capas para producir incrustaciones de palabras para una mejor representación de las mismas.
  • Word2vec representa palabras en representación del espacio vectorial. Las palabras se representan en forma de vectores y la ubicación se realiza de tal manera que las palabras con significado similar aparezcan juntas y las palabras diferentes se encuentren muy lejos.
  • El algoritmo Word2vec utiliza dos arquitecturas: bolsa continua de palabras (CBOW) y skip gram.
  • CBOW es varias veces más rápido que skip gram y proporciona una mejor frecuencia para palabras frecuentes, mientras que skip gram necesita una pequeña cantidad de datos de entrenamiento y representa incluso palabras o frases raras.
  • NLTK y Word2vec se pueden utilizar juntos para crear aplicaciones potentes
  • La función de activación de la neurona define la salida de esa neurona dado un conjunto de entradas. En Word2vec. Softmax Layer (función exponencial normalizada) es la función de capa de salida que activa o activa cada nodo. Word2vec también tiene muestreo negativo disponible
  • Gensim es un conjunto de herramientas de modelado de temas que se implementa en Python.