Implementação de ML para segurança de voz

Nossa missão é conectar um bilhão de pessoas com otimismo e civilidade, o que exigirá que ajudemos as pessoas a se sentirem verdadeiramente unidas umas às outras. Em mundos imersivos 3D, assim como no mundo físico, poucas coisas são mais autênticas ou poderosas do que a voz humana para forjar amizades e conexões duradouras. Mas como podemos ampliar a imersão e a riqueza da comunicação por voz no Roblox, mantendo nossa comunidade segura e civilizada?
Neste blog, compartilharemos como criamos o Real-time Safety, um modelo de aprendizado de máquina (ML) de ponta a ponta — operando em uma escala de milhões de minutos de atividade de voz por dia — que detecta violações de política na comunicação por voz com mais precisão do que a moderação humana. Os resultados desse sistema são alimentados em outro modelo, que determina as consequências apropriadas. O modelo de consequências aciona notificações para as pessoas que violaram nossas políticas, inicialmente com advertências e, em seguida, com ações mais drásticas se o comportamento persistir.
Esse sistema de Segurança em Tempo Real de ponta a ponta foi uma meta audaciosa, já que somos uma das primeiras empresas do setor a oferecer aos usuários recursos de segurança de voz multilíngues e quase em tempo real. A classificação de voz depende tanto do estilo do áudio, incluindo volume e tom, quanto do conteúdo, incluindo as palavras faladas. Estamos entusiasmados em compartilhar como desenvolvemos esse sistema partindo de praticamente nenhuma automação prévia — efetivamente zero dados rotulados e nenhum modelo —, passando de zero a 60 em segurança de voz em tempo real.
E, finalmente, estamos entusiasmados em compartilhar nosso primeiro modelo de código aberto, que é um dos nossos modelos de segurança de voz. Ao tornar esse modelo de código aberto e disponibilizá-lo para uso comercial, esperamos fornecer uma base de referência para o setor na detecção de violações de políticas, o que pode acelerar o desenvolvimento de novos modelos de ML para segurança de voz. Esse modelo de código aberto é nossa primeira versão, e desde então fizemos melhorias significativas que estamos testando atualmente.
Superando a escassez de dados
Iniciamos nossos esforços de ML como muitas empresas fazem — avaliando a qualidade dos dados disponíveis para treinar e avaliar nossos modelos. O conjunto de dados ideal incluiria a expressão de voz juntamente com uma categorização de segurança rotulada de alta qualidade para essa expressão. No entanto, quando começamos, quase não tínhamos dados do mundo real rotulados por humanos em grande escala. Para treinar um modelo de detecção de segurança de voz de alta qualidade usando uma abordagem supervisionada, precisávamos de milhares de horas de áudio de dados rotulados para cada idioma que oferecíamos, o que levaria anos para ser coletado e exigiria recursos e tempo excessivos.
Em vez de depender de milhares de horas de dados rotulados manualmente, desenvolvemos vários métodos mais eficientes:
- Dados rotulados por máquina para treinamento. Em vez de ficarmos presos à busca por dados perfeitamente rotulados manualmente para treinamento, optamos por um grande volume de dados de treinamento provenientes da rotulagem automática de expressões de voz. O uso de grandes quantidades de dados rotulados por máquina com supervisão fraca gerou modelos de treinamento que eram robustos a algum ruído nos rótulos. Os fatores-chave para que essa abordagem funcionasse foram o acesso a excelentes bibliotecas de código aberto de conversão de voz em texto e anos de experiência no uso de ML para detectar violações das Normas da Comunidade nas comunicações textuais das pessoas. Essa abordagem de rotulagem automática nos permitiu rotular o volume de dados de treinamento necessário para nossos modelos em semanas, em vez de anos.
- Dados rotulados por humanos para avaliação. Embora dados rotulados por máquinas de alta qualidade, mas ainda imperfeitos, fossem bons o suficiente para treinar um modelo de alto desempenho, não confiávamos nos rótulos automáticos para realizar a validação final do modelo resultante. A próxima questão, então, era onde poderíamos obter dados rotulados por humanos suficientes para avaliação. Felizmente, embora fosse impossível coletar dados rotulados por humanos suficientes para o treinamento em tempo hábil, foi possível coletar o suficiente para a avaliação do nosso modelo usando nossos moderadores internos, que já estavam classificando denúncias de abuso feitas por usuários no Roblox para aplicar punições manualmente. Isso nos permitiu aproveitar o melhor dos dois mundos: dados de treinamento rotulados por máquinas que eram bons e abundantes o suficiente para produzir um modelo de alto desempenho, e dados de avaliação rotulados por humanos que eram muito menores em volume, mas mais do que suficientes para nos dar confiança de que o modelo realmente funcionava.
Outra área em que enfrentamos escassez de dados foi nas categorias de violação de políticas com prevalência muito baixa, como referências a drogas e álcool ou automutilação. Para resolver essa questão, combinamos várias categorias de baixa prevalência em uma categoria “outros”. Como resultado, nosso modelo final conseguiu identificar as categorias de palavrões, bullying, discriminação, namoro e “outros”. Para entender essas categorias “outros”, de modo a proteger melhor nossa comunidade e garantir um discurso seguro e civilizado no Roblox, continuaremos monitorando-as em busca de mais exemplos. Com o tempo, as subcategorias em “outros” também se tornarão categorias nomeadas, à medida que o número de exemplos de treinamento nessas subcategorias atingir uma massa crítica.
Pipeline de rotulagem automática para dados de treinamento
Projetamos um pipeline de rotulagem automática totalmente automatizado para extrair rótulos de alta qualidade de sequências de chat de voz. Nosso pipeline consiste em três etapas:
- Divisão de trechos de áudio. A primeira etapa do pipeline envolve dividir o áudio em trechos, ou segmentos mais curtos, sempre que detectamos períodos de silêncio entre as frases. Isso nos permite identificar e rotular conteúdos que violam as políticas de forma mais eficiente.
- Transcrição de áudio. A segunda etapa do pipeline consiste em transcrever esses trechos de áudio em texto usando um modelo de reconhecimento automático de fala (ASR). Utilizamos modelos ASR de código aberto disponíveis publicamente.
- Classificação de texto. A etapa final do pipeline envolve a classificação do texto transcrito usando nosso filtro de texto interno. Esse filtro foi projetado para detectar e bloquear conteúdo impróprio em comunicações baseadas em texto. Adaptamos o filtro para funcionar com os dados de áudio transcritos, o que nos permite rotular os trechos de áudio com classes de violação de política e palavras-chave. O filtro de texto é um modelo de conjunto treinado com dados de texto que violam políticas rotulados por humanos, composto por um modelo DistilBERT estendido e regras de expressão regular.

É importante observar que esse pipeline foi usado apenas para gerar dados de treinamento para nosso modelo de produção final. Você pode se perguntar, no entanto, por que treinar um modelo se já existe um pipeline que gera os rótulos que estamos procurando? A resposta é eficiência — precisamos ser extremamente precisos, em muito menos tempo. Na escala da Roblox, invocar o ASR para transcrever todas as comunicações de voz seria proibitivamente lento e consumiria muitos recursos. No entanto, um modelo compacto de ML treinado a partir desses dados, projetado especificamente para detectar violações de política nas comunicações de voz sem fazer uma transcrição completa, é igualmente preciso, mas significativamente mais rápido e pode ser usado na escala da Roblox.
Dimensionando o pipeline de rotulagem automática
Na maioria das grandes iniciativas de IA, o mecanismo para obter dados de treinamento de qualidade é, em si, um sistema de ML de produção, que precisa ser criado do zero. Para este projeto, precisávamos desenvolver nosso pipeline de rotulagem automática como um sistema de produção de primeira linha, com disponibilidade 24 horas por dia, 7 dias por semana, e capacidade de escalar para milhares de CPUs simultâneas ou um número equivalente de GPUs. Implementamos um cluster de dados de treinamento com milhares de núcleos de CPU que processam automaticamente os fluxos de áudio recebidos em paralelo para gerar rótulos automáticos. Esse sistema precisava funcionar sem falhas para obter o máximo rendimento, e qualquer erro ou tempo de inatividade poderia resultar em dias ou semanas de perda de tempo na geração de dados de treinamento.
Abaixo está uma visão geral de alto nível da arquitetura que suportou a escala necessária para rotular automaticamente dezenas de milhares de horas de áudio em questão de apenas algumas semanas. A principal lição aqui foi que investir em filas em pontos-chave do nosso processamento nos permitiu eliminar gargalos ao escalar horizontalmente threads de trabalho em várias máquinas. Essas threads de trabalho realizaram as etapas de divisão de trechos de áudio, transcrição de áudio e classificação de texto mencionadas na seção anterior.

Arquitetura de ML
Um requisito central para nossa pesquisa de modelos era a baixa latência, ou seja, velocidades quase em tempo real para a inferência do modelo, o que nos levou a arquiteturas que operam diretamente sobre o áudio bruto e retornam uma pontuação. Utilizamos arquiteturas baseadas em Transformer, que funcionam muito bem para resumo de sequências e são muito bem-sucedidas na indústria para processamento de linguagem natural (NLP) e modelagem de áudio. Nosso desafio foi encontrar um ponto ideal que equilibrasse complexidade com inferência de baixa latência — ou seja, lidar com vários idiomas e sotaques, robustez contra ruído de fundo e qualidade de áudio, ao mesmo tempo em que satisfazíamos as restrições de latência do nosso produto.
Seleção do modelo
Uma questão imediata de design foi determinar o tamanho da janela de contexto necessária para treinar os modelos Transformer. Analisamos o histograma da duração das falas nos dados de chat de voz ao longo de vários dias de uso e determinamos que uma janela de 15 segundos oferecia o equilíbrio entre latência e contexto suficiente necessário para a classificação. Usamos “sem violação” como categoria para detectar a ausência de violações de política. Considerando que um único clipe de áudio pode conter vários tipos de violações, a tarefa se torna inerentemente multirrotulada, em vez de um problema convencional de classificação multiclasse. Ajustamos toda a rede, incluindo as camadas principais para essa tarefa, com perda de entropia cruzada binária (BCE).

Legenda: Histograma de expressões de voz a partir de dados de chat, mostrando que 75% das expressões têm menos de 15 segundos.
Avaliamos vários modelos de codificadores de código aberto populares da comunidade de pesquisa de áudio e reduzimos nossas opções ao WavLM e ao Whisper. Nossa primeira experiência consistiu em ajustar o WavLM base+ pré-treinado com 2.300 horas de dados de voz rotulados por máquina do Roblox e avaliar os resultados da classificação em dois conjuntos de dados de avaliação do mundo real. Obtivemos resultados de classificação muito animadores (veja Avaliação do Modelo, abaixo), mas descobrimos que a latência era maior do que nossos limites para implantação em produção. Como continuação, implementamos uma versão personalizada da arquitetura WavLM com menos camadas Transformer e treinamos um modelo de ponta a ponta do zero com 7.000 horas de dados de voz rotulados por máquina do Roblox. Esse modelo produz classificações robustas em contextos conversacionais e era mais compacto em comparação com o modelo ajustado. Nosso modelo candidato final utilizou uma configuração de destilação aluno-professor, com um codificador Whisper como rede professora e a arquitetura de ponta a ponta WavLM como rede aluno. Quando o treinamos com 4.000 horas de áudio, observamos precisões de classificação semelhantes às do modelo ajustado, mas com uma melhoria substancial na latência e redução no tamanho do modelo. A imagem abaixo resume os parâmetros do modelo para os três experimentos descritos acima. Continuamos a iterar as estratégias de amostragem de dados, estratégias de avaliação e hiperparâmetros do modelo à medida que expandimos os modelos para a classificação de segurança de voz multilíngue.

Tamanho do conjunto de dados | Tamanho do modelo | Latência de inferência/segundo de entrada | Fator de tempo real | |
WavLM ajustado | 2300h | 96 milhões de parâmetros | 102 ms | 9,80 |
Treinado de ponta a ponta | 7.071 h | 52 milhões de parâmetros | 83 ms | 12,08 |
Destilado | 4080h | 48 milhões de parâmetros | 50 ms | 19,95 |
Otimização do modelo
Empregamos métodos padrão da indústria, incluindo a quantização de camadas selecionadas do Transformer para alcançar um aumento de velocidade superior a 25% sem comprometer a qualidade. Mudar a etapa de extração de características para entradas MFCC combinadas com redes neurais convolucionais (CNNs), em vez de apenas CNNs, também resultou em aumentos de velocidade superiores a 40% durante a inferência. Além disso, a introdução de um modelo de detecção de atividade de voz (VAD) como etapa de pré-processamento aumentou significativamente a robustez do pipeline geral, especialmente para usuários com microfones com ruído. O VAD nos permitiu filtrar o ruído e aplicar nosso pipeline de segurança apenas quando detectamos fala humana no áudio, o que reduziu o volume geral de inferência em aproximadamente 10% e forneceu entradas de maior qualidade ao nosso sistema.
Avaliação do modelo
Embora tenhamos usado muitos conjuntos de dados e métricas diferentes para avaliação, podemos compartilhar o desempenho do nosso classificador de voz em um conjunto de dados em inglês com alta prevalência de violações de política (como as que encontraríamos em denúncias de abuso de voz feitas por usuários). Esse conjunto de dados foi 100% rotulado manualmente por nossos moderadores. Quando combinamos todos os tipos de violação (palavrões, bullying, namoro, etc.) em uma única categoria binária, observamos uma pontuação PR-AUC (área sob a curva de precisão-recall) superior a 0,95, conforme mostrado abaixo. Isso significa que, nesse conjunto de dados de avaliação, o classificador normalmente consegue detectar a grande maioria das violações sem sinalizar erroneamente muitas situações que não constituem violação.

Os resultados positivos da avaliação acima, no entanto, não se aplicam necessariamente a todos os casos de uso. Por exemplo, no caso de nossas notificações sobre discursos que violam as políticas, o classificador está avaliando todos os chats de voz do Roblox e encontrando uma prevalência menor de violações, e há uma chance maior de resultados falsos positivos. No caso de denúncias de abuso de voz, o classificador está avaliando apenas discursos que foram sinalizados por possíveis violações, portanto a prevalência é maior. Ainda assim, os resultados acima foram encorajadores o suficiente para iniciarmos experimentos com o classificador em produção (com limites conservadores) para notificar os usuários sobre linguagem que viola as políticas. Os resultados desses experimentos superaram amplamente nossas expectativas.
O que vem a seguir?
Ao aproveitar nossa própria infraestrutura de CPU e projetar cuidadosamente o pipeline para grande escala, conseguimos implantar com sucesso esse modelo na escala da Roblox. Durante os horários de pico, o modelo atende com sucesso a mais de 2.000 solicitações por segundo (a maioria das quais não contém violações). Também observamos uma redução significativa no comportamento que viola as políticas na plataforma devido ao uso do modelo para notificar as pessoas sobre linguagem que viola as políticas. Em particular, desde nossa implementação inicial, estamos observando uma redução de 15,3% nas denúncias de abuso verbal de nível grave e uma diminuição de 11,4% nas violações por minuto de fala.
Estamos ampliando nossos modelos com dados de treinamento multilíngues, o que nos permite implantar um único modelo de classificação em toda a plataforma para lidar com vários idiomas, bem como com a mistura de idiomas. Também estamos explorando novas arquiteturas multitarefa para identificar palavras-chave selecionadas, além do objetivo de classificação, sem recorrer ao ASR completo. A detecção dessas palavras-chave, além dos rótulos de violação, melhora a qualidade da classificação e oferece uma oportunidade de fornecer contexto às pessoas ao aplicar consequências.
A pesquisa descrita aqui foi um esforço conjunto de várias equipes da Roblox. Foi uma excelente demonstração do nosso valor fundamental de respeitar a comunidade e uma ótima colaboração entre várias disciplinas.


