Embeddings

Imagina que estás desarrollando una aplicación que recomienda comidas. Un usuario ingresa sus comidas favoritas y la app le sugiere opciones similares que podrían gustarle. Quieres desarrollar un modelo de aprendizaje automático (AA) que pueda predecir comidas similares, de modo que tu app pueda brindar recomendaciones de alta calidad ("Como te gustan los panqueques, te recomendamos los crepes").

Para entrenar tu modelo, seleccionas un conjunto de datos de 5,000 comidas populares, incluidas borscht, perro caliente, ensalada, pizza y shawarma.

Figura 1. Conjunto de ilustraciones de cinco comidas. En el sentido de las manecillas del reloj,
       desde arriba a la izquierda: borscht, perro caliente, ensalada, pizza y shawarma.
Figura 1. Ejemplo de comidas incluidas en el conjunto de datos correspondiente.

Crea una función meal que contenga una representación de codificación one-hot de cada una de las comidas del conjunto de datos. La codificación hace referencia al proceso de elegir una representación numérica inicial de datos para entrenar el modelo.

Figura 2. Arriba: Visualización de una codificación one-hot para borscht.
       El vector [1, 0, 0, 0, …, 0] se muestra sobre seis cuadros,
       alineados de izquierda
       a derecha con uno de los números del vector. Los cuadros, de izquierda a derecha,
       contienen las siguientes imágenes: borscht, hot dog, ensalada, pizza, [vacío] y
       shawarma. Centro: Visualización de la codificación one-hot para perro caliente.
       El vector [0, 1, 0, 0, …, 0] se muestra sobre seis cuadros
       alineados de izquierda a derecha con uno de los números del vector. Los cuadros tienen
       las mismas imágenes de izquierda a derecha que la visualización de borscht
       ubicada más arriba. Parte inferior: visualización de una codificación one-hot para shawarma. El
       vector [0, 0, 0, 0, …, 1] se muestra sobre seis cuadros alineados
       de izquierda a derecha con uno de los números del vector. Los cuadros tienen
       las mismas imágenes de izquierda a derecha que las visualizaciones de borscht
       y perro caliente.
Figura 2. Codificaciones one-hot de borscht, perro caliente y shawarma. Cada vector de codificación one-hot tiene una longitud de 5,000 (una entrada por cada elemento del menú del conjunto de datos). La elipsis del diagrama representa las 4,995 entradas que no se muestran.

Dificultades de las representaciones de datos dispersas

Si revisas estas codificaciones one-hot, observarás que la representación de los datos presenta varios problemas.

  • Cantidad de pesos. Los vectores de entradas grandes representan una gran cantidad de pesos para una red neuronal. Con M entradas en tu codificación one-hot y N nodos en la primera capa de la red después de la entrada, el modelo tiene que entrenar MxN pesos para esa capa.
  • Cantidad de datos. Cuantos más pesos tenga tu modelo, más datos se necesitarán para entrenarlo de manera eficaz.
  • Cantidad de procesamiento. Cuantos más pesos, más procesamiento se necesita para entrenar y usar el modelo. Esto puede hacer que se supere fácilmente la capacidad del hardware.
  • Cantidad de memoria. Cuantos más pesos tenga tu modelo, más memoria se necesitará en los aceleradores para entrenarlo y ponerlo en producción. Escalar esto de manera eficiente es muy difícil.
  • Dificultad para admitir aprendizaje automático en el dispositivo (ODML). Si esperas ejecutar tu modelo de AA en dispositivos locales (en lugar de publicarlo), deberás reducir la cantidad de pesos del modelo.

En este módulo, aprenderás a crear embeddings, es decir, representaciones de menos dimensiones de datos dispersos que resuelven esos problemas.