Grande Colisor de Hádrons e Odnoklassniki

Continuando com o tema das competições de aprendizado de máquina no Habré, gostaríamos de apresentar aos leitores mais duas plataformas. Eles certamente não são tão grandes quanto o kaggle, mas definitivamente merecem atenção.

Grande Colisor de Hádrons e Odnoklassniki

Pessoalmente, não gosto muito de kaggle por vários motivos:

  • em primeiro lugar, as competições muitas vezes duram vários meses e a participação ativa exige muito esforço;
  • em segundo lugar, kernels públicos (soluções públicas). Os adeptos do Kaggle aconselham tratá-los com a calma dos monges tibetanos, mas na realidade é uma pena quando algo em que você está trabalhando há um ou dois meses de repente acaba sendo colocado em uma bandeja de prata para todos.

Felizmente, competições de aprendizado de máquina são realizadas em outras plataformas, e algumas dessas competições serão discutidas.

IDAO Hackatona SNA 2019
Idioma oficial: Inglês,
organizadores: Yandex, Sberbank, HSE
Língua russa oficial,
organizadores: Grupo Mail.ru
Rodada Online: 15 de janeiro a 11 de fevereiro de 2019;
Final no local: 4 a 6 de abril de 2019
online - de 7 de fevereiro a 15 de março;
offline - de 30 de março a 1º de abril.
Usando um determinado conjunto de dados sobre uma partícula no Grande Colisor de Hádrons (trajetória, momento e outros parâmetros físicos bastante complexos), determine se é um múon ou não
A partir desta afirmação, foram identificadas 2 tarefas:
- em um você só precisava enviar sua previsão,
- e no outro - o código completo e o modelo para previsão, e a execução estava sujeita a restrições bastante estritas de tempo de execução e uso de memória
Para a competição SNA Hackathon, foram coletados registros de exibição de conteúdo de grupos abertos em feeds de notícias de usuários de fevereiro a março de 2018. O conjunto de testes contém a última semana e meia de março. Cada entrada no log contém informações sobre o que foi mostrado e para quem, bem como como o usuário reagiu a esse conteúdo: avaliou, comentou, ignorou ou escondeu do feed.
A essência das tarefas do SNA Hackathon é classificar cada usuário da rede social Odnoklassniki em seu feed, elevando ao máximo as postagens que receberão uma “aula”.
Na etapa online, a tarefa foi dividida em 3 partes:
1. Classifique as postagens de acordo com várias características colaborativas
2. Classifique as postagens com base nas imagens que elas contêm
3. classifique as postagens de acordo com o texto que elas contêm
Métrica personalizada complexa, algo como ROC-AUC Média ROC-AUC por usuário
Prémios da primeira fase - T-shirts para N lugares, passagem à segunda fase, onde foram pagas alojamento e alimentação durante a competição
Segunda fase - ??? (Por alguns motivos, não estive presente na cerimónia de entrega de prémios e não consegui saber quais foram os prémios no final). Eles prometeram laptops a todos os membros da equipe vencedora
Prémios da primeira fase - T-shirts para os 100 melhores participantes, passagem para a segunda fase, onde foram pagas viagens a Moscovo, alojamento e alimentação durante a competição. Além disso, ao final da primeira etapa, foram anunciados os prêmios para os melhores em 3 tarefas da etapa 1: todos ganharam uma placa de vídeo RTX 2080 TI!
A segunda etapa foi uma etapa por equipes, equipes compostas por 2 a 5 pessoas, prêmios:
1º lugar - 300 rublos
2º lugar - 200 rublos
3º lugar - 100 rublos
prêmio do júri - 100 rublos
Grupo oficial de telegramas, cerca de 190 participantes, comunicação em inglês, perguntas tiveram que esperar vários dias para serem respondidas Grupo oficial no telegrama, aproximadamente 1500 participantes, discussão ativa de tarefas entre participantes e organizadores
Os organizadores forneceram duas soluções básicas, simples e avançadas. O simples exigia menos de 16 GB de RAM e a memória avançada não cabia em 16. Ao mesmo tempo, olhando um pouco para frente, os participantes não conseguiram superar significativamente o desempenho da solução avançada. Não houve dificuldades no lançamento destas soluções. Ressalta-se que no exemplo avançado havia um comentário com uma dica de por onde começar a melhorar a solução. Foram fornecidas soluções primitivas básicas para cada uma das tarefas, que foram facilmente superadas pelos participantes. Nos primeiros dias da competição, os participantes encontraram diversas dificuldades: em primeiro lugar, os dados eram fornecidos no formato Apache Parquet, e nem todas as combinações de Python e do pacote parquet funcionavam sem erros. A segunda dificuldade foi baixar fotos da nuvem de correio, no momento não existe uma maneira fácil de baixar uma grande quantidade de dados de uma só vez. Como resultado, estes problemas atrasaram os participantes por alguns dias.

IDAO. Primeira etapa

A tarefa era classificar partículas de múons/não múons de acordo com suas características. A principal característica desta tarefa foi a presença de uma coluna de peso nos dados de treinamento, que os próprios organizadores interpretaram como confiança na resposta desta linha. O problema era que algumas linhas continham pesos negativos.

Grande Colisor de Hádrons e Odnoklassniki

Depois de pensar alguns minutos na linha com a dica (a dica simplesmente chamou a atenção para essa característica da coluna de peso) e construir esse gráfico, decidimos verificar 3 opções:

1) inverter o alvo das linhas com pesos negativos (e pesos correspondentes)
2) mudar os pesos para o valor mínimo para que comecem em 0
3) não use pesos de corda

A terceira opção acabou por ser a pior, mas as duas primeiras melhoraram o resultado, a melhor foi a opção nº 1, que nos levou imediatamente ao atual segundo lugar na primeira tarefa e primeiro na segunda.
Grande Colisor de Hádrons e Odnoklassniki
Nossa próxima etapa foi revisar os dados em busca de valores ausentes. Os organizadores nos forneceram dados já penteados, onde faltavam alguns valores, e eles foram substituídos por -9999.

Encontramos valores ausentes nas colunas MatchedHit_{X,Y,Z}[N] e MatchedHit_D{X,Y,Z}[N], e somente quando N=2 ou 3. Como entendemos, algumas partículas não passou por todos os 4 detectores e parou na 3ª ou 4ª placa. Os dados também continham colunas Lextra_{X,Y}[N], que aparentemente descrevem a mesma coisa que MatchedHit_{X,Y,Z}[N], mas usando algum tipo de extrapolação. Essas escassas suposições sugeriram que Lextra_{X,Y}[N] poderia ser substituído pelos valores ausentes em MatchedHit_{X,Y,Z}[N] (apenas para coordenadas X e Y). MatchedHit_Z[N] foi bem preenchido com a mediana. Estas manipulações permitiram-nos alcançar o 1º lugar intermédio em ambas as tarefas.

Grande Colisor de Hádrons e Odnoklassniki

Considerando que eles não deram nada para vencer a primeira etapa, poderíamos ter parado por aí, mas continuamos, fizemos uns desenhos lindos e trouxemos novidades.

Grande Colisor de Hádrons e Odnoklassniki

Por exemplo, descobrimos que se traçarmos os pontos de intersecção de uma partícula com cada uma das quatro placas detectoras, podemos ver que os pontos em cada uma das placas estão agrupados em 5 retângulos com uma proporção de 4 para 5 e centrados em o ponto (0,0) e em Não há pontos no primeiro retângulo.

Número da placa / dimensões do retângulo 1 2 3 4 5
Prato 1 500 × 625 1000 × 1250 2000 × 2500 4000 × 5000 8000 × 10000
Prato 2 520 × 650 1040 × 1300 2080 × 2600 4160 × 5200 8320 × 10400
Prato 3 560 × 700 1120 × 1400 2240 × 2800 4480 × 5600 8960 × 11200
Prato 4 600 × 750 1200 × 1500 2400 × 3000 4800 × 6000 9600 × 12000

Tendo determinado essas dimensões, adicionamos 4 novos recursos categóricos para cada partícula - o número do retângulo no qual ela cruza cada placa.

Grande Colisor de Hádrons e Odnoklassniki

Notamos também que as partículas pareciam se espalhar para os lados a partir do centro e surgiu a ideia de avaliar de alguma forma a “qualidade” desse espalhamento. Idealmente, provavelmente seria possível chegar a algum tipo de parábola “ideal” dependendo do ponto de decolagem e estimar o desvio dela, mas nos limitamos à linha reta “ideal”. Tendo construído essas retas ideais para cada ponto de entrada, fomos capazes de calcular o desvio padrão da trajetória de cada partícula a partir dessa reta. Como o desvio médio para a meta = 1 foi de 152 e para a meta = 0 foi de 390, avaliamos provisoriamente esse recurso como bom. E, de fato, esse recurso chegou imediatamente ao topo dos mais úteis.

Ficamos maravilhados e adicionamos o desvio de todos os 4 pontos de intersecção para cada partícula da linha reta ideal como 4 recursos adicionais (e eles também funcionaram bem).

Links para artigos científicos sobre o tema do concurso, que nos foram fornecidos pelos organizadores, suscitaram a ideia de que estamos longe de ser os primeiros a resolver este problema e, talvez, exista algum tipo de software especializado. Tendo descoberto um repositório no github onde foram implementados os métodos IsMuonSimple, IsMuon, IsMuonLoose, transferimos-os para o nosso site com pequenas modificações. Os métodos em si eram muito simples: por exemplo, se a energia for inferior a um determinado limite, então não é um múon, caso contrário é um múon. Obviamente, esses recursos simples não poderiam proporcionar um aumento no caso do uso do aumento de gradiente, então adicionamos outra “distância” significativa ao limite. Esses recursos também foram ligeiramente melhorados. Talvez, analisando mais a fundo os métodos existentes, tenha sido possível encontrar métodos mais fortes e adicioná-los aos sinais.

No final da competição, ajustamos ligeiramente a solução “rápida” para o segundo problema; no final, ela diferiu da linha de base nos seguintes pontos:

  1. Nas linhas com peso negativo o alvo foi invertido
  2. Preenchido valores ausentes em MatchedHit_{X,Y,Z}[N]
  3. Profundidade reduzida para 7
  4. Taxa de aprendizagem reduzida para 0.1 (era 0.19)

Como resultado, tentamos mais recursos (sem muito sucesso), selecionamos parâmetros e treinamos catboost, lightgbm e xgboost, tentamos diferentes combinações de previsões e antes de abrir o privado vencemos com confiança na segunda tarefa, e na primeira estávamos entre os líderes.

Após a abertura do privado ficamos em 10º lugar na 1ª tarefa e 3º na segunda. Todos os líderes se confundiram e a velocidade no privado foi maior do que no libboard. Parece que os dados estavam mal estratificados (ou por exemplo não havia linhas com pesos negativos no privado) e isso foi um pouco frustrante.

SNA Hackathon 2019 - Textos. Primeira etapa

A tarefa era classificar as postagens dos usuários na rede social Odnoklassniki com base no texto que continham; além do texto, havia mais algumas características da postagem (idioma, proprietário, data e hora de criação, data e hora de visualização ).

Como abordagens clássicas para trabalhar com texto, destaco duas opções:

  1. Mapear cada palavra em um espaço vetorial n-dimensional de modo que palavras semelhantes tenham vetores semelhantes (leia mais em nosso artigo), então encontrando a palavra média para o texto ou utilizando mecanismos que levam em conta a posição relativa das palavras (CNN, LSTM/GRU).
  2. Usando modelos que podem funcionar imediatamente com frases inteiras. Por exemplo, Bert. Em teoria, essa abordagem deveria funcionar melhor.

Como esta foi minha primeira experiência com textos, seria errado ensinar alguém, então vou ensinar sozinho. Estas são as dicas que eu me daria no início da competição:

  1. Antes de correr para ensinar algo, veja os dados! Além do texto em si, os dados tinham várias colunas e foi possível extrair deles muito mais do que eu. A coisa mais simples é fazer a codificação de destino média para algumas das colunas.
  2. Não aprenda com todos os dados! Havia muitos dados (cerca de 17 milhões de linhas) e não era absolutamente necessário utilizar todos eles para testar hipóteses. O treinamento e o pré-processamento foram bastante lentos e obviamente eu teria tido tempo para testar hipóteses mais interessantes.
  3. <Conselho controverso> Não há necessidade de procurar um modelo matador. Passei muito tempo descobrindo Elmo e Bert, esperando que eles me levassem imediatamente a um lugar alto e, como resultado, usei embeddings pré-treinados do FastText para o idioma russo. Não consegui atingir velocidade melhor com Elmo e ainda não tive tempo de descobrir isso com Bert.
  4. <Conselho controverso> Não há necessidade de procurar um recurso matador. Olhando os dados, percebi que cerca de 1% dos textos não contém texto! Mas havia links para alguns recursos, e escrevi um analisador simples que abriu o site e extraiu o título e a descrição. Pareceu uma boa ideia, mas depois me empolguei e resolvi analisar todos os links de todos os textos e novamente perdi muito tempo. Tudo isso não proporcionou uma melhora significativa no resultado final (embora eu tenha descoberto a lematização, por exemplo).
  5. Os recursos clássicos funcionam. Nós pesquisamos no Google, por exemplo, “text features kaggle”, lemos e adicionamos tudo. O TF-IDF proporcionou uma melhoria, assim como recursos estatísticos como comprimento do texto, palavras e quantidade de pontuação.
  6. Se houver colunas DateTime, vale a pena analisá-las em vários recursos separados (horas, dias da semana, etc.). Quais características devem ser destacadas devem ser analisadas por meio de gráficos/algumas métricas. Aqui, por capricho, fiz tudo certo e destaquei as funcionalidades necessárias, mas uma análise normal não faria mal (por exemplo, como fizemos no final).

Grande Colisor de Hádrons e Odnoklassniki

Como resultado da competição, treinei um modelo keras com convolução de palavras e outro baseado em LSTM e GRU. Ambos usaram embeddings FastText pré-treinados para o idioma russo (tentei vários outros embeddings, mas esses foram os que funcionaram melhor). Depois de calcular a média das previsões, consegui o 7º lugar final entre 76 participantes.

Após a primeira etapa foi publicado artigo de Nikolai Anokhin, que ficou em segundo lugar (participou fora da competição), e sua solução até certo ponto repetiu a minha, mas foi além devido ao mecanismo de atenção de valor-chave de consulta.

Segunda etapa OK e IDAO

As segundas etapas das competições aconteceram quase consecutivamente, então resolvi analisá-las em conjunto.

Primeiro, eu e a equipe recém-adquirida acabamos no impressionante escritório da empresa Mail.ru, onde nossa tarefa era combinar os modelos das três faixas da primeira etapa - texto, imagens e colaboração. Para isso foram atribuídos pouco mais de 2 dias, o que acabou sendo muito pouco. Na verdade, só conseguimos repetir os resultados da primeira etapa sem obter nenhum ganho com a fusão. No final ficamos em 5º lugar, mas não conseguimos utilizar o modelo de texto. Depois de analisar as soluções dos outros participantes, parece que valeu a pena tentar agrupar os textos e adicioná-los ao modelo de colaboração. Um efeito colateral dessa etapa foram novas impressões, encontro e comunicação com participantes e organizadores bacanas, além de forte falta de sono, o que pode ter afetado o resultado da etapa final do IDAO.

A tarefa da fase final do IDAO 2019 foi prever o tempo de espera de um pedido dos taxistas Yandex no aeroporto. Na fase 2, foram identificadas 3 tarefas = 3 aeroportos. Para cada aeroporto, são fornecidos dados minuto a minuto sobre o número de pedidos de táxi durante seis meses. E como dados de teste, foram fornecidos dados do mês seguinte e minuto a minuto sobre pedidos das últimas 2 semanas. Demorou pouco (1,5 dias), a tarefa foi bastante específica, apenas uma pessoa da equipe compareceu à competição - e por isso foi um lugar triste no final. Ideias interessantes incluíam tentativas de usar dados externos: clima, engarrafamentos e estatísticas de pedidos de táxi Yandex. Embora os organizadores não tenham dito quais eram esses aeroportos, muitos participantes presumiram que eram Sheremetyevo, Domodedovo e Vnukovo. Embora esta suposição tenha sido refutada após a competição, características, por exemplo, dos dados meteorológicos de Moscovo melhoraram os resultados tanto na validação como na tabela de classificação.

Conclusão

  1. As competições de ML são legais e interessantes! Aqui você encontrará o uso de habilidades em análise de dados, e em modelos e técnicas astutas, e simplesmente o bom senso é bem-vindo.
  2. O ML já é um enorme corpo de conhecimento que parece estar crescendo exponencialmente. Estabeleci como meta conhecer diversas áreas (sinais, imagens, tabelas, texto) e já percebi o quanto há para estudar. Por exemplo, após essas competições decidi estudar: algoritmos de clustering, técnicas avançadas para trabalhar com bibliotecas de aumento de gradiente (em particular, trabalhar com CatBoost na GPU), redes de cápsula, mecanismo de atenção de consulta-chave-valor.
  3. Não apenas pelo kaggle! Existem muitos outros concursos onde é mais fácil conseguir pelo menos uma camiseta e há mais chances de outros prêmios.
  4. Comunicar! Já existe uma grande comunidade na área de aprendizado de máquina e análise de dados, existem grupos temáticos no Telegram, Slack e pessoas sérias do Mail.ru, Yandex e outras empresas respondem dúvidas e ajudam iniciantes e aqueles que continuam sua jornada nesta área de conhecimento.
  5. Aconselho a todos que se inspiraram no ponto anterior que visitem festival de dados — uma grande conferência gratuita em Moscou, que acontecerá de 10 a 11 de maio.

Fonte: habr.com

Adicionar um comentário