Imagine que você esteja desenvolvendo um aplicativo de recomendação de alimentos, em que os usuários inserem suas refeições favoritas, e o aplicativo sugere refeições semelhantes de que eles podem gostar. Você quer desenvolver um modelo de machine learning (ML) que pode prever a similaridade alimentar, para que seu aplicativo possa fazer recomendações ("Como você gosta de panquecas, recomendamos crepes").
Para treinar o modelo, você seleciona um conjunto de dados de 5.000 refeições, incluindo borscht, cachorro-quente, salada, pizza, e shawarma.
![Figura 1. Um conjunto de ilustrações de cinco alimentos. Em sentido horário a partir de
canto superior esquerdo: borscht, cachorro-quente, salada, pizza, shawarma.](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/food_images.png?authuser=19&hl=pt-br)
Você cria um recurso meal
que contém um
codificação one-hot
representação de cada item das refeições no conjunto de dados.
![Figura 2. Topo: uma visualização da codificação one-hot para borscht.
O vetor [1, 0, 0, 0, ..., 0] é exibido acima de seis caixas,
cada uma alinhada à esquerda
para a direita por um dos números vetoriais. As caixas, da esquerda para a direita
conter as seguintes imagens: borscht, cachorro-quente, salada, pizza, [vazio],
shawarma. Meio: uma visualização da codificação one-hot para o cachorro-quente.
O vetor [0, 1, 0, 0, ..., 0] é exibido acima de seis caixas, cada
alinhada da esquerda para a direita por um dos números vetoriais. As caixas têm
as mesmas imagens da esquerda para a direita da visualização de Borscht.
acima. Embaixo: visualização da codificação one-hot do shawarma. O
vetor [0, 0, 0, 0, ..., 1] é exibido acima de seis caixas, cada uma alinhada
da esquerda para a direita por um dos números vetoriais. As caixas têm
da esquerda para a direita, são as mesmas imagens
do borscht e do cachorro-quente.
e visualizações de dados.](https://developers.google.cn/static/machine-learning/crash-course/embeddings/images/food_images_one_hot_encodings.png?authuser=19&hl=pt-br)
Dificuldades das representações de dados esparsos
Ao analisar essas codificações one-hot, você percebe dois problemas importantes representação visual dos dados.
- Número de pesos. Vetores de entrada grandes significam um grande número de
pesos
para uma rede neural.
Com entradas M em sua codificação one-hot e N
na primeira camada da rede após a entrada, o modelo precisa treinar
pesos MxN para essa camada. Um grande número de pesos causa mais problemas:
- Número de pontos de dados. Quanto mais pesos no seu modelo, mais dados você para treinar com eficácia.
- Quantidade de computação. Quanto mais pesos, mais computação é necessária para treinar e usar o modelo. É fácil exceder os recursos das ao hardware.
- Quantidade de memória. Quanto mais pesos no modelo, mais memória é necessária nos aceleradores que o treinam e a disponibilizam. escalonando verticalmente com eficiência é muito difícil.
- Dificuldade de suporte aprendizado de máquina no dispositivo (ODML). Se você espera executar seu modelo de ML em dispositivos locais (em vez de disponibilizar com elas), se concentre em diminuir o tamanho do modelo e para diminuir o número de pesos.
- Falta de relações significativas entre vetores. Os valores vetoriais na as codificações one-hot para alimentos não fornecem informações significativas sobre a similaridade de alimentos. Matematicamente, o índice 1 ("cachorro-quente") é mais próximo do índice 2 ("salad") do que do índice 4999 ("shawarma"), mesmo que cachorro é mais parecido com shawarma (com carne e pão) do que com salada.
Neste módulo, você vai aprender a criar embeddings, componentes representações de dados esparsos, que abordam esses dois problemas.