En un post anterior vimos como el uso de representaciones distribuidas en procesamiento de lenguaje natural permite extraer mucha más información y realizar un procesado más eficiente que las representaciones locales.
El objetivo de las representaciones distribuidas del lenguaje es encontrar una función f que sea capaz de convertir cada palabra en un vector de forma que la proximidad entre vectores sea equivalente a la proximidad semántica de las palabras.
De esta forma, al igual que muchas veces en matemáticas, en lugar de trabajar con el espacio original (espacio de palabras) trabajamos con un espacio transformado del que podemos extraer más información.
El número de dimensiones de la representación distribuida es menor que el número de dimensiones si usáramos representaciones locales (la dimensión coincide con el tamaño del vocabulario) y la representación distribuida es también mucho más densa (de ahí su eficiencia).
Uno de los modelos más usados de representaciones distribuidas de palabras es word2vec, creado en 2013 por Tomas Mikolov en Google. El modelo se basa en redes neuronales de varias capas y tiene dos posibles arquitecturas: Skip-gram y CBOW.
En la arquitectura Skipgram, el modelo predice las palabras contexto a partir de la palabra central. En el caso de la arquitectura CBOW, el modelo predice la palabra central a partir de una ventana de palabras contexto (la predicción es independiente del orden de las palabras contexto).
Como se puede ver en la figura, en la arquitectura CBOW las entradas son los IDs (identificadores) de las palabras contexto. Los IDs de las palabras se transforman en un vector en la capa de embedding. De esta forma, cada fila de palabras de contexto se transforma en una matriz de tamaño (2 * el tamaño de la ventana, número de dimensiones del embedding). Posteriormente se hace una media de los vectores embedding, que se pasa por una capa densa que crea un vector cuyo número de dimensiones coincide con el tamaño del vocabulario y por el Softmax para convertir en probabilidades. De esta forma, a la salida, el ID con la mayor probabilidad corresponde con la palabra central u objetivo.
Una vez entrenado el modelo, los vectores de representaciones distribuidas se extraen de la capa de embedding de la red.
Cuando ya tenemos los vectores de representaciones distribuidas podemos usarlos como entrada en redes neuronales más complejas para realizar tareas de procesamiento de lenguaje natural como categorización, traducción, predicción, síntesis, etc. En la imagen se ve un ejemplo de una red con neuronas LSTM (con memoria) utilizada para categorizar una frase. Los vectores embedding se van introduciendo secuencialmente realimentándose con la salida anterior de las neuronas LSTM y cuando se llega al final de la frase se pasa por una capa de categorización.
De esta forma, el uso de representaciones como word2vec permite mejorar el rendimiento de muchas aplicaciones de procesamiento de lenguaje natural.