Adeus Features Manuais, Olá Jornadas de Aprendizado!

Por muito tempo, o ranking de busca do Airbnb dependia de estatísticas agregadas e feitas à mão — tipo total de reservas passadas ou preço médio dos anúncios. Isso funcionou por um tempo, mas chegou num limite: com centenas de features, o modelo ficava limitado e difícil de escalar. O problema? A jornada de um hóspede é uma sequência rica de eventos: visualizações, reservas, avaliações e cancelamentos ao longo de anos. Contar essa história com features estáticas é tipo tentar entender um livro só pela capa.

Neste artigo, vamos mergulhar no JourneyFormer, o modelo de sequência baseado em Transformer que codifica a jornada completa do hóspede. Essa mudança é um marco em sistemas de recomendação, saindo da engenharia de features para o aprendizado de representações. E fica de olho: essas mudanças em plataformas web também afetam devs — veja nosso post sobre as novidades da web platform em junho de 2026.

Architecture diagram of Airbnb's Transformer-based sequence model encoding long-term and short-term guest events

A Arquitetura: Separando Intenção de Curto Prazo da Memória de Longo Prazo

A decisão mais importante foi dividir a sequência de eventos do hóspede em duas partes para resolver problemas de custo computacional e sinais esparsos.

O Design das Duas Sequências

  • Sequência de Longo Prazo: Captura eventos infrequentes mas informativos dos últimos sete anos (reservas, avaliações, cancelamentos). Limitada a 80 eventos, dá profundidade e contexto.
  • Sequência de Curto Prazo: Captura visualizações de anúncios dos últimos 21 dias, representando a intenção imediata de busca. Limitada a 200 eventos, foca na atualidade.

As duas sequências compartilham uma tabela de embeddings unificada para IDs de alta cardinalidade, como os de anúncios e anfitriões, permitindo representações ricas e compartilhadas.

Eficiência: 4x Mais Throughput no Treinamento

O time implementou três estratégias para tornar o treinamento viável com centenas de milhões de exemplos:

  1. Batching de Buscas: Em vez de rodar o encoder para cada busca, o modelo roda uma vez na sequência completa. Com a máscara causal, embeddings intermediários são roteados para as buscas correspondentes, permitindo que várias buscas compartilhem um único forward pass.
  2. Bucketing por Tamanho: Sequências são agrupadas por tamanho para minimizar o desperdício de padding nos batches.
  3. Cálculo Disperso: Buscas com padding são eliminadas do modelo de ranking.
# Exemplo simplificado do conceito de batching de buscas

def agrupa_encodings_buscas(sequencia_eventos, timestamps_buscas):
    """
    Processa a sequência completa uma vez e roteia embeddings
    intermediários para as buscas correspondentes.
    """
    # Placeholder para o forward pass do encoder Transformer
    todos_embeddings = transformer_encoder(sequencia_eventos)

    embeddings_buscas = {}
    for timestamp in timestamps_buscas:
        # O embedding em timestamp-1 captura todos os eventos até aquele ponto
        embeddings_buscas[timestamp] = todos_embeddings[timestamp - 1]

    return embeddings_buscas

Servindo: Desacoplando a Inferência para Baixa Latência

Para manter a latência baixa no momento da busca, o sistema separa a inferência em duas etapas:

  • Job Diário em Batch: O encoder de sequência processa o histórico de eventos diariamente e armazena os embeddings resultantes.
  • Recuperação em Tempo Real: No momento da busca, o modelo de ranking recupera o embedding armazenado e o combina com a query ao vivo para pontuar os anúncios candidatos.

Developer analyzing sequence model training metrics to optimize ranking performance Algorithm Concept Visual

Resultados, Limitações e o Que Vem por Aí

Os resultados são impressionantes. Testes A/B mostraram ganhos estatisticamente significativos: +0.55% em hóspedes que não cancelaram e +0.90% em visualizações combinando as duas sequências. O setwise ranker final adicionou +0.28% em reservas não canceladas. No total, o sistema completo alcançou +3.78% de melhoria offline no NDCG — um ganho enorme num sistema refinado por mais de uma década.

Limitações e Pontos de Atenção

Apesar do poder, essa abordagem tem limitações:

  • Custo Computacional: Treinar um Transformer nessa escala exige um investimento significativo em infraestrutura.
  • Problema do Cold Start: O modelo depende de eventos históricos, sendo menos eficaz para hóspedes novos com pouco histórico.
  • Recência dos Dados: A inferência em batch diário pode não refletir mudanças na intenção do hóspede dentro de um mesmo dia.

Próximos Passos para Aprender

Para se aprofundar nesse domínio, explore:

  1. Setwise Ranking: Entenda como ele difere do pointwise ao considerar um conjunto de candidatos juntos.
  2. Modelagem de Sequências: Estude a arquitetura Transformer e suas aplicações além de NLP.
  3. Aprendizado de Embeddings: Veja como tabelas de embeddings unificadas lidam com features de alta cardinalidade.

Server infrastructure diagram showing the decoupled batch inference and real-time ranking system Coding Session Visual

Conclusão: Uma Nova Era na Busca Personalizada

O JourneyFormer representa uma mudança fundamental em como o Airbnb entende seus hóspedes. Ao aprender diretamente com a jornada completa, o modelo captura preferências que eram inacessíveis antes. O sucesso tanto na busca quanto nos emails promocionais valida o poder e a generalidade dessa abordagem. O recado é claro: o futuro dos sistemas de recomendação não está em mais features, mas em melhores representações das jornadas dos usuários. Para mais insights de front-end, veja nosso guia sobre estilização de pseudo-elementos de destaque.

Fonte: Airbnb Engineering Blog

Este conteúdo foi elaborado com o auxílio de ferramentas de IA, com base em fontes confiáveis, e revisado pela nossa equipe editorial antes da publicação. Não substitui o aconselhamento de um profissional especializado.