一个语音检测器来控制他们

2022-02-21 01:25:36

在我们的工作中,我们经常惊讶于这样一个事实:大多数人都知道自动语音识别(ASR),但对语音活动检测(VAD)知之甚少。这令人费解,因为VAD是与语音相关的任何生产或数据准备管道中最重要、最基本的算法之一——尽管如果它工作正常,它基本上仍然是“隐藏”的。

另一个问题是,如果你试图找到一个高质量的VAD与许可证。通常,学术解决方案支持率低、速度慢,可能不支持流媒体。谷歌强大的WebRTC VAD是一个成熟且众所周知的解决方案,但它已经开始显示出它的时代。尽管它的性能非常出色(30毫秒块,每个块的CPU时间<1毫秒),但它通常无法正确区分语音和噪音。商业解决方案通常会附加字符串,并发送某种或另一种形式的遥测数据,或者以其他方式不“免费”。

因此,我们决定解决这个问题,并发布(在许可证下)我们的内部VAD,满足以下标准:

在单个CPU线程上,一个数据块需要约1ms的时间。ONNX可能快2-3倍;

在本文中,我们将向您介绍一般的语音活动检测,描述我们的VAD度量方法,并展示如何使用我们的VAD并在您自己的语音上进行测试。

语音活动检测是在连续的音频流中寻找语音活动——或者换句话说,某人说话——的问题。它是大多数语音相关管道中不可或缺的预处理步骤,也是各种生产管道的激活触发器。通常,VAD的计算密集度应该比语音到文本低1到3个数量级,并且可能与算法链中的唤醒词检测一起存在。

基本上,VAD应该将语音与噪音和沉默区分开来。输入只是一个小的音频块,而输出则是根据其历史,该块包含语音的概率。看起来很简单,只是一个二进制分类器,你说呢?嗯,是的,但和往常一样,魔鬼在细节中。

如果我们从螺母和螺栓中抽象出一点,要想具有竞争力,现代VAD应该满足四个主要标准:

高质量。这可能取决于每个应用,但在不同的情况下,更高的精确度或召回率可能更可取;

低用户感知延迟,即CPU延迟+音频块大小。通常,低于100毫秒的时间就足够了。通常,短于100毫秒的语音块甚至对人类来说都没有真正意义;

良好的泛化能力,即它应该适用于所有领域、音频源、噪声、质量和信噪比水平,并且只需要稍微修改超参数;

在实践中,训练有素的VAD的行为有点像这样(请注意,有些响亮的声音不是语言):

尽管有很多公共VAD,但并不是所有VAD都能投入生产。良好的生产准备VAD应该在低计算/延迟和良好的现代质量之间取得良好的平衡。我们没有找到一个满足所有标准的解决方案。此外,大多数“开放”解决方案很少或没有频繁更新,主要用作演示或研究工件。这就是为什么我们决定开发自己的VAD。

下表总结了最流行的VAD发动机的优点和局限性。所有信息来源于文档、公共问题、代码、colab笔记本和示例。

尽管我们无法计算表中所示所有模型的延迟和质量指标,但C hunk size可以间接指示延迟和/或计算。我们的主要目标是制作一个生产就绪、易于使用的模型,该模型可以在不安装大量依赖项的情况下供其他人使用,并且可以轻松集成到流媒体任务中,同时保持良好的质量。

此外,值得注意的是,解决方案在用于培训的语言和数据量上可能有所不同。VAD比语音到文本模型对数据的需求要小得多,但仍然可以观察到泛化、质量和使用的数据量之间的相关性。我们对VAD进行了大约13k小时的语音培训,涵盖100种语言。学术解决方案通常倾向于使用几个小型学术数据集。商业解决方案通常不会透露他们是如何接受培训的(或者我们搜索得不够好)。

几天前,我们出版了一部全新的、经过彻底改造的Silero VAD。你可以通过这里的视频互动演示或通过这里的基本演示在自己的语音上进行尝试。我们采用了基于多头注意(MHA)的发动机罩下神经网络,并以短时傅立叶变换为特征。之所以选择这种体系结构,是因为基于MHA的网络在从自然语言处理到计算机视觉和语音处理的许多应用中都显示出了有希望的结果,但我们的实验和最近的论文表明,使用任何类型的全前馈网络都可以获得良好的结果,你只需要做足够的实验(例如,典型的选择是仅MHA或变压器网络、卷积神经网络或它们的混合),并优化架构。

支持8千赫和16千赫。Pytork模型还接受32 kHz和48 kHz,并通过切片将这些采样率的音频重新采样到16 kHz;

在单个CPU线程上,一个数据块需要约1ms的时间。ONNX可能快2-3倍;

进口火炬手。设置线程数(1)模型,utils=torch。中心负荷(回购或定向=';斯内克尔斯4/silero vad';,型号=';silero vad';)(get#speech#timestamps,u,read_audio,,,)=utilswav=read#audio(';test.wav';,sampling#rate=16000)speech#timestamps=get#speech#audio#timestamps(wav,model,sampling#rate=16000,visualized#probs=True,return

有关更多使用示例(包括流媒体)和教程,请参阅repo、链接部分和常见问题解答。

VAD数据集是一个测试数据集的块30。理想情况下,您可以将每个音频分割成这样的块,并手动为每个块添加1或0。但在现实生活中,这可能代价高昂,并且会带来很多错误和偏见(人们因不准确而臭名昭著,并且在短语块方面存在问题)。

当然,你可以要求评估人员只标记开始和结束时间戳,但在现实生活中,这也会变得混乱和有问题,只需看看下面的图表:

很容易看出,在真实的演讲中,通常没有明确定义的界限,有时会有许多短语块被非常短暂的停顿隔开。然而,最有可能的是,人们只会标记“全球”的开始和结束。

我们选择了一种更简单、更简洁的测试方法——根据是否有语音,用1或0注释整个话语。规则如下:

广泛的领域和音频源(电话、录音室录音、带有背景噪音或语音的嘈杂音频等);

此时此刻,一个模棱两可的问题出现了。我们有7秒长的音频,但模型将30毫秒长的音频块分类!每一句话都包含数百个这样的句子块。但在实践中,有意义的演讲通常长于250毫秒。当然也有例外,但很少有例外。

好吧,如果我们有250毫秒的连续无中断演讲,那么我们就是黄金。但是,如果我们有150毫秒的演讲,轻微的沉默,然后再多150毫秒的演讲(见上图),会怎么样?在这种情况下,我们最多等待250毫秒,以允许语音继续。上图显示了最重要的案例。

VAD预测每个音频块有无语音的概率。在大多数情况下,默认的50%阈值可以正常工作,但也有一些例外,每个域可能需要一些小的微调。

使用上述算法,在0到1的不同阈值范围内计算给定话语中是否有语音;

其实没什么大不了的。无论区块大小如何,PyTorch模型的一个区块大约需要1毫秒。如果您跨多个音频流批量输入,跨多个音频的吞吐量将更加可观。令人惊讶的是,人们报告说ONNX模型的速度快了30-60%,这是我们之前在小型STT模型中观察到的。火炬冻结也能提供大约5-10%的减速。

由于语音活动检测的简单性和数据量的丰富性,它似乎或多或少是一项解决的任务。通常情况下,公共学术解决方案有问题,企业/商业解决方案有附加条件(或质量差)。我们试图填补这个空白,我们有适当的质量,易于使用的快速极简模型,没有附加任何字符串和体面的概括100+语言。

至于其他与VAD相关的任务,仍有许多未解决、部分解决、定义不清或研究较少的补充任务,如音乐检测、音频事件分类和广义唤醒词检测。将这些任务整合到我们的VAD模型中,或者在不牺牲我们在VAD中提出的核心价值观的情况下解决一些演讲者日记化挑战,对于未来的版本来说将是一个挑战。

作者Bio Alexander Veysov是Silero的数据科学家,Silero是一家开发NLP/Speech/CV功能产品的小公司,也是Open STT的作者——这可能是最大的公共俄语口语语料库(我们计划添加更多语言)。Silero最近推出了自己的俄罗斯STT发动机。此前,他曾在一家当时位于莫斯科的风投公司和Ponominalu工作。ru,一家由MTS(俄罗斯主要电信公司)收购的票务初创公司。他在莫斯科国立国际关系大学(MGIMO)获得经济学学士和硕士学位。你可以通过电报追踪他的频道(@snakers41)。

亚历山大·维索夫和迪米特里·沃罗宁";一个语音检测器来控制所有的#34;,梯度,2022年。

@文章{Veysov2020Towardimagnett,作者{Veysov,Alexander and Voronin,Dimitri},标题{一个声音检测器来统治他们所有人},期刊{The Gradient},年份{2022},howpublished={\url{https://thegradient.pub/one-voice-detector-to-rule-them-all/ } }, }

如果你喜欢这篇文章,想听到更多,请订阅Gradient并在Twitter上关注我们。