[vc_row][vc_column][vc_column_text]Echemos un vistazo a la incorporación de palabras y exploremos brevemente la codificación de una sola aplicación y el uso de un modelo pre-entrenado.
El Procesamiento del Lenguaje Natural ha llamado la atención en los últimos tiempos gracias a la traducción automática, los chatbots, SIRI y Alexa. Si bien muchas personas están procesando datos de texto, un cambio fundamental que se ha producido en los últimos 5 años es la forma en que procesamos los datos de texto.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Codificación One-Hot
Con el fin de asignar datos de texto en una forma que un algoritmo pueda procesar, transformamos los datos en números mediante la codificación de un solo recurso. Lo que básicamente hacemos aquí, tomamos nuestros vocabulario de decir tamaño N y mapeamos este vocabulario en un conjunto de N vectores de 1 y 0, cada uno de tamaño N. Cada vector representa una palabra, la palabra en posición «i» tiene un 1 en el vector en la posición «i» y el resto del vector es 0. Por ejemplo, si nuestro vocabulario consiste en decir cuatro palabras «Computadora», «Máquina», «Aprendizaje», «Idioma», entonces representamos este conjunto de texto utilizando 4 vectores de tamaño 4 – [1000], [0100], [0010], [0001]. Hace 5 años, así era como procesabamos los datos de texto antes de aplicar cualquier algoritmo.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]
Incrustación de Palabras
Una de las principales deficiencias que tenía la técnica de codificación One-Hot era que cada palabra tenía una identidad separada. No había forma de averiguar ninguna correlación entre las palabras, descubrir similitudes o relaciones. Hace aproximadamente una década, Yoshua Bengio propuso una nueva forma de representar vectores. Pero la representación realmente captó la fantasía del mundo de Machine Learning cuando Tomas Mikolov publicó su trabajo en Word2Vec en 2013.
La inserción de palabras se basa en la premisa de que las palabras que se usan y que aparecen en los mismos contexto tienden a significar significados similares. Por lo tanto, lo ideal sería que palabras similares tuvieran vectores similares. Word2Vec no solo creó vectores similares para palabras similares, sino que también mostró cómo se pueden realizar cálculos simples en dichos vectores. Un buen ejemplo sería rey-hombre+mujer = reina. Desde entonces, GloVe creado por Stanford NLP Group y FastText de Facebook también se han utilizado ampliamente para el procesamiento de texto. Múltiples incrustaciones de palabras pre-entrenadas están disponibles de forma gratuita en cada una de estas fuentes y se pueden descargar y usar para el aprendizaje de transferencia si sus datos de texto tratan con datos de texto de dominio abierto como el corpus de noticias o datos de twitter.
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Uso del Modelo Pre-Entrenado
1 2 3 4 5 6 7 8 9 10 | import gensim from gensim.models import KeyedVectors model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) #Obtener el vector de palabras de Google News Corpus vector = model['London'] print(vector) #Obtener las palabras similares print("similar: ", model.most_similar('London')) |
Creación de su propio modelo incrustado:
1 2 3 4 5 6 7 | import gensim from gensim.models import Word2Vec sentences = [['London', 'is', 'the', 'capital', 'of', 'England'], ['Paris', 'is', 'the', 'capital', 'of', 'France']] # train word2vec on the two sentences model = Word2Vec(sentences, min_count=1) print(model['capital']) print(model['capital'].shape) |
El código para crear su propio modelo de word2vec puede ser tan simple como las 5 líneas de código anteriores. Por supuesto, para su propio conjunto de datos, necesita leer los datos, limpiarlos, personalizarlos y luego almacenarlos en forma de una lista de listas como se muestra arriba en las oraciones variables.
Este artículo esta basado en 5 Minute ML: Word Embedding.
Observaciones:
- En el siguiente enlace pueden descargar el archivo GoogleNews-vectors-negative300.bin.gz
- Al trabajar con el archivo en mi máquina, se presentaron problemas de memoria, por lo que tuve que recurrir a una versión simplificada del archivo, el cual pueden descargar en el siguiente enlace GoogleNews-vectors-negative300-SLIM.bin.gz.
- Relacionado a este programa, pueden tambien revisar el siguiente enlace en GitHub Word2vec-slim.py
- Para concluir, buscando el archivo SLIM pude llegar a un artículo muy interesante sobre la librería Gensim, el cual es How to Develop Word Embeddings in Python with Gensim, el cual también pueden revisar y complementar este artículo.
[/vc_column_text][/vc_column][/vc_row]