Medida de semelhança supervisionada

Em vez de comparar dados combinados manualmente, é possível reduzir esses dados a representações chamadas embeddings e, em seguida, compará-los. Os embeddings são gerados ao treinar uma rede neural profunda (DNN) supervisionada nos dados do próprio recurso. Os embeddings mapeiam os dados do atributo para um vetor em um espaço de embedding. Normalmente, o espaço de embedding tem menos dimensões que os dados do recurso, de modo a capturar uma estrutura latente do conjunto de dados do recurso. Os vetores de embedding para exemplos semelhantes, como vídeos do YouTube assistidos pelos mesmos usuários, acabam se aproximando no espaço de embedding. Veremos como a medida de semelhança usa essa "proximidade" para quantificar a semelhança por pares de exemplos.

Lembre-se de que estamos falando apenas de aprendizado supervisionado para criar nossa medida de semelhança. A medida de semelhança, seja manual ou supervisionada, é usada por um algoritmo para executar o clustering não supervisionado.

Comparação de medidas manuais e supervisionadas

Esta tabela descreve quando usar uma medida de semelhança manual ou supervisionada dependendo dos seus requisitos.

RequisitoManualSupervisionados
Elimine as informações redundantes nos recursos correlacionados. Não, você precisa investigar separadamente as correlações entre os atributos. Sim, o DNN elimina informações redundantes.
Fornecer insights sobre semelhanças calculadas. Sim Não é possível decifrar os embeddings.
Ideal para conjuntos de dados pequenos com poucos recursos. Sim, criar uma medida manual com alguns recursos é fácil. Não, conjuntos de dados pequenos não fornecem dados de treinamento suficientes para uma DNN.
Ideal para conjuntos de dados grandes com vários recursos. Não, é muito difícil eliminar manualmente informações redundantes de vários recursos e, em seguida, combiná-las. Sim, o DNN elimina automaticamente informações redundantes e combina atributos.

Processo para medição de semelhança supervisionada

A figura a seguir mostra como criar uma medida de semelhança supervisionada:

Dados do recurso de entrada. Escolha DNN: codificador ou preditor automático.
      Extrai embeddings. Escolha a medida: ponto, cosseno ou distância euclidiana.
Figura 1: etapas para criar uma medida de semelhança supervisionada.

Você já aprendeu a primeira etapa. Esta página aborda a próxima etapa e as páginas a seguir discutem as etapas restantes.

Escolher DNN com base em identificadores de treinamento

Reduza os dados do recurso a embeddings treinando uma DNN que usa os mesmos dados do recurso como entrada e os rótulos. Por exemplo, no caso de dados internos, a DNN usaria os recursos, como preço, tamanho e CEP, para prever esses recursos em si. Para usar os dados do recurso para prever os mesmos dados de atributo, a DNN é forçada a reduzir os dados de recursos de entrada para embeddings. Use esses embeddings para calcular a semelhança.

Uma DNN que aprende incorporações de dados de entrada prevendo os dados de entrada em si é chamada de codificador automático. Como as camadas ocultas de um codificador automático são menores que as camadas de entrada e saída, o codificador automático é forçado a aprender uma representação compactada dos dados do recurso de entrada. Depois que a DNN é treinada, você extrai os embeddings da última camada escondida para calcular a semelhança.

Comparação entre um codificador automático e uma DNN do preditor.
       As entradas iniciais e as camadas ocultas são as mesmas, mas a saída
       é filtrada pelo recurso principal do modelo de previsão.
Figura 2: uma comparação entre um codificador automático e um preditor.

Um codificador automático é a escolha mais simples para gerar embeddings. No entanto, um codificador automático não é a escolha ideal quando determinados recursos podem ser mais importantes do que outros para determinar a semelhança. Por exemplo, nos dados de casa, suponha que "preço" seja mais importante do que "código postal". Nesses casos, use apenas o atributo importante como o rótulo de treinamento para a DNN. Como essa DNN prevê um recurso de entrada específico em vez de prever todos os atributos de entrada, ela é chamada de DNN do preditor. Use as seguintes diretrizes para escolher um recurso como rótulo:

  • Prefira atributos numéricos a atributos categóricos como rótulos, porque a perda é mais fácil de calcular e interpretar para atributos numéricos.

  • Não use atributos categóricos com cardinalidade \(\lesssim\) 100 como rótulos. Se você fizer isso, o DNN não será forçado a reduzir seus dados de entrada para embeddings, porque uma DNN pode prever facilmente rótulos categóricos de baixa cardinalidade.

  • Remova o atributo que você usa como o identificador da entrada para a DNN. Caso contrário, a DNN preverá perfeitamente a saída.

Dependendo do rótulo escolhido, a DNN resultante é uma DNN do codificador automático ou uma DNN do preditor.

Função de perda para DNN

Para treinar o DNN, você precisa criar uma função de perda seguindo estas etapas:

  1. Calcule a perda para cada saída do DNN. Para saídas que:
    • Numérico, use mean quadrados error (MSE).
    • categórica não unificada, use log perda. Observe que você não precisará implementar a perda de registro por conta própria, porque é possível usar uma função de biblioteca para calculá-la.
    • categórico multivalente, use a perda de softmax (em inglês) de entropia cruzada (em inglês). Você não precisará implementar a perda de entropia cruzada do softmax por conta própria, porque é possível usar uma função da biblioteca para calculá-la.
  2. Calcule a perda total somando a perda para cada saída.

Ao somar as perdas, verifique se cada atributo contribui proporcionalmente para a perda. Por exemplo, se você converter dados de cor em valores RGB, terá três saídas. Mas somar a perda de três saídas significa que a perda de cor é ponderada três vezes mais do que a de outros recursos. Em vez disso, multiplique cada saída por 1/3.

Usar a DNN em um sistema on-line

Um sistema de machine learning on-line tem um fluxo contínuo de novos dados de entrada. Você precisará treinar sua DNN nos novos dados. No entanto, se você treinar novamente sua DNN do zero, seus embeddings serão diferentes porque as DNNs são inicializadas com pesos aleatórios. Em vez disso, sempre inicie a DNN com os pesos atuais e atualize-a com novos dados.