Embeddings

Imagine que você está desenvolvendo um aplicativo de recomendação de alimentos, que sugere opções parecidas com os pratos favoritos dos usuários. Para recomendações de alta qualidade (por exemplo, "já que você gosta de panquecas, recomendamos crepes"), você precisa desenvolver um modelo de machine learning (ML) que consiga prever a semelhança entre os alimentos.

Para treinar esse modelo, você seleciona um conjunto de dados com 5.000 pratos conhecidos, incluindo borscht, cachorro-quente, salada, pizza e shawarma.

Figura 1. Conjunto de ilustrações de cinco alimentos. Da esquerda
       para a direita e de cima para baixo: borscht, cachorro-quente, salada, pizza, shawarma.
Figura 1. Amostragem dos alimentos incluídos no conjunto de dados de pratos.

Você cria um recurso meal que tem uma representação com codificação one-hot para cada um dos alimentos no conjunto de dados. Codificação se refere ao processo de escolher uma representação numérica inicial dos dados para treinar o modelo.

Figura 2. Parte de cima: 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 da esquerda
       para a direita com um dos números do vetor. As caixas, da esquerda para a direita,
       incluem as seguintes imagens: borscht, cachorro-quente, salada, pizza, [vazio],
       shawarma. Meio: uma visualização da codificação one-hot para cachorro-quente.
       O vetor [0, 1, 0, 0, …, 0] é exibido acima de seis caixas, cada
       uma alinhada da esquerda para a direita com um dos números do vetor. As caixas têm
       as mesmas imagens da esquerda para a direita que a visualização de borscht
       acima. Parte de baixo: uma visualização da codificação one-hot para shawarma. O
       vetor [0, 0, 0, 0, …, 1] é exibido acima de seis caixas, cada uma alinhada
       da esquerda para a direita com um dos números do vetor. As caixas têm
       as mesmas imagens da esquerda para a direita que as visualizações de borscht e cachorro-quente
       acima.
Figura 2. Codificações one-hot de borscht, cachorro-quente e shawarma. Cada vetor de codificação one-hot tem 5.000 entradas (uma para cada item no conjunto de dados). As reticências no diagrama representam as 4.995 entradas não exibidas.

Armadilhas das representações de dados esparsos

Ao analisar as codificações one-hot, é possível notar diversos problemas com essa representação de dados.

  • Número de pesos. Vetores de entrada grandes resultam em muitos pesos para uma rede neural. Com M entradas na sua codificação one-hot e N nós na primeira camada da rede após a entrada, o modelo precisa treinar MxN pesos para essa camada.
  • Número de pontos de dados. Quanto mais pesos seu modelo tiver, mais dados você precisará treinar com eficácia.
  • Quantidade de computação. Quanto mais pesos, mais computação será necessária para treinar e usar o modelo. É fácil ultrapassar a capacidade do seu hardware.
  • Quantidade de memória. Quanto mais pesos no seu modelo, mais memória será necessária nos aceleradores que o treinam e disponibilizam. É muito difícil escalonar isso de maneira eficiente.
  • Dificuldade da compatibilidade com o machine learning no dispositivo (ODML, na sigla em inglês). Caso pretenda executar seu modelo de ML em dispositivos locais, e não o disponibilizar, você precisará se concentrar em diminuir o tamanho do modelo e o número de pesos.

Neste módulo, você vai aprender a criar embeddings, representações de baixa dimensão de dados esparsos, que resolvem esses problemas.