¿Qué son los 'embeddings'?

En este artículo vamos a entender qué son los embeddings y cómo se utilizan para desarrollar diferentes aplicaciones de procesamiento y generación de lenguaje natural usando los Grandes Modelos de Lenguaje.

¡Así que listo, comencemos!

Video

Como siempre, en el canal de YouTube se encuentra el video de este post:

Introducción

Los Grandes Modelos de Lenguaje (o LLMs: Large Language Models), como por ejemplo GPT-4 o Bard, en realidad no procesan el texto tal como lo vemos nosotros los humanos, sino que en su lugar lo convierten a una representación numérica que se conoce como los embeddings.

Así que en el fondo estos modelos lo que hacen es procesar y generar embeddings para realizar diferentes tipos de tareas relacionadas con el análisis del lenguaje natural.

Entonces, en este artículo vamos a entender qué son estos embeddings, y cómo se utilizan para desarrollar diferentes aplicaciones de procesamiento y generación de lenguaje natural usando estos Grandes Modelos de Lenguaje.

¿Qué son los embeddings?

Para entender qué son los embeddings comencemos con un ejemplo sencillo: supongamos que queremos describir la apariencia de dos personas usando diferentes características.

Podemos decir por ejemplo que la primera persona tiene una altura de 1.72 cm, el cabello corto y de color negro, su peso es 67 Kg y sus ojos son de color café.

Y la segunda persona tiene una altura de 1.83 cm, el cabello largo y de color castaño, su peso es 78 Kg y sus ojos son de color verde.

Así que hemos tomado el dato original (cada persona) y lo que hemos hecho ha sido representarlo a través de 4 características. Y si organizamos estas 4 características en un listado lo que tendremos será un vector de 4 dimensiones.

Ahora veamos cómo lograríamos hacer algo similar pero usando Redes Neuronales, que son la base de los Grandes Modelos de Lenguaje.

Por ejemplo, si queremos hacer un sistema de reconocimiento de rostros, lo que necesitamos es comparar la imagen del rostro de una persona con imágenes de referencia en una base de datos para determinar si la persona es o no quien dice ser.

Pues en estos sistemas realmente no comparamos directamente las imágenes. En lugar de ello lo que se hace es construir una Red Convolucional (que es un tipo de Red Neuronal) que procesa estas imágenes y que a la salida genera una representación vectorial de la imagen de entrada. Y esta representación vectorial, que es simplemente un listado o arreglo de números, es precisamente lo que se conoce como un embedding.

Y la idea es que imágenes con rostros similares tendrán embeddings similares e imágenes con rostros diferentes tendrán embeddings diferentes. Y este principio nos permitirá construir precisamente el sistema de verificación de identidad.

Y este mismo principio lo podemos aplicar para el procesamiento y análisis del lenguaje natural, que es la forma como nos comunicamos los seres humanos.

Así que en resumen, y para lo que nos interesa, un embedding es una representación vectorial del dato de entrada y que se obtiene tras el entrenamiento de una Red Neuronal.

Embeddings y Grandes Modelos de Lenguaje

Como acabamos de ver, el texto también puede ser procesado por algún tipo de Red Neuronal para generar embeddings, con lo cual podemos realizar tareas como el análisis de sentimientos, la búsqueda semántica o la generación de texto, entre otras.

Un enfoque usado hace algunos años era generar embeddings a partir de las palabras. Es decir que la idea es tomar cada palabra, representarla como tokens y luego convertir cada token en un embedding. Es decir en una representación vectorial.

Con este tipo de embeddings usualmente palabras con significados similares, como por ejemplo “manzana” y “pera”, tendrán embeddings similares pero que a su vez son diferentes de los embeddings para las palabras “perro” o “gato”, que tienen un significado diferente.

Sin embargo, en el lenguaje natural las palabras no se encuentran aisladas sino que se encuentran en un contexto, en una frase por ejemplo, y dependiendo de ese contexto una palabra determinada podría tener diferentes significados.

Por ejemplo, en las frases “debo ir al banco a retirar dinero” y “estoy sentado en el banco” la palabra “banco” tiene significados completamente diferentes, y ese significado lo establecemos nosotros los humanos a partir precisamente del contexto: leyendo la totalidad de la frase.

Esto quiere decir que el uso de embeddings a nivel de palabra no es capaz de capturar la información del contexto y por tanto, en las frases anteriores, la palabra banco tendría el mismo embedding en ambos casos, lo cual no resulta ideal.

Así que como alternativa al uso de embeddings a nivel de palabra, los Grandes Modelos de Lenguaje existentes actualmente hacen uso de las Redes Transformer que permiten generar embeddings capaces de capturar la información del contexto.

Para resumir la idea principal acerca de esta arquitectura, podemos decir que una Red Transformer es un tipo de Red Neuronal diseñada específicamente para procesar secuencias como el texto y que incorpora algo que se conoce como un mecanismo atencional: al momento de decidir cuál será el embedding para una palabra o una frase lo hace analizando la relación entre la palabra y los demás elementos de la frase a diferentes niveles.

Es decir que, de alguna manera, los embeddings generados por los Grandes Modelos de Lenguaje intentan imitar la forma como nosotros los seres humanos interpretamos el lenguaje, con la diferencia de que internamente estos modelos generan simplemente representaciones vectoriales, arreglos de números que codifican el contenido de una frase.

La ventaja de esto es que los embeddings generados permitirán que frases con un significado similar tengan representaciones vectoriales similares.

Por ejemplo, frases como “Me gustaría conocer las tarifas de vuelos entre Madrid y Milán” o “Quiero encontrar tiquetes de primera clase ida y vuelta de nueva york a miami” tienen embeddings similares pues ambas se refieren por ejemplo al concepto de “tiquetes de avión”

Mientras que frases como “qué aerolíneas vuelan de los ángeles a tokyo” o “de todas las aerolíneas que llegan a Hong Kong cuál es la más económica?” se refieren a un concepto relacionado con el anterior pero que es diferente, pues se enfoca más en la temática de “aerolíneas”.

Lo anterior quiere decir que embeddings que son numéricamente similares equivalen a frases semánticamente similares, es decir con significados muy parecidos.

En la práctica, los diferentes Grandes Modelos de Lenguaje disponibles usan diferentes tamaños para los embeddings que dependen de la forma como hayan sido construidos. Por ejemplo, algunos modelos de OpenAI usan embeddings de 1536 o 2.048, mientras que otros como Llama tienen embeddings con tamaños entre 4.096 y 8.192.

Importancia de los embeddings en los LLMs

Bien, como hemos visto hasta ahora, los embeddings del texto son la materia prima de los Grandes Modelos de Lenguaje y son lo que ha permitido el desarrollo de muchas de las aplicaciones de procesamiento de lenguaje natural que hemos visto recientemente.

Y los tipos de aplicaciones que se pueden construir con este concepto van más allá incluso de las aplicaciones más conocidas como por ejemplo ChatGPT.

Por ejemplo, podemos usar los embeddings para realizar búsquedas semánticas. Es decir que podemos tomar un texto fuente y obtener su representación a través de embeddings, y luego un usuario puede escribir una búsqueda en lenguaje natural (tal como lo haría en una conversación) que también se representa con embeddings. Luego el sistema realiza la comparación vectorial de ambos embeddings y genera la respuesta a la búsqueda también en lenguaje natural.

También se pueden realizar tareas de clustering o agrupamiento: podemos usar los embeddings del texto para pedirle a uno de estos modelos de lenguaje que encuentre temáticas o tópicos que se encuentren dentro del texto.

O podemos usar los embeddings para generar sistemas de síntesis de texto: que extraigan las ideas principales de un texto y generen a la salida un texto más corto pero usando lenguaje natural.

O también podríamos implementar aplicaciones de recomendación de contenido: por ejemplo, con base en los artículos que más busca o lee un usuario podríamos recomendar nuevo contenido similar en la web para su lectura. E internamente todo este procesamiento se puede hacer precisamente a través de embeddings.

Así que el rango de aplicaciones que tienen los embeddings usados por los grandes modelos de lenguaje es inmenso y en próximos artículos abordaremos en detalle varias de estas aplicaciones.

Conclusión

Muy bien, acabamos de ver cuál es la idea básica de los embeddings que es la forma como los Grandes Modelos de Lenguaje aprenden a representar el texto que están procesando.

En últimas esta representación es simplemente un vector, es decir un arreglo de números, que captura la información esencial de ese texto y que permite no sólo procesar este texto en un computador sino desarrollar muchas aplicaciones de procesamiento y generación del lenguaje natural.

De hecho, este concepto de los embeddings que acabamos de ver será fundamental para entender las aplicaciones de las que hablaremos en próximos artículos que harán parte de esta serie de Grandes Modelos de Lenguaje.

Si quieres profundizar sobre estos temas y aprender en detalle cómo funcionan las Redes Transformer y cómo implementar diferentes aplicaciones de procesamiento del Lenguaje Natural, te invito a revisar el curso Fundamentos de Deep Learning con Python en la Academia Online.

En este curso teórico-práctico aprenderás todo lo relacionado con el funcionamiento e implementación de diferentes aplicaciones basadas en Redes Neuronales.