Prepare-se para o inexplicável

Alguns dos problemas que enfrentei usando o aprendizado de máquina envolvem recursos categóricos que representam objetos do mundo real, como palavras, itens e categorias.

Então, o que acontece quando, no momento da inferência, obtemos novos valores de objetos que nunca foram vistos antes? Como podemos nos preparar com antecedência, para que ainda possamos dar sentido às informações?

Valores invisíveis, também chamados de valores OOV (Fora do Vocabulário), devem ser tratados adequadamente. Algoritmos diferentes têm métodos diferentes para lidar com valores de OOV. Diferentes suposições sobre os recursos categóricos também devem ser tratadas de maneira diferente.

Neste post, vou focar no caso de aprendizado profundo aplicado a dados dinâmicos, onde novos valores aparecem o tempo todo. Vou usar o sistema de recomendação do Avance Network como exemplo. Algumas das entradas que o modelo obtém no tempo de inferência contêm valores invisíveis - isso é comum em sistemas de recomendação. Exemplos incluem:

  • ID do item: cada item recomendável recebe um identificador exclusivo. Todos os dias, milhares de novos itens entram no sistema.
  • ID do anunciante: o conteúdo patrocinado é criado pelos anunciantes. O número de novos anunciantes diários é muito menor comparado ao número de novos itens. No entanto, é importante lidar com eles corretamente, especialmente porque queremos oferecer suporte a novos anunciantes.

Então, qual é o desafio com os valores OOV?

 

Aprendendo a lidar com valores OOV

Um valor OOV é associado a valores não vistos pelo modelo no momento do treinamento. Portanto, se obtivermos um valor de OOV no tempo de inferência, o modelo não saberá o que fazer com ele.

Uma solução simples é substituir todos os valores raros por um token OOV especial antes do treinamento. Como todos os valores de OOV são iguais do ponto de vista do modelo, os substituiremos pelo token de OOV no momento da inferência. Esta solução tem dois resultados positivos:

  1. O modelo será exposto ao token OOV durante o treinamento. No aprendizado profundo, geralmente incorporamos recursos categóricos. Após o treinamento, o modelo aprenderá uma incorporação significativa para todos os valores de OOV.
  2. O risco de ajuste excessivo aos valores raros será atenuado. Esses valores aparecem em um pequeno número de exemplos. Se aprendermos a incorporar esses valores, o modelo pode aprender a usá-los para explicar particularidades ou ruídos aleatórios encontrados nesses exemplos específicos. Outro desastre que pode resultar no aprendizado dessas incorporações não está recebendo atualizações de gradiente suficientes propagadas a elas. Como conseqüência, a inicialização aleatória dominará os resultados incorporados sobre o sinal aprendido através do treinamento.

Problema resolvido ... Ou é?

 

Lidar com valores OOV é difícil!

O modelo usa o recurso de identificação do item para memorizar informações diferentes por item, de maneira semelhante à abordagem de filtragem colaborativa pura . Itens raros que são injetados com o token OOV não podem se beneficiar com isso, portanto, o modelo apresenta desempenho pior.

O interessante é que, mesmo se não usarmos a ID do item durante o treinamento, o modelo ainda terá um desempenho pior em itens raros! Isso ocorre porque eles vêm de uma distribuição diferente da da população em geral. Eles têm características específicas - talvez tenham um desempenho on-line ruim, o que fez com que o sistema de recomendação do Avance Network os recomendasse menos e, por sua vez - se tornaram raros no conjunto de dados. Então, por que essa diferença de distribuição é importante?

Se aprendermos a incorporação de OOV usando essa distribuição especial, ela não será generalizada para a população em geral. Pense dessa maneira - cada item era um novo item em algum momento. Nesse ponto, ele foi injetado com o token OOV. Portanto, a incorporação do OOV deve ter um bom desempenho para todos os itens possíveis.

 

A aleatoriedade é o melhor amigo do cientista de dados

Para aprender a incorporação do OOV usando a população em geral, podemos injetar o token OOV em um conjunto aleatório de exemplos do conjunto de dados antes de iniciar o processo de treinamento. Mas quantos exemplos serão suficientes?

Quanto mais amostramos, melhor será a incorporação do OOV. Mas, ao mesmo tempo, o modelo será exposto a um número menor de valores que não sejam OOV, portanto, o desempenho será prejudicado.

Como podemos usar muitos exemplos para treinar a incorporação de OOV e, ao mesmo tempo, usar os mesmos exemplos para treinar as incorporação não-OOV? Em vez de injetar aleatoriamente o token OOV antes de começar a treinar, escolhemos a seguinte abordagem: em cada época, o modelo treina usando todos os valores disponíveis (o token OOV não é injetado). No final da época, amostramos um conjunto aleatório de exemplos, injetamos o token OOV e treinamos o modelo mais uma vez. Dessa forma, gostamos dos dois mundos!

Como foi feito na abordagem anterior, também injetamos o token OOV em valores raros - para evitar ajustes excessivos.

Para avaliar a nova abordagem, injetamos o token OOV em todos os exemplos e avaliamos nossa métrica offline (MSE). Ele melhorou em 15% em comparação com a injeção aleatória do token OOV antes do modelo começar a treinar.

 

Pensamentos finais

Nosso modelo foi usado na produção por um longo tempo antes de pensarmos na nova abordagem. Poderia ter sido fácil perder esse potencial ganho de desempenho, já que o modelo teve um bom desempenho geral. Apenas enfatiza o fato de que você sempre precisa procurar o inesperado!

 

Máxima comunicação com proteção ao extremo? Avance Network: A verdadeira rede social junte-se a nós


Strong

5178 مدونة المشاركات

التعليقات