針對語音安全部署 ML

我們的任務是藉由正向心態和禮節連結數十億人,因此我們需要協助人們真正感到與他人建立羈絆。 3D 沉浸式世界與真實世界非常類似,很少有事物能比真實的語音更真實、更強大,能夠形塑長久的友誼和聯繫。 不過,我們要如何擴大 Roblox 語音通訊的沉浸感與豐富度,同時讓我們的社群保持安全有禮?

在這個部落格中,我們會分享我們如何實現即時安全 (Real-time Safety),其為我們打造的端對端機器學習 (ML) 模型,可在每分鐘數百萬個語音活動的日常規模下運作,並藉由比人工審核更準確的方式來偵測語音通訊中的政策違規。 此系統的輸出會傳入其他模型,以便判斷合適的後續處理。 後續模型會針對違反政策的人觸發通知,一開始是給予警告,而如果該行為持續發生,就會採取更嚴厲的行動。

這個端對端即時安全系統是個宏大的目標,因為我們是業界中為使用者提供多語言、近即時語音安全功能的先驅之一。 語音分類同時取決於音訊風格(包括音量和語調)和內容(包括講述的字詞)。 我們很高興與各位分享我們如何在幾乎沒有先前的自動化程序(基本上完全沒有任何標記資料和模型)的狀況下,於短時間內大幅提升即時語音安全。

最後,我們很高興能分享我們的第一個開源模型,也就是我們的語音安全模型之一。 藉由提供這個模型的原始碼並開放商業用途,我們期望能定下業界的政策違規偵測基準,以加速開發更新穎的語音安全 ML 模型。 這個開源模型是我們的第一個版本,而我們已在目前測試的版本中取得了顯著進展。

克服資料短缺問題

我們投入 ML 開發的方式與許多公司一樣:評定可用訓練資料的品質並評估我們的模型。 理想的資料集配對應包括語音發言,以及該發言的高品質安全分類標記。 然而,當我們開始作業時,我們幾乎沒有大規模的人工標記現實世界資料。 若要使用監督式方法訓練高品質的語音安全性偵測模型,我們支援的每一個語言都需要擁有數千筆長達數小時的音訊標記資料,這可能會花上數年來收集,而且必須耗費驚人資源和大量時間。

與其仰賴數千小時的手動標記資料,我們開發了數種更有效率的方法:

  • 用於訓練的機器標記資料。與其煩惱如何取得完美的手動標記訓練資料,我們選擇從機器標記的語音發言來取得大量訓練資料。 使用大量監督標準較低的機器標記資料所產生的訓練模型,不易被標記中的部分噪音影響。 這個方法得以運作的關鍵在於,我們可以取得大量的開源語音轉文字資料庫,以及多年來使用 ML 從文字通訊中偵測社群標準違規的經驗。 這個機器標記方法讓我們得以在數週內標記我們所需的模型訓練資料量,而這原先可能要花上數年處理。

  • 用於評估的人工標記資料。即使高品質但不完美的機器標記資料已足以訓練效能良好的模型,但我們仍不放心由機器標記來執行結果模型的最終驗證。 那麼,接下來的問題就是,我們要從何取得足量的人工標記資料來進行評估。 幸運的是,雖然我們不可能及時收集足夠的人工標記資料來進行訓練,但我們仍有可能收集到足夠的模型來評估資料,因為我們的內部審核人員已經對 Roblox 上的使用者濫用報告進行了分類,以便手動核發後續處理。 這讓我們得以享有兩種方法的優點:優質且足量的機器標記訓練資料可以產生效能良好的模型,而人工標記評估資料雖然數量較少,但也足以讓模型真正運作,為我們建立信心。

另一個面臨資料短缺問題的地方是事件發生率極低的政策違規類別,例如藥物和酒精,或自我傷害的參考案例。 為了處理這個問題,我們將幾個發生率較低的類別合併為「其他」類別。 因此,我們的最終模型可以識別的類別為髒話、霸凌、歧視、約會和「其他」。為了了解「其他」類別,我們會持續監控此項目以取得更多範例,以提升社群安全性並確保 Roblox 上的交流維持安全有禮。 隨著時間過去,只要「其他」當中的子類別訓練範本數量達到臨界點,它們也會成為具有獨立名稱的類別。

用於訓練資料的機器標記管道

我們設計了完整的自動化機器標記管道,以便從語音聊天序列中擷取高品質標記。 我們的管道由三個階段組成:

  1. 音訊段落分割。此管道的第一階段是將音訊分割為數個段落,或者較短的區段,只要我們偵測到句子之間的沉默停頓,就會加以分割。 這能讓我們更有效地識別和標記違反政策的內容。

  2. 語音轉錄。此管道的第二階段是運用自動化語音辨識 (ASR) 模型,將這些音訊段落轉錄為文字。 我們使用公開提供的開源 ASR 模型。

  3. 文字分類。此管道的最後一階段是運用我們的內部文字篩選器來分類轉錄文字。 這個篩選器的設計旨在偵測和封鎖文字通訊中的不當內容。 我們採用了這個篩選器來處理轉錄音訊資料,方便我們為音訊段落加上違規分類和關鍵字標記。 這個文字篩選器是整體模型,以人工標記的違規文字資料進行訓練,其中包含 DistilBERT 擴展模型和正規表達式規則。

重點在於,此管道僅用於為我們最終的生產模型產生訓練資料。 不過,您可能會好奇,既然已經有個管道可以產生我們正在尋找的標記了,為什麼還要訓練模型? 答案在於效率:我們需要在極短的時間內達成不可思議的準確率。 以 Roblox 的規模而言,借助 ASR 來轉錄所有語音通訊將會耗費驚人的時間和大量資源。 然而,從這些資料中訓練出的濃縮 ML 模型,是專為偵測語音通訊中的政策違規而設計的,不需進行完整轉錄,但同樣準確,而且顯著提升了速度,可用於 Roblox 規模。

擴展機器標記管道

在最大型的 AI 計畫中,獲得高品質訓練資料的方式就是從頭開始建立生產環境 ML 系統。 針對本專案,我們需要將我們的機器標記管道開發成全天候運作的頂級生產系統,且有能力擴展到數千個並行 CPU 或同等數量的 GPU。 我們實作了一個具有數千個 CPU 核心的訓練資料叢集,可自動平行處理傳入的音訊串流以產生機器標記。 這個系統必須順暢運作以達到最高輸送量,而任何錯誤或停機時間都可能會導致浪費數天或數週的訓練資料產能。

以下概略呈現一個架構,其可支援我們所需的規模,以便在數週內為數以萬計的音訊時數加上機器標記。 這裡的重點是透過在處理流程中的關鍵點進行佇列上的投資,讓我們能夠將背景工作執行緒水平擴展到許多機器上,藉此突破瓶頸。 這些背景工作執行緒會執行上一個區段提及的音訊段落分割、音訊轉錄,以及文字分類步驟。

ML 架構

我們對於模型搜尋的核心要求是低延遲,也就是近即時的模型推斷速度,因此我們採用了會直接在原始音訊上運作並回傳分數的架構。 我們使用了以變換器為基礎的架構,它針對序列摘要的成效出色,在業界的自然語言處理 (NLP) 和音訊模型化方面也相當成功。 我們的挑戰是找出可以兼顧複雜度與低延遲推斷的甜蜜點,也就是要處理多種具備口音的語言、不受背景噪音影響、維持音訊品質,同時還要滿足我們的產品延遲限制。

模型選擇

我們面臨了一個緊迫的設計問題,那就是判斷我們需要的上下文長度,以便訓練轉換器模型。 我們查看了數天內的使用者語音聊天資料,並根據發言長度直方圖,決定將長度訂為 15 秒,以權衡延遲問題和分類所需的足夠上下文。 我們將「無違規」作為一個分類,以偵測沒有政策違規的狀況。 由於單一音訊剪輯片段可能包含數種類型的違規,這項工作本質上成為了多重標記作業,而不只是傳統的多元分類問題。 我們透過二元交叉熵 (BCE) 損失來微調整個網路,包括這個工作的頭部層級。

圖片說明:聊天資料的語音發言直方圖,顯示有 75% 的發言少於 15 秒鐘。

我們從語音研究社群中評估了數個熱門的開源編碼器模型,並將我們的選擇範圍縮減到 WavLMWhisper。 我們的第一個實驗是透過 2,300 小時的 Roblox 機器標記語音資料,微調預先訓練的 WavLM base+,並根據兩個真實世界評估資料集來評估分類結果。 我們獲得了非常令人振奮的分類結果(請參閱下方的<模型評估>),但發現延遲超過我們設定的生產環境部署閾值。 接著,我們實作了自訂版本的 WavLM 架構,減少轉換器層級數量,並使用 7,000 小時的 Roblox 機器標記語音資料從頭開始訓練端對端模型。 這個模型能在對話環境中穩定產出分類,且比微調模型更輕便。 我們最後的候選模型使用了學生-教師蒸餾設定,以 Whisper 編碼器作為教師網路,並以 WavLM 端對端架構作為學生網路。 我們以 4,000 小時的音訊進行訓練後,發現其分類準確度與微調模型相似,但延遲大幅改善,模型規模也較小。 下圖摘要呈現上述三個實驗的模型參數。 我們會持續迭代資料取樣策略、評估策略和模型超參數,同時擴展多語言語音安全分類模型。



資料集大小

模型大小

輸入的每秒推斷延遲

即時因數

微調的 WavLM

2300 小時

9600 萬個參數

102 毫秒

9.80

端對端訓練

7071 小時

5200 萬個參數

83 毫秒

12.08

蒸餾

4080 小時

4800 萬個參數

50 毫秒

19.95



模型最佳化

我們部署了標準業界方法,包括量化指定轉換器層級,以在不犧牲品質的狀況下將速度提升 25% 以上。 從特徵擷取階段切換到搭配卷積神經網路 (CNN) 的 MFCC 輸入(而不是只使用 CNN),也在推斷階段將速度提升了 40% 以上。 除此之外,引入語音活動偵測 (VAD) 模型作為前處理步驟,大幅增加了整體管線的強固性,特別是針對使用嘈雜麥克風的使用者。 VAD 讓我們得以過濾雜音,並只有在音訊中偵測到人聲時才套用我們的安全管線,此做法降低了約略 10% 的整體推斷量,也為我們的系統提供了更高品質的輸入。

模型評估

雖然我們使用許多不同的資料集和指標進行評估,但我們可以分享我們的語音分類工具在處理違規率較高(例如我們從使用者的語音濫用回報中發現的內容)的英文語言資料集上的效能。 這個資料集是百分之百由我們的審核人員進行人工標記。 當我們將所有違規類型(髒話、霸凌和約會等等)合併為一個二元分類,我們發現 PR-AUC(精確召回曲線下面積) 得分超過 0.95,如下所示。 這代表在此評估資料集中,這個分類工具通常可以捕捉到大多數的違規狀況,且不會錯誤標記太多非違規情事。

然而,上述的強大評估結果並不一定會表現在所有使用案例中。 舉例來說,在政策違規語言通知案例中,此分類工具會評估所有 Roblox 語音聊天,因此違規發生率較低,偽陽性結果的機率也較高。 在語音濫用報告中,此分類工具只會評估已標記為潛在違規的語言,因此違規發生率較高。 不過,上述結果仍然令人振奮,足以讓我們決定在生產環境中使用這個分類工具進行實驗(但設定較為保守的閾值),以向使用者發布政策違規語言通知。 這些實驗的結果遠遠超出我們的預期。

下一步呢?

我們運用自己的 CPU 基礎架構,並謹慎地設計出適合更大規模的管道,因此得以在 Roblox 等級的規模成功部署此模型。 在尖峰時段,此模型每秒可成功處理超過 2,000 個要求(絕大多數的要求中未包含違規情事)。 我們也觀察到,由於使用此模型來向使用者發布政策違規語言通知,平台上的政策違規行為顯著降低。 具體而言,從我們初次推出起計,我們注意到嚴重層級的語音濫用報告降低了 15.3%,而每分鐘的語言違規降低了 11.4%。

我們會以多語言訓練資料來擴展我們的模型,這讓我們得以在整個平台上部署單一分類模型,藉此處理多種語言與混用語言的案例。 我們也正在探索全新的多工基礎架構,以便在不需要仰賴完整 ASR 的情況下,識別出分類目標之外的指定關鍵字。 偵測違規標記以外的特定關鍵字能改善分類品質,並有機會在核發後續處理時為使用者提供上下文情境。

此處描述的研究是由 Roblox 上的許多團隊共同努力完成。 這充分體現了我們尊重社群的核心價值,以及橫跨多種領域的卓越協作。