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.

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.](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/food_images_one_hot_encodings.png?hl=es-419)
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.