Word embeddings

Marcos Esteve
3 min readDec 1, 2019

--

Hace 1 año aproximadamente descubrí, mientras realizaba mi trabajo final de grado, el mundo de los embeddings.

La idea es simple, tal como proponen las hipótesis de la semántica distribucional, palabras con distribuciones similares tienen significados similares. Por ejemplo, pongamos las palabras peine pelo y elefante. Como se puede observar, las palabras peine y pelo comparten un contexto semántico, por lo que, según la hipótesis distribucional sus representaciones serán similares. En cambio, ni peine ni pelo guardan ninguna relación semántica con elefante y por esta razón su representación será distinta.

Entonces, ¿Es posible aprovechar las hipótesis de la semántica distribucional para realizar una representación que capture las relaciones semánticas y sintácticas de las palabras y aprovecharla de esta manera en tareas de procesamiento de lenguaje natural? Pues sí, así es. Se trata de un algoritmo desarrollado por Tomas Mikolov y un equipo de ingenieros en Google y presentado en el paper de Word2Vec.

Word2Vec

Word2Vec se trata de un algoritmo basado en redes neuronales capaz de aprender representaciones compactas y vectoriales de las palabras. En estas representaciones se plasman las relaciones sintácticas y semánticas con otros términos. ¿Y cómo es esto posible? Mucho ingenio.

La solución al problema pasa por tres fases…

En primer lugar una representación basada en One Hot Vector, donde cada palabra se representa como un vector del tamaño del vocabulario. Este vector estará formado por un uno en la posición de la palabra y un 0 en el resto de posiciones. Un posible ejemplo lo podemos apreciar en la figura inferior.

One Hot Vector para el vocabulario V = {perro, gato, pájaro y pato}
One Hot Vector para el vocabulario V = {perro, gato, pájaro y pato}

Por otra parte tenemos el Skip-Gram, un modelo en el cual dado una ventana y un texto, se recorre el texto extrayendo pares (input/output) de palabras que posteriormente alimentaran la red. Para ello se fija una palabra target y se recorre el texto con una ventana del tamaño especificado. Un posible ejemplo de Skip-Gram lo podemos ver a continuación.

Skip-Gram con tamaño de ventana 2

Una vez tenemos extraídos los pares entrada salida mediante Skip-Gram podemos alimentar la red con ellos. Pero para ello necesitaremos transformar las palabras en vectores, ya que la red solo come números… Para ello utilizaremos la representación en One Hot Vector comentada anteriormente ¿Y cómo será la red?

Red neuronal con tamaño de vocabulario 10.000 y tamaño de embedding 300

Se tratará de una de una red donde la capa de entrada y la capa de salida tendrán un tamaño igual al tamaño del vocabulario y la capa oculta (embedding) tendrá un tamaño inferior y habitualmente de 300 dimensiones.

Una vez entrenado el modelo será capaz de representar las palabras en un espacio vectorial de una dimensionalidad inferior al vocabulario y además captará una gran cantidad de relaciones semánticas y sintácticas entre los distintos términos.

Aprovechando las relaciones semánticas capturadas por los embeddings se pueden apreciar relaciones algebraicas interesantes como la mostrada en la imagen inferior donde el vector reina se puede obtener a partir de restar al vector rey el vector hombre y sumarle el vector mujer.

Reina = rey - hombre + mujer. Imagen extraída de Link

¿Cómo puedo utilizar embeddings?

Existen multiples herramientas que nos permiten utilizar embeddings pre-entrenados o bien entrenar los nuestros propios. Las dos más conocidas son las siguientes:

Este tipo de herramientas proporcionan una abstracción donde determinando el tamaño de ventana para el skip-gram y el tamaño de embedding se pueden entrenar modelos sobre un texto propio o bien descargar modelos pre-entrenados sobre grandes corpus de entrenamiento como pueda ser la Wikipedia.

--

--

Marcos Esteve
Marcos Esteve

Written by Marcos Esteve

Data Scientist & Machine Learning Engineer. Learning about GNN in my free time. Personal webpage: https://marescas.github.io

No responses yet