- A Canva alcançou 200 milhões de MAU, tem mais de 30 bilhões de designs e cria cerca de 300 novos designs por segundo
- Tornou-se um problema cada vez mais importante permitir que os usuários busquem designs e encontrem arquivos compartilhados com eles
- Na busca pública (busca na web/de produto), os datasets são construídos com base nas consultas dos usuários e em um conjunto fixo de itens de busca
- Especialistas avaliam e rotulam a relevância entre cada consulta e item
- O desempenho do mecanismo de busca é avaliado por métricas de recall e precision
- Na busca pessoal, não é possível usar os dados do usuário como dataset de avaliação sem visualizar designs privados (para proteger a privacidade)
- Como solução, usou-se IA generativa (como GPT-4o) para gerar conteúdo e consultas realistas, mas totalmente sintéticos
- Isso oferece uma forma de avaliar melhorias no pipeline de busca sem qualquer violação de privacidade
Estado anterior: métodos de teste limitados
- Processo de teste existente
- Os engenheiros usavam um método limitado de testes offline
- Executavam consultas de problemas conhecidos em contas da Canva para comparar o desempenho antes e depois de mudanças no código
- Ex.: em um trabalho para melhorar correção ortográfica, testavam consultas incorretas como
desgin
- Antes da mudança: nenhum resultado
- Depois da mudança: retorno de documentos relacionados a
design
- Mudanças que passavam no teste offline seguiam para a etapa de teste online
- Execução de testes A/B usando o framework de experimentos da Canva
- Comparação da taxa de sucesso da busca entre usuários com a mudança aplicada e usuários da busca padrão
- Limitações
- Falta de validade estatística nos testes offline
- Um número limitado de consultas dificilmente representa a diversidade do comportamento de busca
- Possível impacto negativo nos usuários
- Quedas de desempenho não detectadas no teste offline poderiam ser expostas em experimentos online
- Alto consumo de tempo nos experimentos online
- Para garantir significância estatística, eram necessários no mínimo vários dias ou até semanas
- Isso limitava o número de experimentos que podiam rodar em paralelo e a velocidade para testar ideias
Estado ideal: construir um novo dataset e pipeline de avaliação
- Objetivo: criar um dataset sob medida e um pipeline de avaliação para que os engenheiros pudessem avaliar mudanças de forma objetiva antes de ir para testes online
- Requisitos principais:
- Reprodutibilidade: produzir os mesmos resultados a qualquer momento
- Iteração rápida: permitir que engenheiros testem rapidamente os resultados após mudanças no código, sem esperar o deploy em produção
- Semelhança com o ambiente de produção: fornecer resultados alinhados ao comportamento real em produção
- Trabalho sem bloqueios: permitir que membros da equipe experimentem mudanças de código de forma independente, sem atrapalhar uns aos outros
Criação de um dataset realista: uso de IA generativa
- Dataset de avaliação com preservação de privacidade
- O GPT-4o foi usado para gerar dados sintéticos que pudessem substituir dados reais de usuários
- Sem copiar designs de usuários, criaram-se dados realistas refletindo distribuições estatísticas, como comprimento de texto
- Geração de casos de teste para avaliar recall
- Com base em tema e tipo de design (documento, apresentação etc.), o GPT-4o gerava consultas e conteúdos correspondentes
- Ajuste da dificuldade das consultas:
- Inclusão de erros de ortografia
- Substituição por sinônimos
- Reformulação da consulta
- Geração de casos de teste para avaliar precision
- Criação de datasets com designs relevantes e não relevantes
- Formas de gerar designs não relevantes:
- Incluir apenas parte das palavras-chave
- Modificar para o formato de template de design ou rascunho
- Definir como design antigo
Problemas encontrados ao usar IA generativa
- Vantagens e limitações dos LLMs
- Vantagem: capacidade de gerar grandes volumes de dados de texto com eficiência
- O dataset estático de avaliação gerado podia ser reutilizado repetidamente, fornecendo resultados de avaliação consistentes, determinísticos e rápidos
- Eliminação de limitações: depois de gerar o dataset, os problemas de latency e randomness dos LLMs deixavam de importar
- Problemas
- Recusa em gerar títulos longos
- Embora fosse solicitado que gerasse títulos com 12–15 palavras, o modelo retornava títulos mais curtos
- Ex.:
Exploring the Latest Advancements in Screen Technology and Applications (9 palavras)
Best Practices for Teachers: Presentation Tips for Meet the Teacher (10 palavras)
- Isso pode refletir o fato de que títulos longos são raros em documentos reais
- Como resultado, os critérios de comprimento de título precisaram ser revistos
- Erros de repetição e alucinação
- Ao solicitar diferentes erros ortográficos de uma palavra, o modelo retornava resultados duplicados ou pouco realistas
- Ex.: ao pedir diferentes erros ortográficos de
Calendar, foram gerados resultados repetitivos
- Problemas ao gerar títulos não relevantes
- Em alguns casos, o modelo não seguia corretamente as instruções ao gerar títulos de designs nonrelevant
- Alguns títulos retornados não incluíam as palavras-chave especificadas ou traziam resultados incorretos, como simplesmente conter
title string
Execução da avaliação: testes e análise em ambiente local
- Uso do dataset de avaliação
- O dataset sintético gerado foi aplicado ao pipeline de busca para produzir métricas de avaliação
- Após explorar várias formas de execução, adotou-se uma abordagem local com Testcontainers
- Pipeline local baseado em Testcontainers
- Aproveitamento do suporte existente a Testcontainer
- A arquitetura de RPC orientada a serviços da Canva já tinha suporte a Testcontainer implementado
- O pipeline foi construído combinando componentes externos, como Elasticsearch, com Testcontainers internos
- Reprodução completa da configuração de produção
- O pipeline de busca e os modelos de ML de suporte eram executados localmente, criando um ambiente idêntico ao de produção
- Isso permitia que engenheiros experimentassem diferentes variações de modelos
- Processo de tratamento dos casos de teste
- Gerar o state necessário para cada caso de teste
- Em vez de criar um design da Canva, extraíam-se e inseriam-se apenas os dados necessários para o índice de busca
- Executar o pipeline de busca local
- O dataset era executado junto com a consulta de teste para gerar resultados de busca
- Enviar os resultados ao módulo de avaliação
- Cálculo das métricas de recall e precision
- Diagrama de fluxo de dados
- Foi fornecido um diagrama mostrando visualmente o fluxo completo de processamento de dados pela ferramenta de avaliação
Visualizando os resultados
- Desenvolvimento de ferramenta de visualização
- Foi criada uma ferramenta customizada baseada em Streamlit para visualizar e comparar com eficiência os resultados da avaliação
- Engenheiros podiam comparar de relance métricas de recall e precision entre diferentes configurations
- Principais recursos
- Comparação por configuração
- Os resultados eram agregados para comparar lado a lado o desempenho de diferentes configurações
- Detalhamento do desempenho por tipo de consulta e dificuldade
- Era possível analisar separadamente o desempenho conforme tipos específicos de consulta ou níveis de dificuldade
- Depuração de consultas individuais
- Era possível inspecionar a saída de cada consulta para depurar com precisão casos de uso específicos
- Suporte a decisões rápidas
- Quando a avaliação terminava, a ferramenta era executada imediatamente, ajudando engenheiros a tomar decisões rápidas com base nos resultados de desempenho
- Os engenheiros podiam iterar e melhorar de forma independente, sem depender do trabalho de outros membros da equipe
Impacto e planos futuros
- Quão perto chegaram do estado ideal?
- O dataset e as ferramentas de avaliação oferecem reprodutibilidade completa e geram resultados em poucos minutos
- Engenheiros conseguem avaliar localmente, de forma independente e objetiva, resultados alinhados ao comportamento em produção
- A privacidade é totalmente preservada sem visualizar nenhum design nem consulta de clientes
- Resumo dos resultados
- Iteração rápida
- Mais de 1.000 casos de teste são processados em menos de 10 minutos
- Durante os 2–3 dias de um experimento online, é possível realizar mais de 300 avaliações offline
- Correlação entre resultados offline e online
- Os resultados da avaliação offline foram projetados para eliminar ideias inadequadas e levar a testes online apenas mudanças com alta chance de sucesso
- Foram realizados vários experimentos para verificar a sincronização entre resultados offline e online durante o desenvolvimento
- Foi observada forte consistência tanto em mudanças positivas quanto negativas de desempenho
- Capacidade de depuração local
- Há suporte de depuração para observar o fluxo dos casos de teste por cada componente do pipeline de busca
- Isso é muito mais eficiente do que a abordagem anterior de depuração, que dependia de logs de produção
- Próximos planos
- Expandir o dataset
- Adicionar recursos mais realistas, como grafo de colaboração
- Melhorar as ferramentas
- Reforçar o tooling para que engenheiros possam gerar dados sintéticos customizados conforme a necessidade
- Maximizar o uso de IA generativa
- Seguir aproveitando as possibilidades oferecidas por dados sintéticos para evoluir as ferramentas de busca da Canva e entregar a melhor experiência possível à comunidade
Ainda não há comentários.