Como vencemos no SmartMailHack 2

No fim de semana passado (14 a 15 de julho), outro hackathon SmartMailHack foi realizado no escritório do Mail.Ru Group. Nos pediram para "criar um recurso que permita acessar dados do Mail e interagir com eles de maneira mais eficaz".


Descrição, Idéias e Soluções de Dados


Temos uma caixa de teste com mais de 1500 mensagens, além de acesso completo a ela através da API. Os organizadores forneceram um manual grande e detalhado sobre o seu uso (livro de 547 páginas). Com a ajuda de um token e solicitações JSON simples, poderíamos receber todas as informações necessárias sobre o correio: cartas, nomes de remetentes, várias características.


Tendo discutido que cada um de nós tem cerca de vários milhares de cartas não lidas nas listas de correspondência, decidimos lidar com esse problema. No nosso caso, a relevância da carta não é mais determinada no momento em que ela apareceu na caixa de correio. E com base no fato de que nem todas as letras serão abertas, é melhor mostrar ao usuário apenas aquelas que ele provavelmente abrirá. E tudo o mais pode ser removido para o inferno. Então decidimos fazer uma classificação por correio.


As letras de classificação deveriam ser por categoria e as categorias devem ser colocadas dentro dos blocos (oi, Trello). A linha superior de blocos combinava o significado das cartas de diferentes remetentes. Pode haver "Viagens", "Registro", "Correspondência com Vasya", "Eventos", "Finanças" e assim por diante, no total, cerca de 10 categorias. A segunda linha foram azulejos com as melhores ofertas das empresas. Pesquisamos os códigos promocionais mais relevantes, as promoções com mais descontos, as ofertas mais valiosas e os mostramos aqui, agrupados por empresa. Depois vieram todas as outras cartas distribuídas pelas empresas emissoras, e esses remetentes, por sua vez, foram espalhados em categorias ("Alimentos", "Cosméticos", "Eletrônicos" e outros). Além disso, as categorias também foram classificadas pela relevância das letras, e somente as letras que ultrapassavam um certo limiar de relevância foram mostradas no interior. Tendo reforçado a idéia com as palavras “Encontre o que é necessário e elimine o excesso”, subimos no ML.


Aprendizado de máquina


Decidimos construir três modelos:


  • um classificador de mais de 30 categorias que designamos como básico para todos os usuários;
  • agrupar e destacar novas categorias com base nas preferências do usuário;
  • classificação de letras na categoria, da mais relevante à menos.


Sinais


Parece que este item deve ser descrito individualmente para cada tarefa. No entanto, geramos um conjunto de dados de recursos comuns e treinamos todos os modelos nele. Não houve tempo para uma seleção cuidadosa.


Havia vários sinais binários que são descarregados usando a API. No entanto, a maioria deles foi gerada nos textos:


  • tf-idf em uma coleção de documentos;
  • Casamentos recebidos com o Word2Vec;
  • sintomas comportamentais como:
    - o número de mensagens lidas na última janela (1, 2, 5 semanas atrás);
    - o número de mensagens disso.

Tarefa de classificação


Marcamos com as mãos 1000 cartas para treinamento. Descobriu-se que este não é um trabalho tão lento e tedioso quanto pode parecer à primeira vista. Se você usar endereços e cabeçalhos, poderá acelerar significativamente o trabalho. Por exemplo, Lamoda quase sempre envia cartas para a categoria "Roupas".


Em seguida, treinamos o LightGBM em todo o conjunto de sinais e obtemos a qualidade da precisão de 0,913 e medidas de 0,892 f1, que determinamos como um resultado muito bom no nível da linha de base. Isso mostra que as letras podem ser classificadas muito bem.


Tarefa de classificação


Como variável de destino, usamos o sinalizador binário 0/1 - se a mensagem foi lida pelo usuário. Eles foram classificados ainda de acordo com a probabilidade prevista pelo modelo, pois é exatamente isso que reflete a confiança do modelo em saber se a pessoa lerá a mensagem ou não.


Aqui também treinamos o LightGBM em todo o conjunto de recursos e obtivemos uma qualidade de cerca de 0,816 auc-roc.


Agrupando e destacando novas categorias


Além das principais categorias, temos a categoria "Outros". A partir dele, você pode destacar novos tópicos.


Nós treinamos o DBSCAN padrão em cartas desse grupo e, em seguida, selecionamos os clusters nos quais havia muitas mensagens (o limite pode ser otimizado, mas foi corrigido por acidente). Por exemplo, a modelagem temática pode ser definida em uma coleção de documentos de um cluster, obter o tópico mais relevante para um determinado cluster e selecioná-lo em um grupo separado. Não houve tempo suficiente para validar esse algoritmo.


Portanto, as cartas recebidas são passadas pelo classificador, se elas se enquadram na categoria "Outros" - elas são agrupadas, novos tópicos estão tentando se destacar e, em seguida, a classificação ocorre. Uma solicitação de back-end é enviada, que agrega tudo, e o front-end é renderizado.





Idéias restantes


  • aprimorando modelos de aprendizado de máquina;
  • coletar dados de mais usuários para prever melhor o comportamento de cada um deles;
  • validação completa de novas categorias emergentes;
  • o uso de figuras como signos, por exemplo, a alocação de incorporações de redes neurais pré-treinadas.

Source: https://habr.com/ru/post/pt417531/


All Articles