部署机器学习实现语音安全
我们的使命是让十亿人以乐观与文明的方式建立联系,这就要求我们要帮助用户之间产生真正的亲近感。 在 3D 沉浸式世界中,就像在现实世界一样,人类的声音是建立持久友谊和联系最真实、最有力的方式之一。 但我们如何在保证安全文明的社区氛围的同时,在 Roblox 上增强语音通信的沉浸感和丰富性?
在这篇博客文章中,我们将会介绍如何将“实时安全”付诸于实践。这是一个端到端机器学习模型,每天处理数百万分钟的语音活动,它能够比人类审查更准确地检测语音通信中的违规行为。 该系统的输出被馈送给另一个模型,由该模型来确定给出相应的处罚措施。 当用户违反我们的政策时,处罚模型会触发通知,一开始是发出警告,如果违规行为依然存在则会采取更严厉的处罚措施。
这个端到端实时安全系统彰显出我们的宏伟目标,即我们在业界率先为用户提供接近于实时的多语言语音安全功能的企业之一。 语音分类取决于两方面:音频风格(包括音量和语气)和内容(包括所说的词语)。 我们很高兴分享我们是如何从几乎没有任何自动化经验,实际上是没有任何标注数据和模型的情况下,将模型数量从 0 增加到 60 个,最终开发出这套实时语音安全系统。
最后,我们很高兴地与大家分享我们的第一个开源模型,它是我们的语音安全模型之一。 通过将此模型开源并允许出于商业用途使用,我们希望在政策违规检测领域提供行业标准,助推业界更快地开发出更新的语音安全机器学习模型。 此开源模型是我们的第一个版本,此后我们一直在进行重大改进,这些改进内容目前正在进行测试。
克服缺乏数据的困境
和许多公司一样,我们开展机器学习工作的第一步也是评估可用于训练和评估模型的数据的质量。 理想的数据集配对应包括语音话语,以及针对话语的高质量安全分类标注。 但在一开始,我们几乎没有经过人工标记的大规模现实世界数据。 要使用监督方法训练高质量的语音安全检测模型,我们需要为索支持的每种语言提供数千小时的标注音频数据。这么大的数据量原本要花费数年时间才能收集到,需要耗费的资源和时间令人望而却步。
因此,我们没有选择依赖人工花费数千小时来标注数据,而是开发出了多个更高效的方法:
-
使用机器标注的数据进行训练。我们没有拘泥于追求完美的人工标注训练数据,而是选择了利用机器对大量语音话语进行标注来获取训练数据。 在弱监督下使用大量机器标注的数据生成的训练模型不受标签中的一些噪声影响。 这种方法奏效的关键在于使用优秀的语音转文本开源库,以及多年使用机器学习检测用户在文本 交流中社区准则违规行为方面所积累的经验。 这种机器标注方法使我们能够在几周内完成模型所需的训练数据标注工作,而不是耗费数年时间。
-
使用人工标注的数据进行评估。尽管机器标注的高质量数据并不完美,却也足以训练出高性能的模型,但我们并未选择信任机器标签来对所生成的模型进行最终验证。 那么在这之后,我们面对的下一个问题是从哪里可以获得足够的人工标注数据用于评估。 所幸的是,虽然及时收集足够多人工标注数据用于训练是不可能的,却可以利用我们内部的审核员来收集到足够多用于模型评估的数据是可行的。这些审核员当时已经在对 Roblox 用户举报的滥用行为进行分类,手动发布了处罚措施。 这样我们就能充分利用两种数据的优势:机器标注的训练数据质量不错且数量大,足以训练出高性能的模型;而人工标注的评估数据虽然数量要小得多,但却足以为我们提供信心,验证模型的确可以正常工作。
我们在违规行为分类方面同样面临着缺乏数据的困境。例如,缺少对于毒品和酒精或自残等极少见类别的参考。 为了解决这一难题,我们将多个不常见的类别统一归为“其他”类别。 经过上述努力之后,我们的最终模型可以识别出脏话、霸凌、歧视、约会以及“其他”等类别。我们会继续监控上述违规类别以收集更多示例,来了解这些归入“其他”类别的行为,更好地保护社区环境,确保用户在 Roblox 上以安全、文明的方式进行交流。 而“其他”中的子类别的训练示例数量也会随着时间推移变得越来越多,最终量变引起质变,这些子类别也将成为独立于“其他”之外的、有名字的类别。
用于训练数据的机器标注流程
我们设计了一套全自动的机器标注流程,用于从语音聊天序列中提取高质量的标签。 我们的流程包含三个阶段:
-
音频片段分割。流程的第一阶段涉及将音频分割成片段或更短的节段,只要在两句话之间检测不到声音就进行分割。 这使我们可以更高效地识别并标注违规的内容。
-
音频转录。流程的第二阶段是使用自动语音识别 (ASR) 模型,将分割好的音频片段转录成文本。 我们使用的是面向公众的开源 ASR 模型。
-
文本分类。流程的最后阶段涉及使用我们的内部文本过滤器对转录好的文本进行分类。 此过滤器用于检测和屏蔽文本交流中的不当内容。 经过调整的过滤器能够配合转录好的音频数据一起工作,让我们可以利用违规类别和关键词来标注音频片段。 文本过滤器是经过人工标记的违规文本数据(其中包含一个扩展 DistilBERT 模型和正则表达式规则)训练的集成模型。
需要注意的是,此流程仅用于为我们的最终生产模型生成训练数据。 但是您可能会好奇,既然已经有流程可以生成我们所需标签,为什么还要去训练模型呢? 答案是效率。我们需要在非常短的时间内实现极高的准确度。 以 Roblox 所拥有的用户体量,调用 ASR 来转录全部的语音通信会极其耗费资源,且速度极慢。 但是,使用这些数据训练出紧凑型机器学习模型无需进行完整的转录,而是专门负责检测语音通信中的违规内容,这种技术路径的准确度相当,而且速度大幅提升,还能运用在 Roblox 这种规模的应用场景之中。
扩展机器标注流程
对于大多数大型 AI 项目而言,光是获取高质量训练数据的机制本身就是需要从头创建的生产型机器学习系统。具体到本项目,我们需要将机器标注流程开发成为一套一流的生产系统,它需要全天候不间断运行,并且能够扩展到数千个并发 CPU 或等效数量的 GPU。 我们成功实施了拥有数千个 CPU 内核的训练数据集群,可自动并行处理进入系统中的音频流,生成机器标签。 这套系统必须实现无故障运行才能实现最大吞吐量,一旦出现任何错误或停机都会给训练数据生成造成数天或数周的时间损失。
我们需要在短短几周时间内对数以万计时长的音频进行机器标注,下方是支持我们完成如此大工作量的高级别的架构概述。 这里的主要启示是,要在处理中的关键点上投资建立队列,这样我们才能通过横向扩展多个机器上的工作线程来消除瓶颈。 这些工作线程负责执行前文提到的音频片段分割、音频转录和文本分类步骤。
机器学习架构
我们对模型搜索提出的一项核心需求是低延迟,即模型推理速度接近于实时,这促使我们搭建出可直接对原始音频进行操作并返回分数的架构。 我们采用了基于 Transformer 的架构,这种架构在序列总结方面表现出色,并且在自然语言处理 (NLP) 和音频建模领域的工业应用中也取得了巨大成功。 我们面临的挑战是,在复杂性与低延迟推理两者之间找到不错的平衡点。也就是说,在满足产品延迟限制的同时,还要能够处理多种语言和口音,且不受背景噪音和音频质量好坏的影响。
模型的选择
一个紧迫的设计问题就是确定训练 Transformer 转换器模型所需的上下文窗口的大小。 为此,我们研究了多天内语音聊天数据中的话语长度直方图,最终确定 15 秒的窗口是不错的平衡点,既能保证低延迟,也能为分类提供足够多所需的上下文。 我们使用“无违规”作为一个类别来检测是否存在违规内容。 鉴于一个音频片段中可能存在多种违规内容,因此任务实质上变成多标签问题,而非传统的多类别分类问题。 我们使用二元交叉熵 (BCE) 损失对整个网络(包括此任务的头部层)进行了微调。
标题:聊天数据中语音话语的直方图,图中显示 75% 的话语时长不到 15 秒。
我们评估了音频研究领域的几个流行开源编码器模型,并最终将选择范围缩小到WavLM 和 Whisper。 我们进行的第一项试验是,使用 2,300 小时 Roblox 机器标注语音数据对预训练的 WavLM base+ 模型进行微调,然后在两个真实场景的评估数据集上评估其分类结果。 我们获得非常令人鼓舞的分类结果(详见下文的“模型评估”部分),但发现其延迟超出了我们生产部署的阈值要求。 作为后续改进,我们实现了一个简化版的 WavLM 架构。减少了 Transformer 层的数量,并使用 7,000 小时的 Roblox 机器标注语音数据从头训练了一个端到端模型。 这个模型在对话场景中能产生稳健的分类结果,与经过微调的模型相比体量更小。 我们最终的模型候选方案使用的是“学生-老师”蒸馏设置,以 Whisper 编码器作为老师网络,WavLM 端到端架构作为学生网络。 我们用 4,000 小时的音频数据对其进行训练后,发现其分类准确度与经过微调的模型相似,但在延迟行能方面有显著改进,且模型大小更小。 下图概括了上述三项试验的模型参数。 在扩展多语言语音安全分类模型的过程中,我们不断迭代数据采样策略、评估策略和模型超参数。
数据集大小 |
模型大小 |
推理延迟/秒输入 |
实时因子 |
|
经过微调的 WavLM |
2300 小时 |
9600 万个参数 |
102 毫秒 |
9.80 |
经过端到端训练 |
7071 小时 |
5200 万个参数 |
83 毫秒 |
12.08 |
经过蒸馏 |
4080 小时 |
4800 万个参数 |
50 毫秒 |
19.95 |
模型优化
我们采用了标准行业方法,包括对选定的 Transformer 进行量化,在不损失质量的前提下,成功实现将速度提升超过 25%。 将特征提取阶段从只使用卷积神经网络 (CNN) 切换到将 CNN 与 MFCC 输入相结合,让推理阶段的速度提升了超过 40%。 此外,在预处理步骤还引入语音活动检测 (VAD) 模型,显著提高了整个流程的鲁棒性,特别是对于麦克风有噪音的用户而言。 VAD 使我们能够过滤掉噪音,并仅当在音频中检测到人声时才应用我们的安全流程。将推理总量减少了近 10%,并为我们的系统提供了更高质量的输入。
模型的评估
尽管我们使用了许多不同的数据集和指标来进行评估,我们还是可以分享一下我们的语音分类器在具有高违规率的英语数据集(例如,我们在用户举报的语音滥用行为中会看到的内容)上的表现。 此数据集 100% 由我们的审核员人工标注。 在将所有违规类型(脏话、霸凌、约会等)合并为一个二元类别后,我们观察到 PR-AUC(精确度-召回率曲线下面积图)的得分超过 0.95,如下图所示。 也就是说在此评估数据集上,分类器通常可以捕获绝大多数违规内容,且不会错误标记太多合规内容。
但这并不能说明在所有用例中一定能实现上图所示的出色评估结果。 例如,在对违规言论发出通知时,分类器会评估所有 Roblox 语音聊天内容,此时发现违规内容的概率较低,出现误报的可能性也更大。 而在处理语音滥用举报时,分类器只需评估那些已被标注存在潜在违规内容的语音,因此违规内容的比例更高。 尽管如此,上述结果已足够令人鼓舞,促使我们开始在生产环境中进行分类器试验(采用保守阈值),向用户通知他们违规语言的使用情况。 这些试验结果大大超出了我们的预期。
后续行动
通过利用我们自己的 CPU 基础设施和精心设计的大规模流程,我们在 Roblox 这样的规模下得以成功部署此模型。 如今,此模型在高峰时段每秒可成功处理超过 2,000 个请求(其中大多数内容没有违规)。 我们还观察到,由于使用该模型来通知用户存在违规行为,平台上违规行为的数量大幅减少。 特别是自最初推出以来,严重级别的语音滥用举报数量减少了 15.3%,每分钟语音中包含的违规内容减少了 11.4%。
我们正在利用多语言训练数据扩展我们的模型,使我们能够在整个平台上部署同一个分类模型,以处理多种语言以及多语言混用的语音内容。 此外,我们还在探索全新的多任务架构,以在完成分类目标的同时识别特定关键词,而无需依赖完整的 ASR。 除了违规标签之外,这些关键词的检测也可提升分类质量,并让我们有机会在执行处罚措施的同时为用户提供上下文信息。
文中所述内容是 Roblox 内部多支团队共同努力的研究成果。 充分展现出我们尊重社区的核心价值观,以及多个部门之间亲密无间的协作能力。