¿Qué es la incrustación de palabras?
La incrustación de palabras es un tipo de representación de palabras que permite que los algoritmos de aprendizaje automático comprendan palabras con un significado similar. Técnicamente hablando, es un mapeo de palabras en vectores de números reales utilizando la red neuronal, el modelo probabilístico o la reducción de dimensiones en la matriz de co-ocurrencia de palabras. Es modelado de lenguaje y técnica de aprendizaje de características. La incrustación de palabras es una forma de realizar mapas mediante una red neuronal. Hay varios modelos de incrustación de palabras disponibles, como word2vec (Google), Glove (Stanford) y el más rápido (Facebook).
Word Embedding también se denomina modelo semántico distribuido o espacio vectorial semántico o representado distribuido o modelo de espacio vectorial. A medida que lee estos nombres, se encuentra con la palabra semántica, que significa categorizar palabras similares juntas. Por ejemplo, las frutas como la manzana, el mango, el 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 colocará lejos de la representación vectorial de los libros.
En este tutorial, aprenderá
- ¿Qué es la incrustación de palabras?
- ¿Dónde se utiliza Word Embedding?
- ¿Qué es word2vec?
- ¿Qué hace word2vec?
- ¿Por qué Word2vec?
- Arquitectura de Word2vec
- Bolsa continua de palabras.
- Modelo de omisión de gramo
- La relación entre Word2vec y NLTK
- Activadores y Word2Vec
- ¿Qué es Gensim?
- Implementación de código de word2vec usando Gensim
¿Dónde se utiliza Word Embedding?
La incrustación de Word ayuda en la generación de funciones, la agrupación de documentos, la clasificación de texto y las tareas de procesamiento del lenguaje natural. Vamos a enumerarlos y discutir un poco sobre cada una de estas aplicaciones.
- Calcular palabras similares: la incrustación de palabras se utiliza para sugerir palabras similares a la palabra que se somete al modelo de predicción. Junto con eso, también sugiere palabras diferentes, así como las palabras más comunes.
- Crear un grupo de palabras relacionadas: se utiliza para agrupaciones semánticas que agruparán cosas de características similares juntas y diferentes lejos.
- Característica para la clasificación de texto: el texto se asigna en matrices de vectores que se alimentan al modelo para el entrenamiento y la predicción. Los modelos de clasificadores basados en texto no se pueden entrenar en la cadena, por lo que esto convertirá el texto en una forma entrenable por máquina. Amplía sus características de construcción de ayuda semántica en la clasificación basada en texto.
- La agrupación de documentos es otra aplicación en la que la incrustación de palabras se usa ampliamente
- Procesamiento del lenguaje natural: 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 habla, 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 se centra en uno de los modelos (word2vec).
¿Qué es word2vec?
Word2vec es la técnica / modelo para producir incrustaciones de palabras para una mejor representación de las palabras. Captura una gran cantidad de relaciones de palabras sintácticas y semánticas precisas. Es una red neuronal poco profunda de dos capas. Antes de continuar, vea la diferencia entre redes neuronales superficiales y profundas:
La red neuronal superficial consiste en la única 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, contiene neuronas.
Figura: Aprendizaje superficial frente a 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 encabezado por Tomas Mikolov en Google. Word2vec es mejor y más eficiente que el modelo de análisis semántico latente.
¿Qué hace word2vec?
Word2vec representa palabras en representación de espacio vectorial. Las palabras se representan en forma de vectores y la ubicación se realiza de tal manera que las palabras de significado similar aparecen juntas y las palabras diferentes se ubican lejos. Esto también se denomina relación semántica. Las redes neuronales no entienden el texto, sino que solo entienden los 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 seguir adelante, entendamos, ¿qué es el contexto lingüístico? En el escenario de la vida general, cuando hablamos o escribimos para comunicarnos, otras personas intentan averiguar cuál es el objetivo de la oración. Por ejemplo, "¿Cuál es la temperatura de la India?", Aquí el contexto es el usuario quiere saber la "temperatura de la India", que es el contexto. En resumen, el principal objetivo de una oración 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.
¿Por qué Word2vec?
Antes de la inserción de Word
Es importante saber qué enfoque se utiliza antes de la inserción de palabras y cuáles son sus desventajas y luego pasaremos al tema de cómo se superan las desventajas mediante la inserción de Word utilizando el enfoque de word2vec. Finalmente, moveremos cómo funciona word2vec porque es importante entender que está funcionando.
Enfoque para el análisis semántico latente
Este es el enfoque que se utilizó antes de la inserción de palabras. Usó el concepto de Bolsa de palabras donde las palabras se representan en forma de vectores codificados. Es una representación vectorial dispersa donde la dimensión es igual al tamaño del vocabulario. Si la palabra aparece en el diccionario, se cuenta, de lo contrario no. Para comprender más, consulte el programa a continuación.
from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())
Producción:
[[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
- CountVectorizer es el módulo que se utiliza para almacenar el vocabulario en función de encajar las palabras en él. Esto se importa de sklearn
- Crea el objeto usando la clase CountVectorizer.
- Escriba los datos en la lista que se instalarán en CountVectorizer.
- Los datos encajan en el objeto creado a partir de la clase CountVectorizer.
- Aplique un enfoque de bolsa de palabras para contar palabras en los datos usando vocabulario. Si la palabra o símbolo no está disponible en el vocabulario, entonces dicha posición de índice se establece en cero.
- 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 ficha en la oración o lista proporcionada en la Línea 3.
- Esto mostrará las características que forman parte del vocabulario cuando se ajusta utilizando los datos de la línea 4.
En el enfoque semántico latente, la fila representa palabras únicas, mientras que la columna representa el número de veces que esa palabra aparece en el documento. Es una representación de palabras en forma de matriz de documentos. Frecuencia de término-frecuencia inversa del documento (TFIDF) se utiliza para contar la frecuencia de palabras en el documento que es la frecuencia del término en el documento / frecuencia del término en todo el corpus.
Deficiencia del método Bag of Words
- Ignora el orden de la palabra, por ejemplo, esto es malo = malo es esto.
- Ignora el contexto de las palabras. Supongamos que escribo la oración "Le encantaban los libros. La educación se encuentra mejor en los libros". Se crearían 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 ortogonales 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 implementarlo.
¿Cómo funciona Word2vec?
Word2vec aprende palabras prediciendo su contexto circundante. Por ejemplo, tomemos la palabra "Le encanta el fútbol".
Queremos calcular word2vec para la palabra: ama.
Suponer
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Word loves se mueve sobre cada palabra del corpus. La relación sintáctica y semántica entre palabras está codificada. Esto ayuda a encontrar palabras similares y con analogías.
Se calculan todas las características aleatorias de la palabra amores . Estas características se cambian o actualizan con respecto a las palabras vecinas o de contexto con la ayuda de un método de propagación hacia atrás.
Otra forma de aprender es que si el contexto de dos palabras es similar o dos palabras tienen características similares, entonces esas palabras están relacionadas.
Arquitectura de Word2vec
Hay dos arquitecturas utilizadas por word2vec
- Bolsa continua de palabras (CBOW)
- saltear gramo
Antes de continuar, 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 sin supervisión, pero se necesitan objetivos / etiquetas para entrenar el modelo. Skip-gram y CBOW convierten la representación no supervisada en forma supervisada para el entrenamiento de modelos.
En CBOW, la palabra actual se predice usando la ventana de las ventanas de contexto circundantes. Por ejemplo, si w i-1 , w i-2 , w i + 1 , w i + 2 reciben palabras o contexto, este modelo proporcionará w i
Skip-Gram funciona de manera opuesta a CBOW, lo que implica que predice la secuencia o contexto dado a partir de la palabra. Puede invertir el ejemplo para entenderlo. Si se da w i , esto predecirá el contexto o w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec ofrece una opción para elegir entre CBOW (bolsa continua de palabras) y skim-gram. Estos parámetros se proporcionan durante el entrenamiento del modelo. Se puede tener la opción de utilizar un muestreo negativo o una capa softmax jerárquica.
Bolsa continua de palabras.
Dibujemos un diagrama simple para comprender la bolsa continua de arquitectura de palabras.
Figura Bolsa continua de arquitectura de palabras
Calculemos las ecuaciones matemáticamente. Suponga que V es el tamaño del vocabulario y N es el tamaño de la capa oculta. La entrada se define como {x i-1 , x i-2, x i + 1, x i + 2 }. Obtenemos la matriz de ponderaciones multiplicando V * N. Otra matriz se obtiene multiplicando el vector de entrada con la matriz de ponderaciones. Esto también se puede entender mediante la siguiente ecuación.
h = xi t W
donde xi t ∧ 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 predicha * h
donde se obtiene la representación predicha modelo∧h en la ecuación anterior.
Modelo de omisión de gramo
El enfoque Skip-Gram se utiliza para predecir una oración dada una palabra de entrada. Para entenderlo mejor dibujemos el diagrama.
Figura modelo Skip-Gram
Se puede tratar como el reverso 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 alimenta a la capa de entrada y salida se replica varias veces para acomodar el número elegido 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 juego de herramientas de lenguaje natural. Se utiliza para preprocesar el texto. Se pueden realizar diferentes operaciones, como etiquetado de partes del discurso, lematización, lematización, eliminación de palabras vacías, eliminación de palabras raras o palabras menos utilizadas. Ayuda a limpiar el texto y también ayuda a preparar las características de las palabras efectivas. De otra manera, word2vec se utiliza para la coincidencia semántica (elementos estrechamente relacionados juntos) y sintáctica (secuencia). Usando word2vec, se pueden encontrar palabras similares, palabras diferentes, reducción dimensional y muchas otras. Otra característica importante de word2vec es convertir la representación dimensional más alta del texto en una dimensión más baja de los vectores.
¿Dónde usar NLTK y Word2vec?
Si uno tiene que realizar algunas tareas de propósito general como se mencionó anteriormente, como la tokenización, el etiquetado y el análisis de POS, debe 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 la ayuda del código
NLTK y Word2vec se pueden usar juntos para encontrar representación de palabras similares o coincidencia sintáctica. El kit de herramientas NLTK se puede usar para cargar muchos paquetes que vienen con NLTK y el modelo se puede crear usando word2vec. Luego se puede probar en palabras en tiempo real. Veamos la combinación de ambos en el siguiente código. Antes de seguir procesando, eche un vistazo a los corpus que proporciona NLTK. Puedes descargar usando el comando
nltk(nltk.download('all'))
Figura Corpora descargada usando NLTK
Consulte la captura de pantalla para ver el código.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
Producción:
[('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
- Se importa la biblioteca nltk, desde donde puede descargar el corpus abc que usaremos en el siguiente paso.
- Se importa Gensim. Si Gensim no está instalado, instálelo usando el comando "pip3 install gensim". Por favor, vea la captura de pantalla a continuación.
Figura Instalación de Gensim usando PIP
- importe el corpus abc que ha sido descargado usando nltk.download ('abc').
- Pase los archivos al modelo word2vec que se importa usando Gensim como oraciones.
- El vocabulario se almacena en forma de variable.
- El modelo se prueba con ejemplos de ciencia de palabras, ya que estos archivos están relacionados con la ciencia.
- 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. Inspirado biológicamente en una actividad en nuestro cerebro donde se activan diferentes neuronas usando diferentes estímulos. Entendamos la función de activación a través del siguiente diagrama.
Figura que comprende 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 valores de peso y nodo que funcionan como la 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 una funcionalidad compleja como la detección de objetos, la clasificación de imágenes, la escritura de texto usando la voz y muchas otras salidas no lineales, se necesita que se logra usando la función de activación.
Cómo se calcula la capa de activación en la incrustación de palabras (word2vec)
Softmax Layer (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 (log 2 V) 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árquica), consulte el siguiente ejemplo:
Figura Estructura jerárquica en forma de árbol softmax
Supongamos que queremos calcular la probabilidad de observar la palabra amor en un contexto determinado. El flujo desde la raíz hasta el nodo hoja será el primer paso al nodo 2 y luego al nodo 5. Por lo tanto, 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 del Softmax jerárquico?
Si hablando en un sentido general, las opciones de incrustación de palabras disponibles son Softmax diferenciado, CNN-Softmax, Muestreo de importancia, Muestreo de importancia adaptativo, Estimaciones de contraste de ruido, Muestreo negativo, Autonormalización y Normalización poco frecuente.
Hablando específicamente sobre Word2vec, tenemos disponible un muestreo negativo.
El muestreo negativo es una forma de muestrear los datos de entrenamiento. Es algo así como un descenso de gradiente estocástico, pero con alguna diferencia. El muestreo negativo busca solo ejemplos de entrenamiento negativos. Se basa en una estimación contrastiva de ruido y muestrea palabras al azar, no 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 al azar, ambos vectores están próximos entre sí.
¿Qué conclusión se puede sacar?
Los activadores activan las neuronas al igual que nuestras neuronas se activan con los estímulos externos. La capa Softmax es una de las funciones de la capa de salida que activa las neuronas en caso de incrustación de palabras. En word2vec tenemos opciones como softmax jerárquico y muestreo negativo. Utilizando activadores, se puede convertir la función lineal en la 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 modelado de temas que se implementa en Python. El modelado de temas consiste en descubrir una estructura oculta en el cuerpo del texto. Word2vec se importa desde el kit de herramientas de Gensim. Tenga en cuenta que Gensim no solo proporciona una implementación de word2vec, sino también Doc2vec y FastText, sino que este tutorial trata sobre word2vec, por lo que nos ceñiremos al tema actual.
Implementación de 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. En esta sección, implementaremos word2vec usando Gensim
Paso 1) Recolección de datos
El primer paso para implementar cualquier modelo de aprendizaje automático o implementar el procesamiento del lenguaje natural es la recopilación de datos.
Observe los datos para construir un chatbot inteligente.
[{"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 cosas: 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 el chatbot proporcionará a la pregunta / patrón correspondiente.
Paso 2) Preprocesamiento de datos.
Es muy importante procesar los datos sin procesar. Si se envían datos limpios a la máquina, el modelo responderá con mayor precisión y aprenderá los datos de manera más eficiente.
Este paso implica la eliminación de palabras vacías, derivaciones, 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
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Explicación del CÓDIGO.
- Como los datos están en forma de formato json, por lo tanto, se importa json
- El archivo se almacena en la variable
- El archivo está abierto y cargado en la variable de datos.
Ahora se importan los datos y es hora de convertir los datos en un marco de datos. Consulte el siguiente código para ver el siguiente paso
import pandas as pddf = 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 importaron anteriormente.
2. Convertirá la lista en patrones de columna a cadena.
from nltk.corpus import stopwordsfrom textblob import Wordstop = 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 mediante el módulo de palabras vacías del kit de herramientas nltk
2. Todas las palabras del texto se convierten a minúsculas usando para condición y función lambda. La función Lambda es una función anónima.
3. Se comprueban todas las filas del texto en el marco de datos para detectar signos de puntuación en las cadenas y se filtran.
4. Los caracteres como números o puntos se eliminan mediante una expresión regular.
5. Los dígitos se eliminan del texto.
6. Las palabras vacías se eliminan en esta etapa.
7. Las palabras se filtran ahora y se eliminan diferentes formas de la misma palabra mediante lematización. Con estos, hemos terminado el preprocesamiento de datos.
Producción:
, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,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']",hoursopening4,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 una red neuronal usando word2vec
Ahora es el momento de construir un modelo usando el módulo word2vec de Gensim. Tenemos que importar word2vec desde Gensim. Hagamos esto, y luego construiremos y en la etapa final verificaremos el modelo en datos en tiempo real.
from gensim.models import Word2Vec
Ahora, podemos construir con éxito el modelo usando Word2Vec. Consulte la siguiente línea de código para aprender a 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 en una lista utilizando 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)
Explicaciones del código
1. Se 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 columna se divide y almacena en la lista interna li
4. la lista interna se adjunta a la lista externa.
5. Esta lista se proporciona al modelo Word2Vec. Entendamos algunos de los parámetros proporcionados aquí.
Min_count: 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 pronosticada 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 discutido estos en detalle más arriba.
Hs: Si es 1, entonces estamos usando softmax jerárquico para el entrenamiento y si es 0, entonces se usa un muestreo negativo.
Alfa: tasa de aprendizaje inicial
Permítanos mostrar el código final a continuación.
#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(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 listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = 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 formulario de modelo. Bin es el formato binario. 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 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) Carga del modelo y realización de pruebas en tiempo real
El modelo se carga usando el siguiente código
model = Word2Vec.load('model.bin')
Si desea imprimir el vocabulario a partir de él, use el siguiente comando
Por favor mira 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) Comprobación de las palabras más similares
Implementemos las cosas prácticamente
similar_words = model.most_similar('thanks')print(similar_words)
Por favor mira 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 la palabra de las palabras proporcionadas
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Hemos incluido las palabras "Hasta luego, gracias por visitarnos". Esto imprimirá 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 dará como resultado 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
- La incrustación de palabras es un tipo de representación de palabras que permite que los algoritmos de aprendizaje automático comprendan palabras con un 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, procesamiento de lenguaje natural
- Word2vec es un modelo de red neuronal superficial de dos capas para producir incrustaciones de palabras para una mejor representación de palabras
- Word2vec representa palabras en representación de espacio vectorial. Las palabras se representan en forma de vectores y la ubicación se realiza de tal manera que las palabras con significados similares aparecen juntas y las palabras diferentes se ubican lejos
- Word2vec utilizó 2 arquitecturas Continuous Bag of words (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 usar juntos para crear aplicaciones poderosas
- 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 la capa de salida que activa o dispara cada nodo. Word2vec también tiene muestreo negativo disponible
- Gensim es un kit de herramientas de modelado de temas que se implementa en Python