您尚未说“你好”一词,我们已经知道您是谁

我们的神经网络可以做到这一点,通过一个发音的音节识别一个人。 但是,本文的主题虽然与语音识别无关,但是与之直接相关。 我们将讨论神经网络功能,即所谓的d矢量,它可以用于声音处理任务:从验证到语音识别和情感。

图片


物资


根据采样率,一秒钟的声音可以包含8到48 000个数字。 它们可以表示为与扬声器膜片或麦克风平衡位置的偏差。 实际上,对声音的这种描述是多余的:下一时刻的信号幅度在很大程度上取决于前一时刻,这暗示着可以有效压缩该信号而不会损失太多信息的事实。 减少信号尺寸的方法有很多种,其中大多数是基于声音的物理特性和人类听觉的特性。

图片

模因1。

在神经网络运作良好(广义上)之前,社区就使用了所谓的手工属性。 其中最著名和最广泛使用的是PitchMFCC 。 第一种具有声带振动频率的物理含义,例如对于不同的人而言,这是不同的,并且还取决于语调。 倒频谱系数(MFCC)的思想是基于人类对声音的感知的非线性,即频率和音量。 对于一个人来说,似乎一种声音要比另一种声音高出一些,如果实际上它们的频率相差一定次数。

在信号的某些部分永远丢失的意义上,这些和其他手动计算的功能是不可逆的。 在某些任务中,这并不重要,但我想提出一种更通用,更可行的方法。

解决此问题的关键是傅立叶变换。 使用它,您可以将音频信号想象为具有不同频率和幅度的波的总和。 实际上,语音并不是固定不变的,因为它的频谱将在不同的时间点发生质的不同。 这使我们可以使用频谱图在时频表示中进行考虑。

要构建频谱图,您需要将声音分成数十毫秒长的相交部分(重叠的帧),每个部分都要计算傅立叶变换并将其模块写在频谱图上的列中。 此外,这样的变换几乎是相互逆的,也就是说,使用逆傅立叶变换和Griffin-Lim算法,您可以恢复原始声音信号(实际上,信息丢失,因为傅立叶变换在一般情况下很复杂,并且频谱图是实数值,并且,为了近似恢复相,通常使用Griffin-Lim迭代算法。 总计,如果我们取振幅的对数,则会得到以下图片:

图片

声谱图为5秒的语音。

并且它们可以通过卷积网络方便地进行处理。

这种黑客攻击经常用于图像处理任务:存在大型数据库,其中包含不同对象的示例(例如ImageNet)。 您可以训练一个大型网格以识别它们,然后在我们的特定任务上对其进行训练,或者从内部完全连接的一层获取输出结果。 相信这样的架构将为输入图像计算良好的信息特征。 经验表明,与我们从头开始训练神经网络相比,几乎总是结果会更好。

d-矢量(通常为d-矢量,但有时也称为x-矢量)的概念类似于在ImageNet上使用预训练的网格,不同之处在于频谱图没有类似的基础。 作为一种可能的解决方法,可以考虑使用自动编码器,但是它们先验地不知道在频谱图中寻找什么,因此它们的工作效果不理想。

我们需要更深入


注意,本文的主要部分开始。

通过语音验证人员的任务已广为人知,在这种情况下,有必要通过语音输入段确定数据库中有哪些人员说过语音。 实际上,此类系统的构建是一门独立的科学,并且存在许多不同的附加组件(语音持续时间;是否要求每个人都讲相同的文本;分阶段进行一对一或全部对决),但这在不同条件下至关重要,但是对我们而言您需要注意其他事项。

即:如果我们预先训练网格以识别一个人,这些功能将有多好。 一切都是为了标志。

这将有助于我们了解 2015年的内容。 在其中,作者教导网格通过面部识别人(面部识别)。 这项工作的关键是使用三重损失。

他的想法很简单:我们对倒数第二层的特征进行归一化,以使它们位于单位球体上,并要求来自一类的点彼此相距遥远。 这可以通过以下方式实现:对于每个训练示例(锚),我们从同一样本中以及从另一个类别的样本中发现另外两个-正数和负数。 然后,对于这些三重积分,我们形成了损失:

\开始{equation}
\ Big [\ Vert f(x ^ a)-f(x ^ p)\ Vert-\ Vert f(x ^ a)-f(x ^ n)\ Vert + \ alpha \ Big] _ +,
\结束{equation}

其中x是输入图片,f是归一化后的网格输出,alpha是手动选择的参数,[] _ {+}是ReLU函数。 定性地,如果锚点与正点之间的距离大于锚点与负点之间的距离至少α,则此损失的值为零,并且越大,两个不同类之间的差异就越小。

图片

经过三重损失训练后,功能发生了什么情况。

顺便说一句,您可以通过智能方式形成三元组。 在某些时候,损失的程度将变小,并且为了加快学习速度,您可以在所有其他类别中寻找负面的例子,而不是其他所有类别的负面例子。 但是对于大型数据集来说,这很困难,因为您需要考虑在每次网络学习迭代之后发生变化的类之间的成对距离。

三重态损失优于常规分类中使用的分类交叉熵。 经过交叉熵训练的模型将尝试将一个类的所有点塞入一个越来越小的区域,并且对于特定任务多余的信息可能会丢失。 但是我们不希望这样,因为我们将神经网络用作特征生成器,而不是用于验证。 三重损失的性质要小得多:将一个不同的等级传播到一个球体上的不同区域比承受一个等级更重要。

图片

模因2。

在频谱图上训练特征生成器之前,要做的最后一件事是确定其大小。 显然,分类的准确性会越高,我们将考虑的时间段越长,但是结果越“平均”。 因此,使用这样的信号长度是合理的,以使1-3个音素(音节)掉入其中-半秒似乎是合适的。

为了进行培训,我们使用VoxCeleb2数据集,其中对于6300个扬声器中的每一个,都有数分钟(分别在不同条件下制作)的数个单独的录音。 我们将一部分音频文件用于训练,其余部分用于验证,选择卷积网络体系结构,向其中添加Triplet Loss并学习。

结果很酷。 在1080Ti上进行了将近2周的训练(是的,持续了很长时间),分类准确性达到了55%。 似乎还不是很多,但是top-5的准确度是78%,如果我们仅考虑片段中声音最大的一半(大部分是重音元音),那么top-5的准确度将提高到91%。 可以说,我们可以通过一个人的短语中的一个来识别一个人,而且准确性很高。 但这没关系。

图片

模因3。

归根结底,所有功能都是针对分类神经网络层之前从倒数第二个获得的解决方案而开始的。 我们在任务上对它们进行了测试,结果在任何地方都比使用经典方法计算属性要好。 例如,在情感识别问题上,使用d向量使我们绕过了4%的最新技术,相应的文章在FICC 2019大会上被接受,但是情感识别是一个完全不同的故事,我们将在后面讨论。

由Neurodata Lab的深度学习专家Gregory Sterling sterling239发布。

Source: https://habr.com/ru/post/zh-CN422635/


All Articles