Operação de aprendizado de máquina no Mail.ru Mail

Operação de aprendizado de máquina no Mail.ru Mail

Baseado em meus discursos no Highload++ e DataFest Minsk 2019.

Para muitos hoje, o correio é parte integrante da vida online. Com a sua ajuda, realizamos correspondência comercial, armazenamos todo o tipo de informações importantes relacionadas com finanças, reservas de hotéis, realização de encomendas e muito mais. Em meados de 2018, formulamos uma estratégia de produto para desenvolvimento de correio. Como deveria ser o correio moderno?

O correio deve ser inteligente, ou seja, ajudar os usuários a navegar no crescente volume de informações: filtrar, estruturar e disponibilizar da forma mais conveniente. Ela deve ser útil, permitindo que você resolva diversas tarefas direto na sua caixa de correio, por exemplo, pagar multas (função que, infelizmente, utilizo). E ao mesmo tempo, é claro, o correio deve fornecer proteção às informações, eliminando spam e protegendo contra hackers, ou seja, ser seguro.

Essas áreas definem uma série de problemas importantes, muitos dos quais podem ser resolvidos de forma eficaz usando aprendizado de máquina. Aqui estão exemplos de recursos já existentes desenvolvidos como parte da estratégia – um para cada direção.

  • resposta inteligente. O Mail possui um recurso de resposta inteligente. A rede neural analisa o texto da carta, entende seu significado e propósito e, como resultado, oferece as três opções de resposta mais adequadas: positiva, negativa e neutra. Isso ajuda a economizar significativamente tempo ao responder cartas e também costuma responder de maneira não padronizada e divertida.
  • Agrupando e-mailsrelacionados a pedidos em lojas online. Frequentemente fazemos compras online e, via de regra, as lojas podem enviar vários e-mails para cada pedido. Por exemplo, do AliExpress, o maior serviço, chegam muitas cartas para um pedido, e calculamos que no caso terminal seu número pode chegar a 29. Portanto, usando o modelo de Reconhecimento de Entidade Nomeada, extraímos o número do pedido e outras informações do texto e agrupe todas as letras em um único tópico. Também exibimos informações básicas sobre o pedido em uma caixa separada, o que facilita o trabalho com esse tipo de e-mail.

    Operação de aprendizado de máquina no Mail.ru Mail

  • Antiphishing. Phishing é um tipo de e-mail fraudulento particularmente perigoso, com a ajuda do qual os invasores tentam obter informações financeiras (incluindo os cartões bancários do usuário) e logins. Essas cartas imitam as reais enviadas pelo serviço, inclusive visualmente. Portanto, com a ajuda da Visão Computacional, reconhecemos logotipos e o estilo de design de cartas de grandes empresas (por exemplo, Mail.ru, Sber, Alfa) e levamos isso em consideração junto com o texto e outros recursos em nossos classificadores de spam e phishing .

Aprendizado de máquina

Um pouco sobre aprendizado de máquina em email em geral. O correio é um sistema altamente carregado: uma média de 1,5 bilhão de cartas por dia passam pelos nossos servidores para 30 milhões de usuários DAU. Cerca de 30 sistemas de aprendizado de máquina oferecem suporte a todas as funções e recursos necessários.

Cada carta passa por todo um pipeline de classificação. Primeiro cortamos o spam e deixamos bons e-mails. Os usuários muitas vezes não percebem o trabalho do antispam, porque 95-99% do spam nem vai para a pasta apropriada. O reconhecimento de spam é uma parte muito importante do nosso sistema, e a mais difícil, pois no campo do anti-spam existe uma adaptação constante entre os sistemas de defesa e ataque, o que proporciona um desafio contínuo de engenharia à nossa equipa.

A seguir, separamos cartas de pessoas e robôs. Os e-mails das pessoas são os mais importantes, por isso oferecemos recursos como Resposta Inteligente para elas. As cartas dos robôs são divididas em duas partes: transacionais - são cartas importantes de serviços, por exemplo, confirmações de compras ou reservas de hotéis, finanças e informativas - são publicidade comercial, descontos.

Acreditamos que os e-mails transacionais têm a mesma importância que a correspondência pessoal. Elas devem estar à mão, pois muitas vezes precisamos encontrar rapidamente informações sobre um pedido ou reserva de passagem aérea e perdemos tempo procurando por essas cartas. Portanto, para maior comodidade, os dividimos automaticamente em seis categorias principais: viagens, pedidos, finanças, passagens, inscrições e, por fim, multas.

As cartas informativas são o grupo maior e provavelmente o menos importante, que não exigem resposta imediata, pois nada de significativo mudará na vida do usuário se ele não ler tal carta. Em nossa nova interface, nós os agrupamos em dois tópicos: redes sociais e newsletters, limpando visualmente a caixa de entrada e deixando visíveis apenas as mensagens importantes.

Operação de aprendizado de máquina no Mail.ru Mail

exploração

Um grande número de sistemas causa muitas dificuldades de operação. Afinal, os modelos se degradam com o tempo, como qualquer software: recursos quebram, máquinas falham, código fica torto. Além disso, os dados mudam constantemente: novos são adicionados, os padrões de comportamento dos usuários são transformados, etc., portanto, um modelo sem suporte adequado funcionará cada vez pior com o tempo.

Não devemos esquecer que quanto mais profundamente a aprendizagem automática penetra na vida dos utilizadores, maior é o impacto que têm no ecossistema e, como resultado, mais perdas financeiras ou lucros os intervenientes no mercado podem receber. Portanto, num número cada vez maior de áreas, os jogadores estão se adaptando ao trabalho dos algoritmos de ML (exemplos clássicos são publicidade, pesquisa e o já mencionado antispam).

Além disso, as tarefas de aprendizado de máquina têm uma peculiaridade: qualquer mudança, mesmo que pequena, no sistema pode gerar muito trabalho com o modelo: trabalho com dados, retreinamento, implantação, o que pode levar semanas ou meses. Portanto, quanto mais rápido o ambiente em que seus modelos operam muda, mais esforço será necessário para mantê-los. Uma equipe pode criar muitos sistemas e ficar feliz com isso, mas depois gastar quase todos os seus recursos para mantê-los, sem a oportunidade de fazer nada novo. Certa vez, encontramos uma situação assim na equipe antispam. E chegaram à conclusão óbvia de que o suporte precisa ser automatizado.

Automação

O que pode ser automatizado? Quase tudo, na verdade. Identifiquei quatro áreas que definem a infraestrutura de aprendizado de máquina:

  • coleção de dados;
  • treino adicional;
  • implantar;
  • testes e monitoramento.

Se o ambiente for instável e em constante mudança, então toda a infraestrutura em torno do modelo acaba sendo muito mais importante do que o próprio modelo. Pode ser um bom e velho classificador linear, mas se você alimentá-lo com os recursos certos e obter um bom feedback dos usuários, ele funcionará muito melhor do que os modelos de última geração com todos os recursos.

Loop de feedback

Este ciclo combina coleta de dados, treinamento adicional e implantação – na verdade, todo o ciclo de atualização do modelo. Por que isso é importante? Veja o calendário de inscrições no correio:

Operação de aprendizado de máquina no Mail.ru Mail

Um desenvolvedor de aprendizado de máquina implementou um modelo antibot que impede que bots se registrem por e-mail. O gráfico cai para um valor onde permanecem apenas usuários reais. Tudo é bom! Mas quatro horas se passam, os bots ajustam seus scripts e tudo volta ao normal. Nessa implementação, o desenvolvedor passou um mês adicionando recursos e retreinando o modelo, mas o spammer conseguiu se adaptar em quatro horas.

Para não ser tão terrivelmente doloroso e não ter que refazer tudo mais tarde, devemos inicialmente pensar sobre como será o ciclo de feedback e o que faremos se o ambiente mudar. Vamos começar coletando dados - esse é o combustível para nossos algoritmos.

Coleta de dados

É claro que para as redes neurais modernas, quanto mais dados, melhor, e eles são, de fato, gerados pelos usuários do produto. Os usuários podem nos ajudar marcando os dados, mas não podemos abusar disso, pois em algum momento os usuários se cansarão de completar seus modelos e mudarão para outro produto.

Um dos erros mais comuns (aqui faço referência a Andrew Ng) é focar muito nas métricas do conjunto de dados de teste, e não no feedback do usuário, que na verdade é a principal medida da qualidade do trabalho, já que criamos um produto para o usuário. Se o usuário não entende ou não gosta do trabalho do modelo, tudo fica estragado.

Portanto, o usuário deve sempre poder votar e receber uma ferramenta para feedback. Se acharmos que chegou uma carta relacionada a finanças na caixa de correio, precisamos marcá-la como “finanças” e desenhar um botão no qual o usuário possa clicar e dizer que não se trata de finanças.

Qualidade de feedback

Vamos falar sobre a qualidade do feedback do usuário. Em primeiro lugar, você e o usuário podem colocar significados diferentes em um conceito. Por exemplo, você e seus gerentes de produto pensam que “finanças” significa cartas do banco, e o usuário pensa que uma carta da avó sobre sua pensão também se refere a finanças. Em segundo lugar, existem usuários que adoram pressionar botões sem qualquer lógica. Em terceiro lugar, o utilizador pode estar profundamente enganado nas suas conclusões. Um exemplo marcante de nossa prática é a implementação de um classificador Spam nigeriano, um tipo de spam muito engraçado em que o usuário é solicitado a retirar vários milhões de dólares de um parente distante encontrado repentinamente na África. Depois de implementar esse classificador, verificamos os cliques “Não é spam” nesses e-mails e descobrimos que 80% deles eram spam nigeriano interessante, o que sugere que os usuários podem ser extremamente crédulos.

E não esqueçamos que os botões podem ser clicados não apenas por pessoas, mas também por todos os tipos de bots que fingem ser um navegador. Portanto, o feedback bruto não é bom para o aprendizado. O que você pode fazer com essas informações?

Usamos duas abordagens:

  • Feedback do ML vinculado. Por exemplo, temos um sistema anti-bot online que, como mencionei, toma uma decisão rápida com base em um número limitado de sinais. E há um segundo sistema lento que funciona depois do fato. Contém mais dados sobre o usuário, seu comportamento, etc. Como resultado, a decisão mais informada é tomada; consequentemente, tem maior precisão e integridade. Você pode direcionar a diferença na operação desses sistemas para o primeiro como dados de treinamento. Assim, um sistema mais simples tentará sempre aproximar-se do desempenho de um mais complexo.
  • Classificação de cliques. Você pode simplesmente classificar cada clique do usuário, avaliar sua validade e usabilidade. Fazemos isso no correio antispam, utilizando atributos do usuário, seu histórico, atributos do remetente, o próprio texto e o resultado dos classificadores. Como resultado, obtemos um sistema automático que valida o feedback do usuário. E como precisa ser retreinado com muito menos frequência, seu trabalho pode se tornar a base para todos os outros sistemas. A principal prioridade neste modelo é a precisão, porque treinar o modelo com dados imprecisos está repleto de consequências.

Enquanto limpamos os dados e treinamos ainda mais nossos sistemas de ML, não devemos nos esquecer dos usuários, porque para nós milhares, milhões de erros no gráfico são estatísticas, e para o usuário cada bug é uma tragédia. Além do usuário de alguma forma conviver com seu erro no produto, após receber feedback, ele espera que situação semelhante seja eliminada no futuro. Portanto, vale sempre a pena dar aos usuários não apenas a oportunidade de votar, mas também de corrigir o comportamento dos sistemas de ML, criando, por exemplo, heurísticas pessoais para cada clique de feedback; no caso do correio, esta poderia ser a capacidade de filtrar tais cartas por remetente e título para este usuário.

Também é necessário construir um modelo baseado em alguns relatórios ou chamadas de suporte em modo semiautomático ou manual para que outros usuários não sofram de problemas semelhantes.

Heurísticas para aprendizagem

Existem dois problemas com essas heurísticas e muletas. A primeira é que o número cada vez maior de muletas é difícil de manter, e muito menos a sua qualidade e desempenho a longo prazo. O segundo problema é que o erro pode não ser frequente e alguns cliques para treinar ainda mais o modelo não serão suficientes. Parece que estes dois efeitos não relacionados podem ser significativamente neutralizados se a seguinte abordagem for aplicada.

  1. Criamos uma muleta temporária.
  2. Enviamos dados dele para o modelo, ele se atualiza regularmente, inclusive nos dados recebidos. Aqui, claro, é importante que as heurísticas tenham alta precisão para não reduzir a qualidade dos dados no conjunto de treinamento.
  3. Em seguida, configuramos o monitoramento para acionar a muleta, e se depois de algum tempo a muleta não funcionar mais e ficar totalmente coberta pelo modelo, você poderá removê-la com segurança. Agora é improvável que esse problema aconteça novamente.

Portanto, um exército de muletas é muito útil. O principal é que o seu serviço seja urgente e não permanente.

Treino adicional

Retreinamento é o processo de adicionar novos dados obtidos como resultado do feedback de usuários ou outros sistemas e treinar um modelo existente neles. Pode haver vários problemas com treinamento adicional:

  1. O modelo pode simplesmente não suportar treinamento adicional, mas aprender apenas do zero.
  2. Em nenhum lugar do livro da natureza está escrito que o treinamento adicional certamente melhorará a qualidade do trabalho na produção. Muitas vezes acontece o contrário, ou seja, só a deterioração é possível.
  3. As mudanças podem ser imprevisíveis. Este é um ponto bastante sutil que identificamos por nós mesmos. Mesmo que um novo modelo em um teste A/B apresente resultados semelhantes ao atual, isso não significa que funcionará de forma idêntica. Seu trabalho pode diferir em apenas um por cento, o que pode trazer novos erros ou retornar erros antigos que já foram corrigidos. Tanto nós quanto os usuários já sabemos conviver com os erros atuais, e quando surge um grande número de novos erros, o usuário também pode não entender o que está acontecendo, pois espera um comportamento previsível.

Portanto, o mais importante na formação complementar é garantir que o modelo seja melhorado, ou pelo menos não piorado.

A primeira coisa que vem à mente quando falamos em treinamento adicional é a abordagem de Aprendizagem Ativa. O que isto significa? Por exemplo, o classificador determina se um e-mail está relacionado a finanças e, em torno de seu limite de decisão, adicionamos uma amostra de exemplos rotulados. Isso funciona bem, por exemplo, em publicidade, onde há muito feedback e você pode treinar o modelo online. E se houver pouco feedback, obtemos uma amostra altamente tendenciosa em relação à distribuição dos dados de produção, com base na qual é impossível avaliar o comportamento do modelo durante a operação.

Operação de aprendizado de máquina no Mail.ru Mail

Na verdade, nosso objetivo é preservar padrões antigos, modelos já conhecidos, e adquirir novos. A continuidade é importante aqui. O modelo, que muitas vezes nos esforçamos muito para implementar, já está funcionando, por isso podemos nos concentrar no seu desempenho.

Diferentes modelos são usados ​​no correio: árvores, redes lineares e neurais. Para cada um, criamos nosso próprio algoritmo de treinamento adicional. No processo de treinamento adicional, recebemos não apenas novos dados, mas muitas vezes também novos recursos, que levaremos em consideração em todos os algoritmos abaixo.

Modelos lineares

Digamos que temos regressão logística. Criamos um modelo de perda a partir dos seguintes componentes:

  • LogLoss em novos dados;
  • regularizamos os pesos das novas funcionalidades (não mexemos nas antigas);
  • também aprendemos com dados antigos para preservar padrões antigos;
  • e, talvez, o mais importante: acrescentamos a Regularização Harmônica, que garante que os pesos não mudarão muito em relação ao modelo antigo de acordo com a norma.

Como cada componente de Perda possui coeficientes, podemos selecionar os valores ideais para nossa tarefa por meio de validação cruzada ou com base nos requisitos do produto.

Operação de aprendizado de máquina no Mail.ru Mail

Деревья

Vamos passar para as árvores de decisão. Compilamos o seguinte algoritmo para treinamento adicional de árvores:

  1. A produção administra uma floresta de 100 a 300 árvores, que é treinada com base em um conjunto de dados antigo.
  2. Ao final retiramos M = 5 peças e adicionamos 2M = 10 novas, treinadas em todo o conjunto de dados, mas com peso alto para os novos dados, o que naturalmente garante uma mudança incremental no modelo.

Obviamente, com o tempo, o número de árvores aumenta muito, e elas devem ser reduzidas periodicamente para cumprir os prazos. Para fazer isso, usamos a agora onipresente Destilação de Conhecimento (KD). Resumidamente sobre o princípio de seu funcionamento.

  1. Temos o atual modelo “complexo”. Nós o executamos no conjunto de dados de treinamento e obtemos a distribuição de probabilidade da classe na saída.
  2. A seguir, treinamos o modelo do aluno (o modelo com menos árvores neste caso) para repetir os resultados do modelo usando a distribuição de classes como variável alvo.
  3. É importante observar aqui que não usamos a marcação do conjunto de dados de forma alguma e, portanto, podemos usar dados arbitrários. Obviamente, usamos uma amostra de dados do fluxo de combate como amostra de treinamento para o modelo do aluno. Assim, o conjunto de treinamento permite garantir a precisão do modelo, e a amostra de fluxo garante um desempenho semelhante na distribuição da produção, compensando o viés do conjunto de treinamento.

Operação de aprendizado de máquina no Mail.ru Mail

A combinação destas duas técnicas (adicionar árvores e reduzir periodicamente o seu número através da Destilação de Conhecimento) garante a introdução de novos padrões e uma continuidade completa.

Com a ajuda do KD, também realizamos diferentes operações nos recursos do modelo, como remover recursos e trabalhar em lacunas. No nosso caso, temos uma série de características estatísticas importantes (por remetentes, hashes de texto, URLs, etc.) que são armazenadas no banco de dados, que tendem a falhar. O modelo, claro, não está preparado para tal desenvolvimento de eventos, uma vez que não ocorrem situações de falha no conjunto de treinamento. Nesses casos, combinamos técnicas de KD e de aumento: ao treinar parte dos dados, removemos ou redefinimos os recursos necessários e pegamos os rótulos originais (saídas do modelo atual), e o modelo do aluno aprende a repetir essa distribuição.

Operação de aprendizado de máquina no Mail.ru Mail

Percebemos que quanto mais grave for a manipulação do modelo, maior será a porcentagem de amostra de rosca necessária.

A remoção de recursos, a operação mais simples, requer apenas uma pequena parte do fluxo, já que apenas alguns recursos mudam e o modelo atual foi treinado no mesmo conjunto - a diferença é mínima. Para simplificar o modelo (reduzindo várias vezes o número de árvores), já é necessário 50 a 50. E para omissões de características estatísticas importantes que afetarão seriamente o desempenho do modelo, é necessário ainda mais fluxo para nivelar o trabalho do novo modelo resistente a omissões em todos os tipos de letras.

Operação de aprendizado de máquina no Mail.ru Mail

Texto Rápido

Vamos passar para FastText. Deixe-me lembrar que a representação (incorporação) de uma palavra consiste na soma da incorporação da própria palavra e de todas as suas letras N-gramas, geralmente trigramas. Como pode haver muitos trigramas, utiliza-se Bucket Hashing, ou seja, converte todo o espaço em um determinado hashmap fixo. Como resultado, a matriz de pesos é obtida com a dimensão da camada interna por número de palavras + baldes.

Com treinamento adicional, novos sinais aparecem: palavras e trigramas. Nada significativo acontece no treinamento de acompanhamento padrão do Facebook. Apenas pesos antigos com entropia cruzada são treinados novamente em novos dados. Assim, novos recursos não são utilizados; é claro, esta abordagem tem todas as desvantagens descritas acima associadas à imprevisibilidade do modelo em produção. É por isso que modificamos um pouco o FastText. Adicionamos todos os novos pesos (palavras e trigramas), expandimos toda a matriz com entropia cruzada e adicionamos regularização harmônica por analogia com o modelo linear, o que garante uma alteração insignificante nos pesos antigos.

Operação de aprendizado de máquina no Mail.ru Mail

CNN

Redes convolucionais são um pouco mais complicadas. Se as últimas camadas forem concluídas na CNN, então, é claro, você poderá aplicar a regularização harmônica e garantir a continuidade. Mas se for necessário treinamento adicional de toda a rede, essa regularização não poderá mais ser aplicada a todas as camadas. No entanto, existe a opção de treinar incorporações complementares por meio de Triplet Loss (artigo original).

Perda Tripla

Usando uma tarefa anti-phishing como exemplo, vejamos a Triplet Loss em termos gerais. Levamos nosso logotipo, bem como exemplos positivos e negativos de logotipos de outras empresas. Minimizamos a distância entre as primeiras e maximizamos a distância entre as segundas, fazemos isso com um pequeno vão para garantir maior compactação das classes.

Operação de aprendizado de máquina no Mail.ru Mail

Se treinarmos ainda mais a rede, nosso espaço métrico muda completamente e se torna completamente incompatível com o anterior. Este é um problema sério em problemas que utilizam vetores. Para contornar esse problema, misturaremos embeddings antigos durante o treinamento.

Adicionamos novos dados ao conjunto de treinamento e estamos treinando a segunda versão do modelo do zero. Na segunda etapa, treinamos ainda mais nossa rede (Finetuning): primeiro a última camada é concluída e depois toda a rede é descongelada. No processo de composição de trigêmeos, calculamos apenas parte dos embeddings usando o modelo treinado, o restante - usando o antigo. Assim, no processo de treinamento adicional, garantimos a compatibilidade dos espaços métricos v1 e v2. Uma versão única de regularização harmônica.

Operação de aprendizado de máquina no Mail.ru Mail

Arquitetura inteira

Se considerarmos todo o sistema usando o antispam como exemplo, então os modelos não são isolados, mas aninhados uns nos outros. Tiramos fotos, textos e outros recursos, usando CNN e Fast Text obtemos embeddings. Em seguida, são aplicados classificadores sobre os embeddings, que fornecem pontuações para diversas classes (tipos de cartas, spam, presença de logotipo). Os sinais e sinalizações já estão entrando na floresta de árvores para que a decisão final seja tomada. Os classificadores individuais neste esquema permitem interpretar melhor os resultados do sistema e, mais especificamente, treinar novamente os componentes em caso de problemas, em vez de alimentar todos os dados em árvores de decisão em formato bruto.

Operação de aprendizado de máquina no Mail.ru Mail

Como resultado, garantimos continuidade em todos os níveis. No nível inferior em CNN e Fast Text usamos regularização harmônica, para os classificadores intermediários também usamos regularização harmônica e calibração de taxa para consistência da distribuição de probabilidade. Bem, o aumento de árvores é treinado de forma incremental ou usando Destilação de Conhecimento.

Em geral, manter esse sistema de aprendizado de máquina aninhado costuma ser uma tarefa difícil, pois qualquer componente no nível inferior leva a uma atualização de todo o sistema acima. Mas como em nossa configuração cada componente muda ligeiramente e é compatível com o anterior, todo o sistema pode ser atualizado peça por peça sem a necessidade de retreinar toda a estrutura, o que permite seu suporte sem grandes sobrecargas.

Implantar

Discutimos a coleta de dados e o treinamento adicional de diferentes tipos de modelos, por isso estamos avançando para sua implantação no ambiente de produção.

Teste A/B

Como disse anteriormente, no processo de coleta de dados geralmente obtemos uma amostra tendenciosa, a partir da qual é impossível avaliar o desempenho de produção do modelo. Portanto, no momento da implantação, o modelo deve ser comparado com a versão anterior para entender como as coisas realmente estão indo, ou seja, realizar testes A/B. Na verdade, o processo de implantação e análise de gráficos é bastante rotineiro e pode ser facilmente automatizado. Implementamos nossos modelos gradualmente para 5%, 30%, 50% e 100% dos usuários, enquanto coletamos todas as métricas disponíveis nas respostas do modelo e feedback dos usuários. No caso de alguns valores discrepantes graves, revertemos automaticamente o modelo e, para outros casos, tendo coletado um número suficiente de cliques do usuário, decidimos aumentar a porcentagem. Com isso, levamos o novo modelo para 50% dos usuários de forma totalmente automática, e o rollout para todo o público será aprovado por uma pessoa, embora esta etapa possa ser automatizada.

No entanto, o processo de teste A/B oferece espaço para otimização. O fato é que qualquer teste A/B é bastante longo (no nosso caso leva de 6 a 24 horas dependendo da quantidade de feedback), o que o torna bastante caro e com recursos limitados. Além disso, uma porcentagem suficientemente alta de fluxo para o teste é necessária para essencialmente acelerar o tempo geral do teste A/B (recrutar uma amostra estatisticamente significativa para avaliar métricas em uma pequena porcentagem pode levar muito tempo), o que torna o número de slots A/B é extremamente limitado. Obviamente, precisamos testar apenas os modelos mais promissores, dos quais recebemos bastante durante o processo de treinamento adicional.

Para resolver esse problema, treinamos um classificador separado que prevê o sucesso de um teste A/B. Para fazer isso, consideramos estatísticas de tomada de decisão, precisão, recall e outras métricas no conjunto de treinamento, no diferido e na amostra do fluxo como recursos. Também comparamos o modelo com o atual em produção, com heurística, e levamos em consideração a Complexidade do modelo. Utilizando todos esses recursos, um classificador treinado no histórico de testes avalia os modelos candidatos, no nosso caso são florestas de árvores, e decide qual usar no teste A/B.

Operação de aprendizado de máquina no Mail.ru Mail

No momento da implementação, essa abordagem nos permitiu aumentar várias vezes o número de testes A/B bem-sucedidos.

Teste e monitoramento

Os testes e o acompanhamento, curiosamente, não prejudicam a nossa saúde, pelo contrário, melhoram-na e aliviam-nos de stress desnecessário. O teste permite evitar uma falha e o monitoramento permite detectá-la a tempo de reduzir o impacto nos usuários.

É importante entender aqui que mais cedo ou mais tarde seu sistema sempre cometerá erros – isso se deve ao ciclo de desenvolvimento de qualquer software. No início do desenvolvimento do sistema sempre há muitos bugs até que tudo se acalme e a etapa principal da inovação seja concluída. Mas com o tempo, a entropia cobra seu preço e os erros reaparecem - devido à degradação dos componentes ao redor e às alterações nos dados, sobre os quais falei no início.

Gostaria de observar aqui que qualquer sistema de aprendizado de máquina deve ser considerado do ponto de vista de seu lucro ao longo de todo o seu ciclo de vida. O gráfico abaixo mostra um exemplo de como o sistema funciona para capturar um tipo raro de spam (a linha do gráfico está próxima de zero). Um dia, devido a um atributo armazenado em cache incorretamente, ela enlouqueceu. Por sorte, não houve monitoramento de acionamentos anormais; como resultado, o sistema começou a salvar cartas em grandes quantidades na pasta “spam” na fronteira de tomada de decisão. Apesar de corrigir as consequências, o sistema já cometeu erros tantas vezes que não se pagará nem em cinco anos. E isto é um fracasso total do ponto de vista do ciclo de vida do modelo.

Operação de aprendizado de máquina no Mail.ru Mail

Portanto, algo tão simples como o monitoramento pode se tornar fundamental na vida de um modelo. Além das métricas padrão e óbvias, consideramos a distribuição das respostas e pontuações do modelo, bem como a distribuição dos valores dos principais recursos. Usando a divergência KL, podemos comparar a distribuição atual com a histórica ou os valores do teste A/B com o restante do fluxo, o que nos permite perceber anomalias no modelo e reverter alterações em tempo hábil.

Na maioria dos casos, lançamos nossas primeiras versões de sistemas usando heurísticas simples ou modelos que usaremos como monitoramento no futuro. Por exemplo, monitoramos o modelo NER em comparação com os regulares para lojas online específicas e, se a cobertura do classificador cair em comparação com eles, entendemos os motivos. Outro uso útil da heurística!

Resultados de

Vamos repassar as ideias principais do artigo novamente.

  • Fibdeck. Pensamos sempre no usuário: como ele vai conviver com nossos erros, como poderá relatá-los. Não se esqueça que os usuários não são uma fonte de feedback puro para modelos de treinamento e isso precisa ser esclarecido com a ajuda de sistemas auxiliares de ML. Caso não seja possível coletar um sinal do usuário, procuramos fontes alternativas de feedback, por exemplo, sistemas conectados.
  • Treino adicional. O principal aqui é a continuidade, por isso contamos com o modelo de produção atual. Treinamos novos modelos para que não sejam muito diferentes dos anteriores devido à regularização harmônica e truques semelhantes.
  • Implantar. A implantação automática baseada em métricas reduz bastante o tempo de implementação de modelos. Acompanhando estatísticas e distribuição da tomada de decisão, o número de quedas dos usuários é obrigatório para seu sono reparador e final de semana produtivo.

Bem, espero que isso ajude você a melhorar seus sistemas de ML com mais rapidez, colocá-los no mercado com mais rapidez e torná-los mais confiáveis ​​e menos estressantes.

Fonte: habr.com

Adicionar um comentário