O conteúdo deste site foi traduzido usando inteligência artificial (IA) ou tecnologia de tradução automática e pode conter erros.

Skip to content

Além da selfie: como o sistema de verificação de idade do Roblox ajuda a manter as verificações de idade atualizadas

Um sistema modular e multimodal de aprendizado de máquina comportamental que prioriza a segurança

O sistema de estimativa de idade facial da Roblox já processou 338 milhões de registros de verificação de idade para ajudar os usuários da Roblox a desbloquear o chat adequado à idade e acessar jogos apropriados para sua faixa etária na plataforma. A verificação inicial de idade é necessária, mas a garantia da idade não termina com a selfie. As contas podem ser compartilhadas ou repassadas a um irmão mais novo. Indivíduos mal-intencionados podem tentar testar nossas defesas. Para levar a verificação de idade além de um sinal pontual, criamos uma camada de aprendizado de máquina (ML) de alto rendimento que avalia se o comportamento contínuo de uma conta ainda corresponde à sua idade estimada ao longo do tempo. Nosso design modular no nível dos recursos permite atualizações eficientes do modelo e rápida adaptação a padrões comportamentais em constante mudança. 

Operar de forma confiável nosso fluxo de trabalho de verificação de idade de ponta a ponta é tanto um desafio de sistemas distribuídos quanto um desafio de ML. A estimativa de idade em si é um problema complexo de ML, pois os limites de idade não são divisões comportamentais rígidas. Os pais podem desfrutar das mesmas experiências que seus filhos, e a linguagem varia entre culturas, contextos e comunidades, bem como em função da idade. Nenhum sinal comportamental isolado consegue capturar de forma confiável padrões comportamentais sutis que mudam ao longo do tempo e sob pressão adversária. Mesmo nossos rótulos de referência mais sólidos provêm de uma população selecionada e podem conter viés.

Operar na escala da Roblox acrescenta complexidade adicional. Em cada ciclo diário de inferência, reunimos sinais comportamentais de toda a plataforma, executamos submodelos na pilha de computação mais adequada para cada carga de trabalho e combinamos seus resultados em uma estimativa calibrada. Nossos modelos variam de classificadores tradicionais de aprendizado de máquina a transformadores multilíngues com mais de 300 milhões de parâmetros. O sistema processa cerca de dois bilhões de registros no nível de conta por dia, enquanto o treinamento se baseia em quase 30 milhões de rótulos de idade de alta confiança.

Construir todo o sistema internamente nos dá a transparência e o controle de que precisamos para analisar todos os recursos e sinais em termos de privacidade, o que é um requisito central de design. Também podemos usar sinais específicos do Roblox que capturam como uma conta é utilizada ao longo do tempo — um contexto longitudinal que um estimador externo independente não teria por si só. Isso também nos dá controle sobre todo o ciclo de vida do aprendizado de máquina. Podemos combinar modalidades à medida que elas se tornam disponíveis e calibrar os resultados para os fluxos de trabalho de segurança do Roblox, ao mesmo tempo em que monitoramos, controlamos e atualizamos componentes individuais conforme o comportamento muda.

Escolhendo os sinais certos para prever a idade

Diferentes faixas etárias navegam no Roblox de maneiras distintas em termos de padrões de jogo, comunicação e interação com a plataforma. Para capturar a diversidade de comportamentos, dividimos nossas entradas em famílias distintas de sinais:

  • Contexto social: padrões agregados no círculo social de um usuário, incluindo com quem ele se conecta e com que frequência interage.
  • Engajamento na experiência: padrões agregados que vão além do que os usuários jogam, captando quando jogam, por quanto tempo permanecem e como seu engajamento muda ao longo do tempo.
  • Atividade da conta e da plataforma: sinais agregados de uso da plataforma e do ciclo de vida, como tempo de posse da conta, frequência de atividade e comportamento no nível da sessão.
  • Padrões de comunicação: resumos derivados de modelos sobre o uso da linguagem correlacionado à idade, incluindo como os padrões de comunicação variam de acordo com o contexto e o tempo.
  • Representações de usuários aprendidas: representações de nível superior que capturam padrões de uso mais amplos. Trabalhamos em estreita colaboração com nossa equipe de ML de Descoberta e Personalização; as mesmas representações ricas que prevêem com o que um usuário pode se envolver a seguir podem ser retreinadas para se tornarem preditivas de faixas etárias amplas.

Cada família de sinais recebe um modelo que se adapta à forma de seus dados. Sinais agregados esparsos e de alta dimensão são tratados por árvores de decisão com reforço de gradiente (por exemplo, classificadores XGBoost); o texto é tratado por um codificador transformador multilíngue ajustado com precisão (mmBERT); e as representações de usuários alimentam algumas redes neurais compactas (Perceptron Multicamadas). 

Cada submodelo prevê o mesmo alvo: uma distribuição de probabilidade sobre um conjunto de faixas etárias. Um meta-aprendizado com reforço de gradiente combina então esses vetores de probabilidade na estimativa final calibrada. 

Escolhemos deliberadamente essa abordagem de fusão no nível de decisão em vez de um modelo monolítico no nível de características, por questões de modularidade, velocidade e explicabilidade. Tornar o sistema modular nos permite adicionar, retreinar ou retirar um submodelo sem precisar reconstruir todo o sistema. Isso também nos permite responder mais rapidamente à medida que os padrões de comportamento mudam devido à evolução natural ou à pressão adversária. A camada de fusão lê a saída mais recente promovida por cada submodelo para que possa usar os melhores sinais disponíveis e se adaptar de forma suave quando um deles estiver ausente ou atrasado. Como cada modalidade entra como uma entrada distinta, podemos rastrear quais famílias de sinais estão impulsionando mudanças nas decisões e aplicar calibração e controles de qualidade antes que as saídas sejam consumidas a jusante.

Imponho a calibração na camada de fusão porque, em um sistema de segurança, a previsibilidade supera a precisão pura. Calibramos os modelos para que eles nos forneçam índices de confiança nos quais possamos confiar. Dessa forma, se uma ação a jusante for causar um impacto significativo no usuário, podemos exigir evidências mais sólidas e maior confiança antes de tomar uma decisão.

Viés de seleção nos rótulos

Nossos rótulos de maior confiança vêm de usuários que concluíram uma verificação rigorosa de idade. Esses rótulos são úteis, mas não constituem uma amostra aleatória dos usuários do Roblox. Para um sistema que pode afetar o acesso dos usuários, a representatividade é parte essencial do objetivo de treinamento. 

A população rotulada não é a população-alvo. Os usuários que concluem verificações de idade mais rigorosas diferem sistematicamente da população em geral. Um modelo ingênuo treinado nesse grupo corre o risco de aprender quem opta por concluir o processo tanto quanto aprende sobre a idade. Para reduzir esse viés de seleção, reponderalamos os dados de treinamento e avaliação para que a amostra rotulada reflita melhor a população que pretendemos avaliar. 

Trabalhamos de forma multifuncional com a equipe de pesquisa de usuários, utilizando resultados agregados de pesquisas para informar as populações-alvo usadas na ponderação. A partir daí, utilizamos técnicas como ponderação de propensão inversa e ajuste proporcional iterativo — ou raking — para alinhar a amostra ponderada em várias dimensões ao mesmo tempo, em vez de corrigir um fator isoladamente. 

Nem toda fonte de alta confiança produz um exemplo de treinamento utilizável. A confiabilidade de um rótulo depende dos eventos de verificação por trás dele. Alguns eventos podem conter sinais que os tornam inadequados para o treinamento do modelo, como padrões de verificação incomuns ou preocupações com a integridade da conta. 

Nós nos esforçamos para limpar os rótulos por meio de filtragem com foco na integridade ou abordagens de identificação de erros de rótulo, como o Confident Learning, antes do treinamento, a fim de remover exemplos que pareçam fora da distribuição para a modelagem comportamental. Experimentos iniciais mostram que esse tipo de limpeza ajuda a evitar o sobreajuste do modelo e proporciona ganhos consistentes de desempenho.

Treinamento, inferência e prevenção de distorção na escala da Roblox

A inferência precisa ser executada com frequência suficiente para manter os sinais atualizados, mas a cadência do treinamento pode variar de acordo com a família de sinais. Escolhemos cronogramas de retreinamento com base na deriva de características, na estabilidade do modelo e no custo do modelo. Um sinal que muda ou se degrada rapidamente pode ser retreinado com mais frequência; um modelo mais pesado, com desempenho que evolui mais lentamente, pode ser retreinado com menos frequência ou sob demanda. 

A pilha de computação se adapta à forma da carga de trabalho. Usamos o Apache Spark para transformações estruturadas em grande escala, a estrutura Ray para cargas de trabalho com suporte de GPU e workers de produção para processamento de sinais em tempo real. 

Na escala da Roblox, reconstruir o histórico completo de cada conta diariamente também não seria prático. Nossa estrutura interna de processamento de dados mantém históricos limitados e contínuos para sinais de alto volume e materializa transformações dispendiosas em etapas. Isso nos permite processar e agregar milhões de registros no nível da conta todos os dias, ao mesmo tempo em que escalamos grandes expansões, junções e agregações de características de forma independente. Esse projeto de produção híbrido nos proporciona integração direta com nosso data warehouse, execução reproduzível entre os componentes do modelo e acesso a computação acelerada onde é necessário.

Para ajudar a manter a estabilidade em nossa escala, aplicamos duas decisões de projeto rigorosas em nossos pipelines de características:

  • Armazenamento de características derivadas: sempre que possível, armazenamos características derivadas em vez de fluxos de atividades brutos. Mantemos o sinal necessário para a modelagem, e não todo o histórico por trás dele.
  • Contratos de dados unificados: os mesmos contratos de dados alimentam tanto o treinamento quanto a inferência. Isso reduz um dos modos de falha mais comuns em sistemas de ML: o desvio entre o que foi treinado e o que é servido.

Utilizamos mecanismos de controle em dois pontos do ciclo de vida de produção. Primeiro, a promoção do modelo é separada do treinamento do modelo. Um modelo candidato deve passar por verificações de segurança antes de se tornar elegível para a inferência em produção. Se um candidato falhar em nossas verificações de segurança, o pipeline bloqueia a promoção e continuamos servindo a versão válida mais recente que foi promovida. 

Em segundo lugar, a saída da inferência é controlada antes de ser publicada a jusante. Verificações automatizadas procuram regressões de qualidade e grandes mudanças na distribuição das previsões. Se uma verificação falhar, a etapa de publicação é bloqueada. Em um sistema de ML vinculado a fluxos de trabalho de segurança voltados para o usuário, “não fazer nada hoje” costuma ser um modo de falha mais seguro do que enviar uma mudança inexplicável na distribuição.

Avaliando o sistema 

Para um sistema como este, um único número de precisão não é muito significativo. Avaliamos a qualidade do modelo considerando a qualidade da classificação, a calibração, a estabilidade ao longo do tempo e o comportamento próximo a limites importantes entre faixas etárias. Também consideramos a representatividade dos dados de avaliação como parte do problema de medição, pois uma melhoria agregada só é útil se refletir a população à qual o sistema se destina a atender.

O modelo fusionado atinge uma precisão média superior a 0,9 nesses dados de avaliação ponderados e reservados. Suas estimativas de alta confiança também se mantêm consistentes dia após dia. Mais de 99% permanecem na mesma faixa etária ampla em dias consecutivos. 

Também comparamos o modelo com dados de referência independentes produzidos por revisores humanos treinados por meio de nossos fluxos de trabalho de Confiança e Segurança. Em alta confiança, a estimativa da faixa etária do modelo coincide com o rótulo de consenso humano para adultos em mais de 80% das vezes. 

A avaliação offline é apenas uma camada. Em produção, o comportamento do usuário muda com a sazonalidade, lançamentos de produtos e pressões adversas. É por isso que combinamos métricas de avaliação do modelo com o monitoramento contínuo das distribuições de previsão, desvio e estabilidade antes que os resultados sejam utilizados em etapas posteriores. Também monitoramos os resultados de verificações de idade de acompanhamento, para que o feedback de produção possa informar a confiabilidade do modelo e indicar onde os limites ou caminhos de revisão devem ser ajustados.

Próximos passos

Ter esse sistema desenvolvido internamente nos permite aproveitar sinais específicos da Roblox com segurança, operar com extremo rigor e iterar continuamente.

Daqui para frente, estamos focados em otimizar nossos submodelos, inferência e medição. Levamos cada camada adiante, mantendo o foco em nossos princípios operacionais de modularidade, calibração, privacidade e diretrizes de produção.