L'apprentissage automatique pour la sécurité du chat vocal
Notre mission est de rassembler un milliard de personnes dans l'optimisme et la civilité, et pour ce faire, il faut que nous parvenions à créer un véritable sentiment d'unité. Dans les mondes immersifs en 3D comme dans le monde réel, il y a peu de choses qui offrent un meilleur sentiment d'authenticité que la voix humaine lorsqu'il s'agit de nouer des liens. Mais comment offrir des communications vocales immersives à grande échelle sur Roblox tout en faisant en sorte que notre communauté reste sûre et civile ?
Dans cet article, nous allons expliquer comment nous avons créé notre système de sécurité en temps réel, un modèle d'apprentissage automatique de bout en bout capable de traiter plusieurs millions de minutes d'activité vocale par jour et d'y détecter les infractions à nos politiques avec plus d'exactitude que la modération humaine. Les résultats générés par ce système sont envoyés à un autre modèle qui détermine les mesures à prendre. Ce deuxième modèle envoie des notifications aux personnes ayant enfreint nos politiques, en commençant par des avertissements, et en passant à des actions plus sévères si les mauvais comportements se poursuivent.
La création de ce système de bout en bout était un objectif audacieux, étant donné que nous sommes les premiers du secteur à proposer des fonctionnalités de sécurité multilingues et presque en temps réel pour le chat vocal. Les messages vocaux sont classifiés en fonction des mots prononcés et de la sonorité, ce qui inclut le volume et le ton. C'est pour nous une joie de raconter comment nous avons créé ce système, alors qu'il n'existait auparavant aucun processus automatique, aucune donnée étiquetée et aucun modèle ; nous sommes véritablement partis de zéro.
Nous sommes également heureux de partager notre premier modèle en open source, qui fait partie de notre système de sécurité de chat vocal. En rendant ce modèle disponible pour un usage commercial, nous espérons améliorer la détection des infractions dans l'ensemble du secteur et accélérer le développement de nouveaux modèles d'apprentissage automatique pour la sécurité du chat vocal. Ce modèle en open source est une première version ; nous y avons depuis ajouté d'importantes améliorations, que nous sommes en train de tester.
Surmonter le manque de données
Nous nous sommes lancés dans ce projet d'apprentissage automatique comme beaucoup d'entreprises : en jaugeant la qualité des données disponibles pour entraîner et évaluer nos modèles. L'idéal aurait été d'avoir des échantillons de voix avec des étiquettes de catégorisation de haute qualité. Cependant, au départ, nous n'avions presque pas de données réelles à grande échelle étiquetées par des humains. Pour entraîner un modèle de détection vocale de haute qualité avec une approche supervisée, nous devions rassembler des milliers d'heures de données audio étiquetées, ce qui aurait pris des années et aurait coûté bien trop cher.
Au lieu d'utiliser des milliers d'heures de données étiquetées manuellement, nous avons mis au point plusieurs méthodes plus efficaces :
-
Des données étiquetées automatiquement pour l'entraînement. Au lieu de perdre notre temps à chercher des données parfaitement étiquetées par des humains, nous avons opté pour un grand volume d'extraits vocaux étiquetés automatiquement en guise de données d'entraînement. Le fait d'utiliser une grande quantité de données étiquetées automatiquement avec une faible supervision nous a permis d'obtenir des modèles d'entraînement capables de fonctionner malgré les imperfections au niveau de l'étiquetage. Si cette approche a pu fonctionner, c'est parce que nous avions accès à d'excellentes ressources de reconnaissance vocale en open source, et que nous avions des années d'expérience en ce qui concerne l'utilisation de l'apprentissage automatique pour la détection des infractions aux normes de la communauté dans les communications textuelles. L'étiquetage automatique nous a permis d'obtenir la quantité de données d'entraînement dont nous avions besoin en quelques semaines au lieu de plusieurs années.
-
Des données étiquetées par des humains pour l'entraînement. Nos données étiquetées automatiquement étaient suffisamment bonnes pour entraîner un modèle très performant, mais nous ne pouvions pas leur faire confiance pour la validation finale. Mais alors, comment avons-nous obtenu suffisamment de données étiquetées par des humains pour l'évaluation ? La réponse est simple : nous ne disposions pas de suffisamment de temps pour rassembler des données étiquetées par des humains pour l'entraînement, mais nous pouvions le faire pour l'évaluation du modèle grâce à nos modérateurs, qui classaient déjà les signalements des utilisateurs de Roblox pour prendre manuellement les mesures appropriées. Ainsi, nous avons pu disposer à la fois de grandes quantités de données d'entraînement étiquetées automatiquement pour produire un modèle performant, et de données d'évaluation étiquetées par des humains, ces dernières étant moins nombreuses, mais suffisantes pour nous convaincre que notre modèle fonctionnait.
Nous manquions également de données pour les catégories d'infractions peu fréquentes, comme les références à la drogue, à l'alcool ou à l'automutilation. Afin de résoudre ce problème, nous avons rassemblé plusieurs de ces catégories rares dans la catégorie « Autres ». Ainsi, notre modèle final pouvait identifier les catégories « Grossièretés », « Harcèlement », « Rencontres » et « Autres ». Pour cette dernière, nous allons continuer de chercher davantage d'exemples, ce qui nous permettra de mieux la comprendre afin d'améliorer la sécurité et la civilité des discussions sur Roblox. Une fois que nous aurons suffisamment de données, les sous-catégories qui composent « Autres » deviendront elles aussi des catégories à part entière.
L'étiquetage automatique des données d'entraînement
Nous avons mis en place un pipeline entièrement automatique pour un étiquetage de qualité des données de chat vocal. Il se décompose en trois étapes :
-
Segmentation de l'audio. La première étape consiste à diviser les extraits audio en segments plus courts en détectant les silences entre les phrases. Cela nous permet d'identifier et d'étiqueter plus facilement le contenu qui ne respecte pas nos politiques.
-
Transcription de l'audio. La deuxième étape consiste à transcrire ces segments audio à l'aide d'un modèle de reconnaissance vocale automatique. Nous utilisons des modèles de reconnaissance vocale disponibles en open source.
-
Classification du texte. La dernière étape consiste à classifier le texte transcrit à l'aide de notre filtre textuel. Ce filtre est conçu pour détecter et bloquer le contenu inapproprié dans les communications textuelles. Nous l'avons adapté de sorte qu'il puisse fonctionner avec les données audio transcrites, ce qui nous permet d'étiqueter nos segments audio avec des catégories d'infractions et des mots-clés. Le filtre textuel est un modèle d'ensemble entraîné sur des données d'infractions aux politiques étiquetées par des humains et faisant appel à un modèle DistilBERT étendu ainsi qu'à des règles d'expressions régulières.
Il faut souligner que ce pipeline n'a été utilisé que pour générer les données d'entraînement de notre modèle final. Vous vous demandez peut-être pourquoi nous avons pris la peine d'entraîner un modèle alors que nous disposions déjà d'un pipeline qui générait les étiquettes dont nous avions besoin. C'est pour des raisons d'efficacité : nous avons besoin de quelque chose d'extrêmement précis et très rapide. À l'échelle de Roblox, l'utilisation de la reconnaissance vocale sur toutes les communications serait bien trop lente et gourmande en ressources. En revanche, un modèle d'apprentissage automatique compact entraîné sur ces données et spécifiquement conçu pour détecter les infractions dans les communications vocales est tout aussi précis tout en étant bien plus rapide, ce qui permet de l'utiliser à l'échelle de Roblox.
L'étiquetage automatique à grande échelle
Dans la plupart des projets d'intelligence artificielle, le mécanisme qui permet d'obtenir des données d'entraînement de qualité est un système d'apprentissage automatique interne, qui doit être créé en partant de zéro. Pour ce projet, nous devions mettre au point un système d'étiquetage automatique capable de fonctionner simultanément sur des milliers de processeurs ou de cartes graphiques, et ce 24 heures sur 24, 7 jours sur 7. Nous avons mis en place un système de génération de données d'entraînement avec des milliers de cœurs de processeur, capable de traiter automatiquement les données audio reçues tout en générant les étiquettes. Pour un rendement optimal, il fallait que ce système fonctionne à la perfection ; le moindre dysfonctionnement, la moindre erreur pouvait nous faire perdre des jours, voire des semaines.
Voici une vue d'ensemble de l'architecture qui nous a permis d'étiqueter automatiquement des dizaines de milliers d'heures d'audio en seulement quelques semaines. Ce qu'il faut retenir, c'est que le fait d'investir dans des files d'attente aux étapes cruciales du processus nous a permis d'éviter les congestions en répartissant les flux de travail sur un grand nombre de machines. Ces flux ont traité les étapes de segmentation, de transcription et de classification mentionnées dans la section précédente.
L'architecture d'apprentissage automatique
Il fallait que notre modèle présente une latence très faible, avec des inférences en temps réel ou presque. Cela nous a poussés à nous tourner vers des architectures qui analysent directement l'audio à l'état brut pour lui attribuer un score. Nous avons utilisé des systèmes de type transformeur, qui fonctionnent très bien pour résumer les séquences et offrent de bons résultats pour le traitement du langage naturel et la modélisation audio. La difficulté était de trouver l'équilibre entre complexité et efficacité : il fallait prendre en charge plusieurs langues et leurs différents accents, obtenir des résultats fiables malgré les bruits de fond ou la mauvaise qualité de l'audio, tout en tenant compte de nos exigences en matière de latence.
La sélection du modèle
Dès le départ, il a fallu déterminer la taille de la fenêtre de contexte nécessaire pour entraîner les modèles transformeurs. Nous avons examiné l'histogramme de la longueur des messages de chat vocal sur plusieurs jours, et nous en avons conclu qu'une fenêtre de 15 secondes offrait une efficacité acceptable tout en fournissant suffisamment de contexte pour la classification. Nous utilisons la catégorie « Pas d'infraction » lorsqu'aucune infraction à nos politiques n'a été détectée. Étant donné qu'un seul extrait audio peut contenir plusieurs types d'infractions, il s'agit d'une tâche à étiquettes multiples, et non d'un problème de classification conventionnel. Nous avons ajusté l'ensemble du réseau pour cette tâche, y compris les couches supérieures, avec une perte d'entropie croisée binaire.
Histogramme montrant que 75 % des messages de chat vocal durent moins de 15 secondes
Nous avons évalué plusieurs modèles d'encodage en open source populaires dans la communauté de la recherche audio, pour ne retenir finalement que WavLM et Whisper. Notre première expérience a consisté à ajuster un modèle WavLM base+ entraîné au préalable avec 2 300 heures de données vocales Roblox étiquetées automatiquement, et d'évaluer les résultats de classification sur deux ensembles de données issus du monde réel. Nous avons obtenu des résultats encourageants (voir la section « L'évaluation du modèle »), mais les latences dépassaient les seuils que nous avions fixés. Nous avons ensuite mis en place une version personnalisée de l'architecture WavLM avec moins de transformeurs, et entraîné un modèle de bout en bout sur 7 000 heures de données vocales Roblox étiquetées automatiquement. Ce modèle produit de bonnes classifications pour les conversations, et est plus compact que le modèle ajusté. Pour notre dernier candidat, nous avons fait appel à la distillation, avec un encodeur Whisper comme enseignant et l'architecture de bout en bout WavLM comme élève. Lorsque nous avons entraîné ce modèle sur 4 000 heures de données audio, nous avons obtenu des résultats similaires à ceux du modèle ajusté, mais avec des améliorations significatives au niveau de la latence et de la taille. L'organigramme ci-dessous résume les paramètres de ces trois expériences. Nous continuons de travailler sur les stratégies d'échantillonnage des données et d'évaluation ainsi que sur les hyperparamètres à mesure que nous améliorons les modèles multilingues de classification de sécurité du chat vocal.
Taille de l'ensemble de données |
Taille du modèle |
Latence d'inférence par seconde d'input |
Facteur temps réel |
|
WavLM ajusté |
2 300 h |
96 Mn paramètres |
102 ms |
9.80 |
De bout en bout entraîné |
7 071 h |
52 Mn paramètres |
83 ms |
12.08 |
Distillé |
4 080 h |
48 Mn paramètres |
50 ms |
19.95 |
L'optimisation du modèle
Nous avons employé les méthodes standard du secteur, notamment en quantifiant certains transformeurs afin d'obtenir une accélération de plus de 25 % sans compromettre la qualité. En combinant des données MFCC aux réseaux de neurones convolutifs déjà présents lors de la phase d'extraction, nous avons pu accélérer les inférences de plus de 40 %. De plus, en ajoutant un modèle de détection d'activité vocale pour le traitement préliminaire, nous avons considérablement amélioré la robustesse de l'ensemble du pipeline, notamment pour les microphones de mauvaise qualité. La détection d'activité vocale nous a permis de filtrer les bruits et d'appliquer notre pipeline de sécurité uniquement dans les cas où des paroles humaines sont détectées dans l'audio, ce qui a réduit le volume des inférences d'environ 10 % tout en améliorant la qualité des données fournies au système.
L'évaluation du modèle
Nous avons utilisé un grand nombre d'ensembles de données et d'indicateurs pour nos évaluations ; pour l'heure, voyons comment notre système de classification vocale s'en est sorti sur un ensemble de données en anglais contenant un grand nombre d'infractions (le genre de données que l'on trouverait dans les signalements des utilisateurs). Ces données avaient été intégralement étiquetées par nos modérateurs humains. Lorsque nous avons combiné toutes les infractions (grossièretés, harcèlement, rencontres, etc.) dans une seule catégorie binaire, le score de la zone se trouvant sous la courbe précision-rappel était supérieur à 0,95, comme vous pouvez le voir ci-dessous. Cela signifie que pour cet ensemble de données, le système détecte la grande majorité des infractions sans signaler trop de messages ne présentant aucune infraction.
Cependant, ces bons résultats ne s'appliquent pas nécessairement à toutes les situations. Par exemple, pour les notifications sur les infractions à nos politiques, le système évalue tous les messages vocaux de Roblox, dans lesquels la proportion d'infractions est moindre, et génère alors un plus grand nombre de faux positifs. Pour les signalements, le système évalue uniquement les messages qui ont été signalés, la proportion d'infractions est donc plus importante. Néanmoins, nous avons trouvé ces résultats suffisamment encourageants pour tester ce système sur la plateforme (à une échelle raisonnable) en envoyant des notifications aux utilisateurs au sujet des infractions à nos politiques dans leurs communications vocales. Les résultats de ces expériences ont dépassé de très loin nos attentes.
La suite
En tirant parti de notre propre infrastructure de processeurs et en mettant soigneusement au point un pipeline pensé pour une grande échelle, nous avons pu déployer ce modèle sur l'ensemble de Roblox. Aux heures de pointe, il traite plus de 2 000 requêtes par seconde, dont la plupart ne comportent aucune infraction. Nous avons observé une baisse significative des infractions sur la plateforme grâce aux avertissements envoyés par le modèle. Depuis le lancement de ce système, nous avons constaté une baisse de 15,3 % des signalements d'infractions graves sur le chat vocal, et une réduction de 11,4 % du nombre d'infractions par minute de conversation.
Nous sommes en train d'entraîner nos modèles avec des données multilingues, ce qui nous permettra d'utiliser un seul système pour traiter plusieurs langues, y compris lorsqu'elles sont mélangées. Nous étudions également de nouvelles architectures multitâches afin de pouvoir identifier certains mots-clés sans reconnaissance vocale, au lieu de simplement classifier les messages. La détection des mots-clés s'ajoutera aux étiquettes d'infractions pour améliorer la classification et nous permettra de donner davantage de contexte aux utilisateurs tout en prenant des mesures.
Les recherches dont il est question dans cet article ont été réalisées par un grand nombre d'équipes au sein de Roblox. C'était un bel exemple de notre valeur de respect de la communauté, et de collaboration pluridisciplinaire.