El contenido de este sitio se ha traducido mediante inteligencia artificial (IA) o tecnología de traducción automática, y puede contener errores.

Skip to content

Implementación de aprendizaje automático para la seguridad de la voz

Nuestra misión es conectar a mil millones de personas con optimismo y civismo, lo que nos exigirá ayudar a las personas a sentirse verdaderamente unidas entre sí. En los mundos inmersivos en 3D, al igual que en el mundo físico, pocas cosas son más auténticas o poderosas que la voz humana a la hora de forjar amistades y vínculos duraderos. Pero, ¿cómo ampliamos la inmersión y la riqueza de la comunicación por voz en Roblox sin dejar de mantener nuestra comunidad segura y civilizada?

En este blog, compartiremos cómo hemos dado vida a «Seguridad en tiempo real», un modelo de aprendizaje automático (ML) de extremo a extremo —que opera a una escala de millones de minutos de actividad de voz al día— que detecta infracciones de las políticas en la comunicación de voz con mayor precisión que la moderación humana. Los resultados de este sistema se introducen en otro modelo, que determina las consecuencias adecuadas. El modelo de consecuencias activa notificaciones para las personas que han infringido nuestras políticas, inicialmente con advertencias y luego con medidas más drásticas si el comportamiento persiste.

Este sistema integral de Real-time Safety era un objetivo audaz, ya que somos uno de los primeros del sector en ofrecer a los usuarios funciones de seguridad de voz multilingües y casi en tiempo real. La clasificación de la voz depende tanto del estilo del audio —incluidos el volumen y el tono— como del contenido, incluidas las palabras pronunciadas. Nos complace compartir cómo desarrollamos este sistema partiendo prácticamente de cero en cuanto a automatización —es decir, sin datos etiquetados ni modelos— y pasando de cero a 60 en materia de seguridad de voz en tiempo real.

Y, por último, nos complace compartir nuestro primer modelo de código abierto, que es uno de nuestros modelos de seguridad de voz. Al abrir el código fuente de este modelo y ponerlo a disposición para uso comercial, esperamos proporcionar una referencia para el sector en la detección de infracciones de las políticas que pueda acelerar el desarrollo de nuevos modelos de aprendizaje automático para la seguridad de voz. Este modelo de código abierto es nuestra primera versión, y desde entonces hemos realizado mejoras significativas que actualmente estamos probando.

Superar la escasez de datos

Comenzamos nuestros esfuerzos en el aprendizaje automático como hacen muchas empresas: evaluando la calidad de los datos disponibles para entrenar y evaluar nuestros modelos. La combinación ideal de datos incluiría la expresión de voz junto con una categorización de seguridad etiquetada de alta calidad para esa expresión. Sin embargo, cuando empezamos, casi no disponíamos de datos del mundo real etiquetados por personas a gran escala. Para entrenar un modelo de detección de seguridad de voz de alta calidad utilizando un enfoque supervisado, necesitábamos miles de horas de audio de datos etiquetados para cada idioma que admitíamos, lo que habría llevado años recopilar y habría requerido una cantidad prohibitiva de recursos y tiempo.

En lugar de depender de miles de horas de datos etiquetados manualmente, desarrollamos varios métodos más eficientes:

  • Datos etiquetados por máquinas para el entrenamiento. En lugar de quedarnos estancados en la búsqueda de datos perfectos etiquetados manualmente para el entrenamiento, optamos por un gran volumen de datos de entrenamiento procedentes del etiquetado automático de expresiones de voz. El uso de grandes cantidades de datos etiquetados por máquinas con una supervisión ligera generó modelos de entrenamiento que resultaban robustos ante cierto ruido en las etiquetas. Las claves para que este enfoque funcionara fueron el acceso a excelentes bibliotecas de código abierto de conversión de voz a texto y años de experiencia en el uso del aprendizaje automático para detectar infracciones de las Normas de la comunidad en las comunicaciones textuales de los usuarios. Este enfoque de etiquetado automático nos permitió etiquetar el volumen de datos de entrenamiento que necesitábamos para nuestros modelos en semanas, en lugar de años.
  • Datos etiquetados por humanos para la evaluación. Aunque los datos etiquetados por máquinas, de alta calidad pero imperfectos, eran suficientes para entrenar un modelo de alto rendimiento, no confiábamos en las etiquetas de las máquinas para realizar la validación final del modelo resultante. La siguiente pregunta, entonces, era dónde podríamos obtener suficientes datos etiquetados por humanos para la evaluación. Por suerte, aunque era imposible recopilar a tiempo datos etiquetados por personas suficientes para el entrenamiento, sí fue posible recopilar los necesarios para la evaluación de nuestro modelo utilizando a nuestros moderadores internos, que ya se encargaban de clasificar las denuncias de abuso de los usuarios de Roblox para aplicar sanciones manualmente. Esto nos permitió disfrutar de lo mejor de ambos mundos: datos de entrenamiento etiquetados por máquinas que eran lo suficientemente buenos y abundantes como para producir un modelo de alto rendimiento, y datos de evaluación etiquetados por humanos que, aunque de volumen mucho menor, eran más que suficientes para darnos la confianza de que el modelo realmente funcionaba.

Otra área en la que nos enfrentamos a la escasez de datos fue en las categorías de infracción de políticas con muy baja prevalencia, como las referencias a drogas y alcohol o a las autolesiones. Para abordar este problema, combinamos varias categorías de baja prevalencia en una categoría denominada «otros». Como resultado, nuestro modelo final pudo identificar las categorías de lenguaje soez, acoso, discriminación, citas y «otros». Con el fin de comprender estas categorías «otras», para poder proteger mejor a nuestra comunidad y garantizar un discurso seguro y civilizado en Roblox, seguiremos supervisándolas en busca de más ejemplos. Con el tiempo, las subcategorías de «otras» también se convertirán en categorías con nombre a medida que el número de ejemplos de entrenamiento en esas subcategorías alcance una masa crítica.

Proceso de etiquetado automático para datos de entrenamiento

Hemos diseñado un proceso de etiquetado automático para extraer etiquetas de alta calidad a partir de secuencias de chat de voz. Nuestro proceso consta de tres etapas:

  1. División del audio en fragmentos. La primera etapa del proceso consiste en dividir el audio en fragmentos, o segmentos más cortos, siempre que detectemos periodos de silencio entre frases. Esto nos permite identificar y etiquetar el contenido que incumple las políticas de forma más eficiente.
  2. Transcripción de audio. La segunda etapa del proceso consiste en transcribir estos fragmentos de audio a texto utilizando un modelo de reconocimiento automático de voz (ASR). Utilizamos modelos ASR de código abierto disponibles públicamente.
  3. Clasificación de texto. La etapa final del proceso consiste en clasificar el texto transcrito utilizando nuestro filtro de texto interno. Este filtro está diseñado para detectar y bloquear contenido inapropiado en las comunicaciones basadas en texto. Hemos adaptado el filtro para que funcione con los datos de audio transcritos, lo que nos permite etiquetar los fragmentos de audio con clases de infracción de las políticas y palabras clave. El filtro de texto es un modelo conjunto entrenado con datos de texto que infringen las políticas y que han sido etiquetados por humanos, compuesto por un modelo DistilBERT ampliado y reglas de expresiones regulares.

Es importante señalar que este proceso solo se utilizó para generar datos de entrenamiento para nuestro modelo de producción definitivo. Sin embargo, quizá te preguntes: ¿por qué entrenar un modelo si ya existe un proceso que genera las etiquetas que buscamos? La respuesta es la eficiencia: necesitamos ser increíblemente precisos, en mucho menos tiempo. A la escala de Roblox, invocar el ASR para transcribir todas las comunicaciones de voz sería prohibitivamente lento y requeriría demasiados recursos. Sin embargo, un modelo de aprendizaje automático compacto entrenado a partir de estos datos, diseñado específicamente para detectar infracciones de las políticas en las comunicaciones de voz sin realizar una transcripción completa, es igual de preciso, pero significativamente más rápido y puede utilizarse a la escala de Roblox.

Ampliación del proceso de etiquetado automático

En la mayoría de las grandes iniciativas de IA, el mecanismo para obtener datos de entrenamiento de calidad es en sí mismo un sistema de ML de producción, que debe crearse desde cero. Para este proyecto, necesitábamos desarrollar nuestro proceso de etiquetado automático como un sistema de producción de primer nivel con disponibilidad 24/7 y la capacidad de escalar a miles de CPU simultáneas o un número equivalente de GPU. Implementamos un clúster de datos de entrenamiento con miles de núcleos de CPU que procesan automáticamente los flujos de audio entrantes en paralelo para generar etiquetas automáticas. Este sistema tenía que funcionar a la perfección para lograr el máximo rendimiento, y cualquier error o tiempo de inactividad podría suponer días o semanas de tiempo perdido en la generación de datos de entrenamiento.

A continuación se ofrece una descripción general de alto nivel de la arquitectura que soportó la escala que necesitábamos para etiquetar automáticamente decenas de miles de horas de audio en cuestión de apenas unas semanas. La conclusión clave aquí fue que invertir en colas en puntos clave de nuestro procesamiento nos permitió eliminar los cuellos de botella mediante el escalado horizontal de los subprocesos de trabajo a través de muchas máquinas. Estos subprocesos de trabajo realizaron los pasos de división de fragmentos de audio, transcripción de audio y clasificación de texto mencionados en la sección anterior.

Arquitectura de ML

Un requisito fundamental para nuestra búsqueda de modelos era la baja latencia, es decir, velocidades casi en tiempo real para la inferencia del modelo, lo que nos llevó a arquitecturas que operan directamente sobre el audio sin procesar y devuelven una puntuación. Utilizamos arquitecturas basadas en Transformer, que funcionan muy bien para el resumen de secuencias y tienen mucho éxito en la industria para el procesamiento del lenguaje natural (NLP) y el modelado de audio. Nuestro reto consistía en encontrar un punto óptimo que equilibrara la complejidad con la inferencia de baja latencia, es decir, que gestionara múltiples idiomas y acentos, fuera robusto frente al ruido de fondo y ofreciera calidad de audio, al tiempo que cumplía con las restricciones de latencia de nuestro producto.

Selección del modelo

Una cuestión de diseño inmediata fue determinar el tamaño de la ventana de contexto necesaria para entrenar los modelos Transformer. Analizamos el histograma de la longitud de las expresiones verbales en los datos de chat de voz a lo largo de varios días de uso y determinamos que una ventana de 15 segundos ofrecía el equilibrio entre la latencia y el contexto suficiente necesario para la clasificación. Utilizamos «sin infracción» como categoría para detectar la ausencia de infracciones de las políticas. Dado que un solo clip de audio puede contener múltiples tipos de infracciones, la tarea se convierte inherentemente en una clasificación multietiqueta, en lugar de un problema convencional de clasificación multiclase. Ajustamos toda la red, incluidas las capas principales para esta tarea, con la pérdida de entropía cruzada binaria (BCE). 

Leyenda: Histograma de expresiones de voz a partir de datos de chat, que muestra que el 75 % de las expresiones duran menos de 15 segundos.

Evaluamos varios modelos de codificadores de código abierto populares de la comunidad de investigación de audio y redujimos nuestras opciones a WavLM y Whisper. Nuestro primer experimento consistió en ajustar el modelo WavLM base+ preentrenado con 2300 horas de datos de voz etiquetados automáticamente por Roblox y evaluar los resultados de clasificación en dos conjuntos de datos de evaluación del mundo real. Obtuvimos resultados de clasificación muy alentadores (véase «Evaluación del modelo», más abajo), pero descubrimos que la latencia era mayor que nuestros umbrales para la implementación en producción. Como continuación, implementamos una versión personalizada de la arquitectura WavLM con menos capas Transformer y entrenamos un modelo de extremo a extremo desde cero con 7000 horas de datos de voz etiquetados automáticamente por Roblox. Este modelo produce clasificaciones robustas en entornos conversacionales y era más compacto en comparación con el modelo ajustado. Nuestro modelo candidato final utilizó una configuración de destilación «alumno-profesor», con un codificador Whisper como red «profesor» y la arquitectura de extremo a extremo WavLM como red «alumno». Cuando lo entrenamos con 4000 horas de audio, observamos precisiones de clasificación similares a las del modelo ajustado, pero con una mejora sustancial en la latencia y un tamaño de modelo reducido. La imagen siguiente resume los parámetros del modelo para los tres experimentos descritos anteriormente. Seguimos iterando las estrategias de muestreo de datos, las estrategias de evaluación y los hiperparámetros del modelo a medida que ampliamos los modelos para la clasificación de seguridad de voz multilingüe.

Tamaño del conjunto de datos

Tamaño del modelo

Latencia de inferencia/segundo de entrada

Factor de tiempo real 

WavLM ajustado

2300 h

96 millones de parámetros

102 ms

9,80

Entrenado de extremo a extremo

7071 h

52 millones de parámetros

83 ms

12,08

Destilado

4080 h 

48 millones de parámetros

50 ms

19,95

Optimización del modelo 

Empleamos métodos estándar del sector, incluida la cuantificación de capas seleccionadas del Transformer para lograr una aceleración de más del 25 % sin comprometer la calidad. Cambiar la etapa de extracción de características a entradas MFCC combinadas con redes neuronales convolucionales (CNN) en lugar de solo CNN también dio lugar a aceleraciones superiores al 40 % durante la inferencia. Además, la introducción de un modelo de detección de actividad vocal (VAD) como paso de preprocesamiento aumentó significativamente la robustez del proceso global, especialmente para usuarios con micrófonos ruidosos. El VAD nos permitió filtrar el ruido y aplicar nuestro proceso de seguridad solo cuando detectamos voz humana en el audio, lo que redujo el volumen total de inferencia en aproximadamente un 10 % y proporcionó entradas de mayor calidad a nuestro sistema. 

Evaluación del modelo

Aunque utilizamos muchos conjuntos de datos y métricas diferentes para la evaluación, podemos compartir el rendimiento de nuestro clasificador de voz en un conjunto de datos en inglés con una alta prevalencia de infracciones de las políticas (como las que encontraríamos en los informes de abuso de voz de los usuarios). Este conjunto de datos fue etiquetado al 100 % por nuestros moderadores. Al combinar todos los tipos de infracciones (palabras malsonantes, acoso, citas, etc.) en una única categoría binaria, observamos una puntuación PR-AUC (área bajo la curva de precisión-recuerdo) superior a 0,95, como se muestra a continuación. Esto significa que, en este conjunto de datos de evaluación, el clasificador suele detectar la gran mayoría de las infracciones sin marcar erróneamente demasiadas situaciones que no lo son.

Sin embargo, los buenos resultados de la evaluación anteriores no se traducen necesariamente de forma directa en todos los casos de uso. Por ejemplo, en el caso de nuestras notificaciones sobre comentarios que infringen las políticas, el clasificador evalúa todos los chats de voz de Roblox y detecta una menor prevalencia de infracciones, por lo que hay una mayor probabilidad de obtener resultados falsos positivos. En el caso de las denuncias por abuso de voz, el clasificador evalúa únicamente los comentarios que han sido señalados por posibles infracciones, por lo que la prevalencia es mayor. Aun así, los resultados anteriores fueron lo suficientemente alentadores como para que iniciáramos experimentos con el clasificador en producción (con umbrales conservadores) para notificar a los usuarios sobre su lenguaje que infringe las políticas. Los resultados de estos experimentos superaron con creces nuestras expectativas.

¿Qué viene ahora?

Al aprovechar nuestra propia infraestructura de CPU y diseñar cuidadosamente el proceso para una escala a gran escala, pudimos implementar con éxito este modelo a la escala de Roblox. Durante las horas pico, el modelo atiende con éxito más de 2000 solicitudes por segundo (la mayoría de las cuales no contienen infracciones). También hemos observado una reducción significativa de los comportamientos que infringen las políticas en la plataforma gracias al uso del modelo para notificar a los usuarios sobre el lenguaje que incumple las políticas. En concreto, desde nuestro lanzamiento inicial, estamos observando una reducción del 15,3 % en las denuncias de abuso verbal de gravedad alta y una disminución del 11,4 % en las infracciones por minuto de conversación.

Estamos ampliando nuestros modelos con datos de entrenamiento multilingües, lo que nos permite implementar un único modelo de clasificación en toda la plataforma para gestionar varios idiomas, así como la mezcla de idiomas. También estamos explorando nuevas arquitecturas multitarea para identificar palabras clave seleccionadas, además del objetivo de clasificación, sin recurrir al reconocimiento de voz automático (ASR) completo. La detección de estas palabras clave, además de las etiquetas de infracción, mejora la calidad de la clasificación y ofrece la oportunidad de proporcionar contexto a los usuarios al aplicar las consecuencias.

La investigación aquí descrita fue un esfuerzo conjunto de muchos equipos de Roblox. Fue una gran demostración de nuestro valor fundamental de respetar a la comunidad y una excelente colaboración entre múltiples disciplinas.