음성 안전을 위한 머신러닝(ML) 도입

우리의 사명은 10억 명의 사람들을 낙관주의와 예의 바른 태도로 연결하는 것이며, 이를 위해서는 사람들이 진정으로 서로 하나됨을 느낄 수 있도록 도와야 합니다. 3D 몰입형 세계에서는 현실 세계와 마찬가지로, 지속적인 우정과 유대감을 형성하는 데 있어 인간의 목소리만큼 진정성 있고 강력한 것은 거의 없습니다. 하지만 커뮤니티의 안전과 예의를 지키면서 Roblox에서 음성 커뮤니케이션의 몰입감과 풍부함을 어떻게 확장할 수 있을까요?
이 블로그에서는 인간 운영자보다 더 정확하게 음성 통신 내 정책 위반을 감지하는, 하루 수백만 분 규모의 음성 활동을 처리하는 종단간 머신러닝(ML) 모델인 '실시간 안전(Real-time Safety)'을 어떻게 구현했는지 공유하겠습니다. 이 시스템의 출력은 또 다른 모델로 전달되어 적절한 제재 조치를 결정합니다. 처벌 결정 모델은 정책을 위반한 사용자에게 알림을 발송하며, 처음에는 경고로 시작하고 해당 행위가 지속될 경우 더 강력한 조치를 취합니다.
이 엔드투엔드 실시간 안전 시스템은 업계 최초로 사용자에게 다국어, 준실시간 음성 안전 기능을 제공하는 기업 중 하나로서, 매우 대담한 목표였습니다. 음성 분류는 음량과 어조를 포함한 오디오 스타일과, 발화된 단어를 포함한 콘텐츠 모두에 의존합니다. 우리는 사실상 자동화 기반이 전혀 없던 상태—라벨링된 데이터가 사실상 제로였고 모델도 없던 상황—에서 실시간 음성 안전 기능을 위해 제로에서 60까지 도약하며 이 시스템을 어떻게 개발했는지 공유하게 되어 기쁩니다.
마지막으로, 저희의 음성 안전 모델 중 하나인 첫 번째 오픈소스 모델을 소개하게 되어 기쁩니다. 이 모델을 오픈소스로 공개하고 상업적 사용을 허용함으로써, 음성 안전을 위한 새로운 머신러닝 모델 개발을 가속화할 수 있는 정책 위반 탐지 분야의 업계 기준을 제공하고자 합니다. 이 오픈소스 모델은 초기 버전이며, 이후 상당한 개선을 거쳐 현재 테스트 중입니다.
데이터 부족 문제 극복
저희는 많은 기업과 마찬가지로, 모델 훈련 및 평가를 위한 기존 데이터의 품질을 평가하는 것부터 머신러닝 작업을 시작했습니다. 이상적인 데이터셋 조합은 음성 발화 내용과 해당 발화에 대한 고품질의 라벨링된 안전성 분류 정보를 함께 포함하는 것입니다. 하지만 초기에는 사람이 직접 라벨링한 대규모 실세계 데이터가 거의 없었습니다. 지도 학습 방식을 통해 고품질의 음성 안전성 탐지 모델을 훈련하려면 지원 언어별로 수천 시간 분량의 라벨링된 오디오 데이터가 필요했는데, 이를 수집하는 데만 수년이 걸렸을 뿐만 아니라 막대한 자원과 시간이 소요되었을 것입니다.
수천 시간에 달하는 수동 라벨링 데이터에 의존하는 대신, 우리는 다음과 같은 몇 가지 더 효율적인 방법을 개발했습니다:
- 훈련을 위한 기계 라벨링 데이터. 훈련을 위해 완벽한 수동 라벨링 데이터를 추구하는 데 매달리기보다는, 음성 발화를 기계로 라벨링하여 대량의 훈련 데이터를 확보하는 방식을 선택했습니다. 약한 감독 하에 대량의 기계 라벨링 데이터를 활용함으로써, 라벨에 포함된 일부 노이즈에도 견고한 훈련 모델을 생성할 수 있었습니다. 이 접근 방식이 성공할 수 있었던 핵심은 우수한 오픈소스 음성-텍스트 변환 라이브러리에 대한 접근성과, 사람들의 텍스트 커뮤니케이션에서 커뮤니티 가이드라인 위반을 탐지하기 위해 머신러닝을 활용해 온 수년간의 경험이었습니다. 이러한 기계 라벨링 접근 방식을 통해 우리는 모델에 필요한 방대한 양의 훈련 데이터를 수년이 아닌 몇 주 만에 라벨링할 수 있었습니다.
- 평가를 위한 인간 라벨링 데이터. 고품질이지만 완벽하지는 않은 기계 라벨링 데이터만으로도 고성능 모델을 훈련시키는 데는 충분했지만, 결과 모델의 최종 검증 단계에서는 기계 라벨을 신뢰할 수 없었습니다. 따라서 다음 과제는 평가를 위해 충분한 인간 라벨링 데이터를 어디서 확보할 수 있을지였습니다. 다행히도, 훈련을 위한 충분한 수작업 라벨링 데이터를 제때 수집하는 것은 불가능했지만, 이미 로블록스 사용자들의 악용 신고를 분류하여 수동으로 제재를 가하고 있던 사내 관리자들을 활용하여 모델 평가에 필요한 충분한 데이터를 수집할 수 있었습니다. 이를 통해 우리는 두 마리 토끼를 모두 잡을 수 있었습니다. 즉, 고성능 모델을 생성하기에 충분하고 양도 풍부한 기계 라벨링 훈련 데이터와, 양은 훨씬 적지만 모델이 실제로 작동한다는 확신을 갖기에 충분한 인간 라벨링 평가 데이터를 확보할 수 있었던 것입니다.
데이터 부족 문제를 겪은 또 다른 분야는 마약 및 알코올 언급이나 자해와 같이 발생 빈도가 매우 낮은 정책 위반 범주였습니다. 이 문제를 해결하기 위해 우리는 여러 저발생 빈도 범주를 '기타' 범주로 통합했습니다. 그 결과, 최종 모델은 욕설, 괴롭힘, 차별, 데이트, 그리고 '기타' 범주를 식별할 수 있게 되었습니다. 로블록스 커뮤니티를 더 잘 보호하고 안전하며 건전한 대화를 보장하기 위해, 우리는 이러한 '기타' 범주를 이해하고 더 많은 사례를 확보하기 위해 지속적으로 모니터링할 것입니다. 시간이 지남에 따라 '기타' 내의 하위 범주들도 해당 하위 범주의 훈련 사례 수가 일정 수준에 도달하면 명명된 범주로 전환될 것입니다.
훈련 데이터용 기계 라벨링 파이프라인
우리는 음성 채팅 시퀀스에서 고품질 라벨을 추출하기 위해 완전 자동화된 기계 라벨링 파이프라인을 설계했습니다. 이 파이프라인은 다음 세 단계로 구성됩니다:
- 오디오 청크 분할. 파이프라인의 첫 번째 단계는 문장 사이의 침묵 구간을 감지하는 지점에서 오디오를 청크, 즉 더 짧은 세그먼트로 분할하는 것입니다. 이를 통해 정책 위반 콘텐츠를 더 효율적으로 식별하고 라벨링할 수 있습니다.
- 오디오 전사. 파이프라인의 두 번째 단계는 자동 음성 인식(ASR) 모델을 사용하여 이러한 오디오 청크를 텍스트로 변환하는 것입니다. 우리는 공개된 오픈 소스 ASR 모델을 사용합니다.
- 텍스트 분류. 파이프라인의 마지막 단계에서는 자체 개발한 텍스트 필터를 사용하여 전사된 텍스트를 분류합니다. 이 필터는 텍스트 기반 커뮤니케이션에서 부적절한 콘텐츠를 탐지하고 차단하도록 설계되었습니다. 우리는 이 필터를 전사된 오디오 데이터와 연동되도록 개조하여, 오디오 청취 단위에 정책 위반 분류 및 키워드를 라벨링할 수 있게 했습니다. 텍스트 필터는 확장된 DistilBERT 모델과 정규 표현식 규칙으로 구성된, 사람이 직접 라벨링한 정책 위반 텍스트 데이터로 훈련된 앙상블 모델입니다.

이 파이프라인은 최종 생산 모델의 훈련 데이터를 생성하는 용도로만 사용되었다는 점을 유의해야 합니다. 그렇다면 우리가 원하는 라벨을 생성하는 파이프라인이 이미 존재하는데, 굳이 모델을 훈련시키는 이유가 무엇일까요? 그 해답은 바로 효율성입니다. 우리는 훨씬 더 짧은 시간 내에 놀라울 정도로 정확한 결과를 얻어야 하기 때문입니다. Roblox 규모의 환경에서 모든 음성 통신을 전사하기 위해 ASR을 호출하는 것은 속도가 너무 느리고 리소스를 지나치게 많이 소모할 것입니다. 하지만 이 데이터로 훈련된 소형 ML 모델은 전체 전사 과정 없이도 음성 통신 내 정책 위반 사항을 감지하도록 특별히 설계되어, 동일한 정확도를 유지하면서도 훨씬 더 빠르며 Roblox 규모의 환경에서 사용할 수 있습니다.
머신 라벨링 파이프라인 확장
대부분의 대규모 AI 프로젝트에서 양질의 훈련 데이터를 확보하는 메커니즘은 그 자체로 프로덕션 ML 시스템이며, 이를 처음부터 구축해야 합니다. 이 프로젝트에서는 24시간 가동되며 수천 개의 동시 CPU 또는 이에 상응하는 수의 GPU로 확장 가능한, 본격적인 운영 시스템으로서 머신 라벨링 파이프라인을 개발해야 했습니다. 우리는 수천 개의 CPU 코어를 갖춘 훈련 데이터 클러스터를 구현하여, 유입되는 오디오 스트림을 자동으로 병렬 처리하여 머신 라벨을 생성하도록 했습니다. 이 시스템은 최대 처리량을 위해 완벽하게 작동해야 했으며, 어떠한 오류나 가동 중단이라도 발생하면 훈련 데이터 생성 과정에서 며칠 또는 몇 주간의 시간이 손실될 수 있었습니다.
다음은 불과 몇 주 만에 수만 시간 분량의 오디오에 기계 라벨을 부여하는 데 필요한 확장성을 지원한 아키텍처의 개요입니다. 여기서 얻은 핵심 교훈은 처리 과정의 주요 지점에 큐를 도입함으로써, 여러 머신에 걸쳐 워커 스레드를 수평적으로 확장하여 병목 현상을 제거할 수 있었다는 점입니다. 이러한 워커 스레드는 앞 섹션에서 언급한 오디오 청크 분할, 오디오 전사, 텍스트 분류 단계를 수행했습니다.

ML 아키텍처
모델 선정의 핵심 요건은 낮은 지연 시간, 즉 모델 추론에 있어 거의 실시간에 가까운 속도였으며, 이로 인해 원시 오디오를 직접 처리하여 점수를 반환하는 아키텍처를 채택하게 되었습니다. 저희는 트랜스포머 기반 아키텍처를 사용하는데, 이는 시퀀스 요약에 매우 효과적이며 자연어 처리(NLP) 및 오디오 모델링 분야에서 업계에서 큰 성공을 거두고 있습니다. 우리의 과제는 복잡성과 저지연 추론 사이의 최적의 균형을 찾는 것이었습니다. 즉, 다국어 및 다양한 억양 처리, 배경 소음에 대한 견고성, 오디오 품질을 확보하면서도 제품의 지연 시간 제약을 충족해야 했습니다.
모델 선정
가장 먼저 해결해야 할 설계 과제는 트랜스포머 모델 훈련에 필요한 컨텍스트 윈도우의 크기를 결정하는 것이었습니다. 우리는 며칠간의 음성 채팅 데이터에서 발화 길이의 히스토그램을 분석한 결과, 15초 윈도우가 지연 시간과 분류에 필요한 충분한 컨텍스트 사이에서 적절한 균형을 제공한다는 것을 확인했습니다. 정책 위반이 없는 경우를 감지하기 위해 "위반 없음(no-violation)"을 범주로 사용합니다. 단일 오디오 클립에 여러 유형의 위반이 포함될 수 있다는 점을 고려할 때, 이 작업은 본질적으로 기존의 다중 클래스 분류 문제가 아닌 다중 레이블(multilabel) 문제가 됩니다. 우리는 이 작업을 위해 헤드 레이어를 포함한 전체 네트워크를 이진 교차 엔트로피(BCE) 손실 함수를 사용하여 미세 조정했습니다.

설명: 채팅 데이터에서 추출한 음성 발화 히스토그램으로, 발화의 75%가 15초 미만임을 보여줍니다.
우리는 오디오 연구 커뮤니티에서 널리 사용되는 여러 오픈소스 인코더 모델을 평가한 후, WavLM과 Whisper로 후보를 좁혔습니다. 첫 번째 실험에서는 사전 훈련된 WavLM base+ 모델을 2,300시간 분량의 Roblox 기계 라벨링 음성 데이터로 미세 조정하고, 두 가지 실제 평가 데이터셋에서 분류 결과를 평가했습니다. 매우 고무적인 분류 결과를 얻었으나(아래 '모델 평가' 참조), 지연 시간이 실제 배포를 위한 허용 기준보다 길다는 점을 확인했습니다. 이에 따라 트랜스포머 레이어 수를 줄인 WavLM 아키텍처의 맞춤형 버전을 구현하고, 7,000시간 분량의 Roblox 기계 라벨링 음성 데이터로 엔드투엔드 모델을 처음부터 훈련시켰습니다. 이 모델은 대화 환경에서 견고한 분류 결과를 산출하며, 미세 조정된 모델에 비해 더 간결했습니다. 최종 모델 후보는 학생-교사 증류(student-teacher distillation) 설정을 사용했으며, Whisper 인코더를 교사 네트워크로, WavLM 종단간 아키텍처를 학생 네트워크로 활용했습니다. 4,000시간 분량의 오디오 데이터로 훈련한 결과, 미세 조정된 모델과 유사한 분류 정확도를 보였으나 지연 시간은 크게 개선되었고 모델 크기는 축소되었습니다. 아래 이미지는 앞서 설명한 세 가지 실험의 모델 매개변수를 요약한 것입니다. 다국어 음성 안전 분류를 위해 모델을 확장해 나가는 과정에서 데이터 샘플링 전략, 평가 전략, 모델 하이퍼파라미터를 지속적으로 개선해 나갈 예정입니다.

데이터셋 크기 | 모델 크기 | 추론 지연 시간/입력 초당 | 실시간 처리 계수 | |
미세 조정된 WavLM | 2300시간 | 96M 파라미터 | 102 ms | 9.80 |
종단 간 훈련 | 7071시간 | 5,200만 개 매개변수 | 83 ms | 12.08 |
정제 | 4080시간 | 4800만 개 매개변수 | 50 ms | 19.95 |
모델 최적화
우리는 품질을 저하시키지 않으면서 25% 이상의 속도 향상을 달성하기 위해 선택된 트랜스포머 레이어를 양자화하는 등 업계 표준 기법을 적용했습니다. 또한 특징 추출 단계를 순수 CNN 대신 컨볼루션 신경망(CNN)과 결합된 MFCC 입력으로 전환함으로써 추론 시 40% 이상의 속도 향상을 이끌어냈습니다. 또한, 전처리 단계로 음성 활동 감지(VAD) 모델을 도입함으로써 전체 파이프라인의 견고성이 크게 향상되었으며, 특히 마이크 잡음이 심한 사용자의 경우 그 효과가 두드러졌습니다. VAD를 통해 잡음을 걸러내고 오디오에서 사람의 음성이 감지될 때만 안전성 파이프라인을 적용할 수 있었으며, 이로 인해 전체 추론 양이 약 10% 감소하고 시스템에 더 높은 품질의 입력 데이터가 제공되었습니다.
모델 평가
평가를 위해 다양한 데이터셋과 지표를 사용했지만, 정책 위반 발생률이 높은 영어 데이터셋(예: 사용자의 음성 악용 신고에서 발견되는 유형)에서 음성 분류기가 어떻게 수행되었는지 공유할 수 있습니다. 이 데이터셋은 당사의 운영진이 100% 수동으로 라벨링했습니다. 모든 위반 유형(욕설, 괴롭힘, 데이트 요청 등)을 단일 이진 범주로 통합했을 때, 아래와 같이 PR-AUC(정밀도-재현율 곡선 아래 면적) 점수가 0.95를 상회하는 것을 확인했습니다. 이는 해당 평가 데이터셋에서 분류기가 비위반 사례를 과도하게 오탐지하지 않으면서도 대부분의 위반 사례를 효과적으로 포착할 수 있음을 의미합니다.

그러나 위의 우수한 평가 결과가 모든 사용 사례에 그대로 적용되는 것은 아닙니다. 예를 들어, 정책 위반 발언에 대한 알림의 경우, 분류기는 모든 Roblox 음성 채팅을 평가하여 위반 사례의 발생 빈도가 낮게 나타나며, 오탐지 가능성이 더 높습니다. 반면 음성 학대 신고의 경우, 분류기는 잠재적 위반으로 신고된 발언만 평가하므로 위반 발생 빈도가 더 높습니다. 그럼에도 불구하고, 위의 결과는 정책 위반 언어에 대해 사용자에게 알리기 위해 (보수적인 임계값을 적용하여) 실제 운영 환경에서 분류기를 활용한 실험을 시작하기에 충분히 고무적이었습니다. 이러한 실험 결과는 우리의 기대를 훨씬 뛰어넘었습니다.
다음 단계는?
자체 CPU 인프라를 활용하고 대규모 처리를 위해 파이프라인을 신중하게 설계함으로써, 우리는 이 모델을 Roblox 규모에 성공적으로 배포할 수 있었습니다. 피크 시간대에는 이 모델이 초당 2,000건 이상의 요청을 성공적으로 처리하고 있으며(이 중 대부분은 위반 사항이 없습니다). 또한 정책 위반 언어에 대해 사용자에게 알리는 데 이 모델을 활용함으로써, 플랫폼 내 정책 위반 행위가 현저히 감소한 것을 확인했습니다. 특히 초기 도입 이후, 심각한 수준의 언어 폭력 신고 건수가 15.3% 감소했으며, 1분당 발언 건수 대비 위반 건수도 11.4% 감소했습니다.
현재 다국어 훈련 데이터를 활용해 모델을 확장하고 있으며, 이를 통해 단일 분류 모델을 플랫폼 전반에 배포하여 여러 언어와 혼합 언어를 처리할 수 있게 되었습니다. 또한 전체 ASR(음성 인식)에 의존하지 않고 분류 목표 외에도 특정 키워드를 식별할 수 있는 새로운 멀티태스크 아키텍처를 탐구하고 있습니다. 위반 라벨 외에도 이러한 키워드를 탐지하면 분류 품질이 향상되고, 제재를 가할 때 사용자에게 맥락을 제공할 수 있는 기회를 마련해 줍니다.
여기에 소개된 연구는 Roblox 내 여러 팀의 공동 노력으로 이루어졌습니다. 이는 커뮤니티를 존중한다는 우리의 핵심 가치를 훌륭히 보여준 사례이자, 다양한 분야 간의 훌륭한 협업의 결과였습니다.


