首页 > 其他分享 >声纹识别技术

声纹识别技术

时间:2022-08-27 22:58:54浏览次数:40  
标签:函数 音频 声纹 技术 神经网络 声纹识别 模型

声纹识别:声纹技术的核心

声纹技术是其他技术的基础。声纹分割聚类技术、基于声纹的语音合成、人声分离、语音活动检查
声纹识别模型既可以是事先训练好的 pre-trained ,也可以是联合训练 joint training得到的。
声音识别:说话人是被。 voice recognition speaker recognition voiceprint recognition talker recognition

声纹识别和语音识别 speech recognition 技术进行曲风。
语音识别是 将语音信号识别为文本内容的技术。在绝大多数情况下不会关心说话人的身份。并需要做到对不同说话人声音的稳健性。
声纹识别:尤其是文本无关的声纹识别技术,需要再不同的文本内容中稳健地识别出说话人的身份。由此可以看出。语音识别和声纹识别是俩个相互 正交 的问题。

按任务分类。

俩类:声纹验证 speaker verification 声纹辨认 speaker identification

  • 声纹验证
    “这段话是否由这个特定的人所说”。 是一个二值判别问题,是或否。

声纹验证技术 需要 目标说话人 target speaker 事先提供音频样本,通过特定的算法,从音频样本中能够表征 该目标说话人声纹特征的说话人模型。这个过程 称为 声纹录入,voice enrollment 或声纹注册 voice registration

完成声纹录入之后,对于一段新的音频,我们便能够将其与目标说话人模型进行匹配,得到一个匹配分数,该分数越高,表示我们越倾向认为这段新的音频来自目标说话人。 我们可以将该匹配分数与某个实现设定好的阈值进行比较。并根据最后的结果进行二值判别。
声纹验证对应的应用主要是唤醒和安全。

  • 声纹辨认
    与声纹验证不同,声纹辨认需要解决的问题是:这段话由谁所说, 这个谁,是限定在某个特定的候选说话人 candidate speakers .

加入这个集合包含了M位说话人,就是M元分类问题。还有冒名顶替者。 M+1.

按文本内容分类

文本相关 text-dependent 文本无关 text-independent 文本提示型 text-prompted

  • 文本相关
    固定文本的声纹识别,需要被识别的音频,其内容对应的文本是固定的。其录入的音频及待识别的音频包含着完全相同的音节。
    同一个人说同一个次,其音频特征的变化范围通常较为有限,声纹识别模型的建立,只需要对有限的几个音节进行建模即可。

文本相关的声纹识别对问题的另一个简化在于,可以假设待识别的音频长度被限制在某个有限的变化范围内,甚至是固定的时间长度。
固定的时间长度意味着固定的音频帧数和固定的特征帧数,因此可以得到固定的特征维度。可以直接应用于机器学习算法的输入。

  • 文本无关

无论说话人说的是什么内容,都要能够识别出说话人的身份。
如果必须是特定的语言,称为语言相关。否则语言无关。

即使限定了语言,文本无关的声纹识别依然是一个十分困难的问题。
难点1:音节、字词不同
难点2: 训练时难以同事覆盖所有说话人和所有内容。
难点3:需要处理不同长度的音频,

  • 文本提示型
    文本相关还是文本无关,都面临着一种风险。那就是冒名顶替者可以将目标用户的声音提前录下来,在声纹验证时播放,让系统误以为
    这是目标用户的声音。

系统流程

系统的运作包含俩个阶段:事先完成的声纹录入阶段和实际运行时的识别阶段。

录入音频-》特征提取-》声纹建模-》 -》 模型聚合-》说话人模型

验证音频-》特征提取-》 声纹建模-》 -》 相似匹配-》判别-》识别结果
说话人模型1 说话人模型2 说话人模型3 给相似匹配模块提供
在声纹录入阶段,我们通常要求目标说话人提供 多段语音,如果是文本无关的声纹识别,则会额外要求这些语音对应的文本互不相同,
以覆盖更多的音节、字词。
对于每一段语音,进行分帧、加窗、提取特征、然后用本章将要介绍的方法对这些特征进行声纹建模。
在对目标说话人提供的每一段录入音频进行建模后,额外对这些模型进行聚合 aggregation。从而 得到一个单一的说话人模型。
用来表征该说话人的声纹特征。后面提到的超向量、 i-vector、 d-vector.都是说话人模型的一种。

在识别阶段,待验证的音频需要通过与录入阶段完全相同的特征提取,及声纹建模过程。得到其声纹模型。

无论是声纹录入阶段,还是识别阶段,都假定声纹建模的过程是已知的、固定的。通常,声纹建模的过程本身也依赖某些复制的模型。这个模型的构建需要大量的训练数据,因此。从机器学习的角度,我们将声纹录入阶段和识别阶段都称为测试阶段。
将声纹建模这部分的构建过程称为训练阶段。

说话人模型和声纹模型,是声纹建模过程的输出。是通过声纹录入阶段得到的。 每个说话人都拥有自己的说话人模型。声纹建模过程本身所依赖的模型,贼是训练阶段的常务。该模型适用于所有的熟化人。
显然,都称为模型,很容易产生混淆,所以,我们有时将说话人模型称为声纹嵌入码 embedding.
将声纹建模过程本身所依赖的模型称为 声纹编码器 encoder.

训练阶段: 输入:训练数据, 输出:声纹编码器参数
声纹录入阶段: 输入: 目标说话人录入音频, 输出: 目标说话人声纹嵌入码
识别阶段: 输入:验证音频, 输出:识别结果

声纹识别的评价指标

平均精度均值 mean average precision mAP.

相似匹配

特征提取、声纹建模、相似匹配、判别。
相似匹配一般有俩个输入:来自验证音频的声纹模型、来自目标说话人的声纹模型。 输出是一个实数, 匹配分数 score.

假如需要匹配的声纹模型可以表示为俩个嵌入码向量e1 和 e2 .那么相似匹配可以采取以下几种形式。
1)余弦相似度
cos(e1,e2) = e1e2/|e1||e2|
俩个向量在多维空间中的夹角的余弦值。 取值范围【-1, 1】 。

2)欧式距离 Euclidean distance
d(e1,e2) = || e1 - e2||

3)神经网络
通过可训练的神经网络或者支持向量机等机器学习模型实现更复杂的相似匹配函数 f(e1,e2|θ), θ表示机器学习模型 f()的参数集合。

录入集与验证集

将测试集分割成俩个互不重叠的自己: 录入集 enrollment set 与 验证集 verification set .

通常先利用录入集中的语音对每一个说话人进行声纹录入。得到一个包含了所有说话人声纹模型的模型库。

PS:无论录入集还是验证集,它们都是测试集的子集,除了测试集,声纹建模还需要额外的训练数据集, 训练数据集通常比测试集大得多,而且除了不能包括测试集中的音频

ROC曲线及曲线下面积。

ROC曲线的全程是接收者操作特征曲线 receiver operating characteristic curve 是一个常用的二元分类问题的评价模型。

在通过测试集的录入子集构建了说话人模型库之后,可以随机构建出一组用于测试的“说话人-语音对” {(Si, Ui'j)}
Si表示由录入集 得到的 第i个说话人的声纹模型。
Ui'j 表示 验证集 中第i'个说话人的第j段语音。 如果i=i',则该说话人-语音构成一个正样本。若i!=i',则该说话人-语音对构成一个负样本。

在完成了说话人-语音对的构建之后,可以将该语音和说话人模型作为声纹验证

计算出相似匹配的分数si,i'j,给定任意一个判别阈值t.判别结果为y'i,i'j = &(si,i'j >= t)。
而真实结果为yi,i'j = &(i=i').通过对所有的y'和y比较。可以计算出在该测试集上的正确接受率, true accept. TA。
正确拒绝率 true reject TR 错误接受率 false accept FA,错误拒绝率 false reject FR

在统计学中,FA 称为第一类错误 type I error FR称为 第二类错误 type II error

以FA为横坐标,TA为纵坐标的平面。则每一个判别阈值t都对应了该平面上的一个点。如果将t的值从si,i'j的取值范围内扫过。
那么随着t的增加,FA与TA都会减小。从而在该平面上绘制出一条单调递增的曲线。 该曲线便是ROC曲线。
曲线与x轴之间的面积 称为曲线下面积 area under cureve AUC。 曲线下面积越大,系统的识别能力越强。

等错率

在声纹识别领域,常常以FA为横坐标,以FR为纵坐标,绘制单调递增的DET曲线, 检测错误权衡,detection error tradeoff
这种形式的DET曲线,更利于我们观察阈值变换的过程中,FA与FR这俩类错误之间的取舍。
在这种设定下,DET曲线下方的面积越小,意味着系统的识别能力越强。

与曲线下面积相比,等错率 equal error rate EER 的定义与实现都更加简单清晰,因此也成了声纹识别领域最常用的评价指标。
顾名思义,等错率表示当FA与FR俩类错误数值相等是的FA与FR数值。在以FA为横坐标,FR为纵坐标的DET曲线上。等错率表示该DET曲线与直线y=x的交点,该点对应的判别阈值,通常称为等错率阈值。

最小检测代价函数

深度学习之前的方法

从音频特征到说话人模型的声纹建模模块,该模块的任务是:对一段语音所对应的音频特征序列进行变换,从而得到能够更好的表征说湖人 声纹特征的模型。

该模块大致分为俩类: 深度学习之前的方法和基于深度学习的方法。

基于深度学习的方法目前已经成了现今业界的主流方法,这些方法有着更为系统的理论和方法架构
而深度学习之前的方法,互相之间差异较大。

深度学习

前馈神经网络

化繁为简,是机器学习中一种重要的思想。
神经网络通过将许多简单的元函数互相联结
feed-forward neural network 是神经网络中最简单的一种,其元函数 h()由一个线性函数和一个非线性函数串联组成
h(x) = θ(w^T * x + b)
非线性函数θ 被称为 激活 activation 函数

这是一个简单的俩层前馈神经网络,输入为三个输入节点,其第一层包含4个元节点,第二层包含3个元节点,
前馈神经网络的每一层可以用矩阵的形式表示
h1 = θ( W1 * x + b1)
h2 = θ ( W2 * h1 + b2)
激活函数对向量的每一个元素分别作用。
没有非线性的激活函数的存在,无论神经网络有多少层,最后都可以通过矩阵、向量的乘法,化简为与之等价的单层网络
而激活函数的存在,保证了深度的神经网络无法被化简,因此才能近似十分复杂的函数。

常用的激活函数包括 Sigmoid函数 反正切函数 双曲正切函数 线性整理 函数。

前馈神经网络有时也被称为 完全连接网络 fully connected network .简称 深度神经网络 deep neural network .

卷积神经网络

当处理低维输入特征时,前馈神经网络通常由非常优秀的表现,然而,在处理图像、视频、音频等高维多媒体输入的时候,则出现了问题。
6464 像素的图像。如果构建一个单层的前馈神经网络,并将整个图像作为神经网络的输入。
网络的输出为100个节点。那么WK 将会包含 64
64 * 100 = 409600 个参数。
网络的参数十分容易达到无法处理的数量。
前馈神经网络之所以会发生参数爆炸,在于其没有有效地利用空间中的重复信息,

例如:我们要从一张图像中检测出是否有人脸,人脸可能在中间,在右上方等等。
如果将对饮人脸检测的少量参数,在图像的不同部位分别进行操作,则大大能减少网络的总参数 数量。
卷积神经网络 convolutional neual network CNN 正是来解决这一问题的。
卷积神经网络由卷积层 convolutional layer构成。每一个卷积层 定义 一组卷积 内核 convolutional kernal .或称为 卷积滤波器 convolutional filter.

每一个卷积内核被重复作用到输入数据的不同位置,
与该位置对应的局部数据进行逐个元素相乘并求和的运算。
该运算结果即为该卷积内核 在输入数据 该位置 对应的输出。
输入数据在经过 一个卷积层 之后得到的输出,其大小取决于
1)卷积内核的数量。
2)每个卷积内核的大小
3)在应用卷积内核时,相邻位置之间的间隔,或称为 卷积内核的步长 stride.
根据输入数据的维度,卷积神经网络 又分为 一维、二维、三维等。
一维卷积神经网络常用来处理时间序列 或者 频谱,
二维卷积神经网络常用来处理图像
三维卷积神经网络则常被用来处理视频或者3D医学图像。

循环神经网络

在语音领域,人们处理的数据通常是以序列的形式存在的。
构成音频波形的采样点序、以及分帧、加窗之后得到的特征序列,
序列数据与其他形式的数据相比,一个重要的特定在于,序列数据通常具有时间上的相互依赖性。

例如:对于一段文字而言,其在某一位置所对应的字词,在很大程度上可以根据这一位置之前或之后的内容预测出来。
而循环神经网络 recurrent neural network RNN .的提出就是为了更好的对序列数据的时间依赖性进行建模。

循环神经网络的重点在于, 其每一层在时刻t,除了有对应的输出向量 yt,还有一个隐藏向量 ht, ht不仅取决于当前时刻的输入xt,还取决于前一时刻的隐藏向量ht-1.从而使得网络拥有对过去的记忆。

相比于在空间上复用了参数的卷积神经网络,循环神经网络实现了时间上的参数复用。

原味循环神经网络。在实际使用中这种简单的循环神经网络的效果并不理想。因为其很难保留长期的信息。并且训练过程中会遇到梯度消失问题 vanishing gradient problem .
为了克服这些困难,循环神经网络出现了很多变种。其中最有名的便是长短期记忆网络 long short-term memory LSTM .长短期记忆网络通过增加输入们 input gate 、输出门 output gate 和 遗忘门 forget gate .来维持一组拥有更长期记忆能力的节点状态向量 cell state vector .
从而实现长期记忆功能。

门控循环单元 gated recurrent unit GRU .是一种类似于长短期记忆网络的循环神经网络,其抛弃了输出门,具备更少的参数。

神经网络的优化。

神经网络通过 将 许多简单的元函数 相互联结, 实现对复杂函数的近似, 每个元函数都具备自己的参数。 因此神经网络也会拥有大量的参数。为了让神经网络实现我们希望其具备的功能,需要定义一个损失函数 loss function . 来描述神经网络在特定任务上的表现。
而神经网络的训练过程。也就是通过优化神经网络的参数,最小化损失函数的过程。

为了便于理解神经网络的优化问题,我们以通过人脸图像预测年龄为例进行讲解。
例如神经网络的输入x是一张人脸图像。y是该人脸对应的真实年龄。
而 y' =f(x; θ)是通过参数集为θ的神经网络f()计算出的预测年龄。
我们希望预测的年龄尽可能接近真实年龄,于是可以设计一个简单的损失函数 L(y,y') = (y-y')^2
如果给定一个有N张人脸图像构成的训练数据集{(xi,yi)} <= i <= N ,则希望求得一组参数θ,使得损失函数在该数据集上的和最小:
image

如果神经网络函数和损失函数 都可到,可以通过梯度下降法 gradient descent .为代表的数值优化算法求解。 在神经网络中,梯度的计算需要用到 反向传播 back-propagation 算法。 梯度下降法 可以简要表示为:
image

θk表示 第k步时神经网络的参数, 而 r>0 是梯度下降的学习率。 learning rate 。

在实际问题 中,训练数据集可能十分庞大,因此直接对整个数据集进行梯度下降法是不可行的。
在这种情况下,通常在每一步只对训练数据的一个较小的子集进行梯度下降。 称为:随机梯度下降。 stochastic gradient descent SGD

声纹识别中的神经网络

分为俩种:间接用于声纹识别和直接用于声纹识别。
前者指的是,在传统的声纹识别系统中,将一部分模块用神经网络来代替。整个框架依旧保持不变。
后者指的是:将整个声纹识别问题作为一个深度学习问题来处理。不依赖与高斯混合模型、因子分析或概率线性判别等其他方法。

  • 串联深度特征
    tandem deep feature 将神经网络间接 用于声纹识别的技术,
  • 基于神经网络的i-vector
  • 联合向量j-vector
  • 神经网络直接用于声纹识别
    没有统一的实现方法,
    1)运行时的推理逻辑的不同
    2)训练过程中的损失函数不同
    通用架构如下图:
    image
    左侧为长度不一的各个音频特征序列,这些序列可以来自不同说话人。
    每一段音频特征序列经过神经网络后,得到一个固定长度的嵌入码 d-vector .
    神经网络也常被称作 声纹编码器 speaker encoder

运行时的推理逻辑,指的是从音频特征序列得到嵌入码的过程。
根据这些嵌入码及每段音频特征序列所对应的真实说话人,可以计算出某个用以衡量嵌入码性能的损失函数。
在训练过程中,用随机梯度下降或Adam算法对损失函数进行优化,从而更新神经网络编码器的参数,直至收敛。

运行时的推理逻辑。

  • 从特征序列到嵌入码
    为了将不同的音频进行声纹相似匹配,需要将音频表示为固定维度的嵌入码,
    这一过程中的难点在于,音频本身的长度是不确定的,给定一段不定长度的音频特征序列。通过神经网络将其转换为一个固定维度的嵌入码,
    这个过程便是神经网络运行时的推理逻辑。

  • 各帧独立的逐帧推理
    各种他推理逻辑中。最简单、最直观的一种,便是将特征序列中的每一帧看作一组独立的特征,作为神经网络的输入。然后得到该帧的输出。
    这种做法通常称为 逐帧推理 per-frame inference .
    在逐帧推理方法中。由于每一帧的输入输出都是相互独立的。神经网络不需要拥有任何记忆。用简单的前馈神经网络便可。
    如果每一帧涵盖的时间范围较短。 特征较少,导致神经网络输入的信息量不足。可以使用帧叠加与帧采样,使每一帧的特征包含尽可能多的上下文信息。

神经网络的目标是将整段特征序列编码为一个固定维度嵌入码,而各帧独立的逐帧推理的方法 由于其在每一帧都有一个输出, 输出的长度取决于 输入序列的长度。所以还需要一个额外的聚合步骤,将逐帧的输出转换为固定长度的向量。、

image

  • 固定窗推理
    固定窗推理的输入序列长度是固定的。没必要逐帧处理,可以将所有音频帧叠加在一起。组成一个较大的输入。然后通过神经网络直接得到输出。

  • 全序列推理
    逐帧推理的神经网络可以处理任意长度的音频特征蓄力,固定窗推理的神经网络可以有效利用每一帧的上下文信息。
    如何将俩者的优势结合起来。需要全序列推理 full sequence inference .
    全序列推理的方法需要借助 循环神经网络 来实现。
    我么你输入音频特征序列之前。循环神经网络会重置其状态 states. 为 初始状态 inital states.

将音频特征序列中的特征帧按时间顺序依次作为输入,每当循环神经网络处理完一帧输入之后,其状态变回更新,并影响之后的输出。。

循环神经网络起到了 “记忆”的作用。使得每一帧 的输入与输出不再像逐帧推理神经网络那样是互相独立的。
时间上越接近的帧,关联越强烈。

  • 滑动窗推理
    全序列推理无法简单的通过批处理进行有效训练。
    sliding window inference 。依照事先设定好的窗大小与窗间隔,从音频特征序列 中提取出互相重叠的滑动窗。 每一个滑动窗被独立地作为循环神经网络的输入。完成推理,并得到末帧的输出。最后,取所有滑动窗的末帧输出的向量平均值,作为最终嵌入码。

声纹识别中的损失函数

除了推理逻辑,更重要的模型训练过程。 包括数据的预处理方法、损失函数的设计、优化器的选区等多方面因素。

  • 交叉熵 损失函数。
    M个说话人组成的闭集内的声纹辨认问题,M元分类 classification问题。 最常用的就是交叉熵 cross entropy .损失函数。
  • 三元损失函数。

标签:函数,音频,声纹,技术,神经网络,声纹识别,模型
From: https://www.cnblogs.com/clllll/p/16581609.html

相关文章

  • 8、开发工具软件 - 软件技术系列文章
        在实际的软件开发和项目管理过程中,都需要很多的工具软件,使用这些软件,能够提高软件人员的工作效率,笔者在总结软件技术的时候,就收集整理了一些软件工具,以便需要的......
  • 7、软件复用 - 软件技术系列文章
        软件复用主要是为了解决在实际的软件开发过程中重复的工作,在其它软件功能相同或相近的时候,直接将代码放过去然后进行下修改即可。这个也是参考的软件定制,比如购......
  • 【技术流吃瓜】python可视化大屏舆情分析“张天爱“事件网友评论
    目录一、事件背景二、微热点分析二、自开发Python舆情分析2.1Python爬虫2.2可视化大屏2.2.1大标题2.2.2词云图2.2.3条形图2.2.4饼图(玫瑰图)2.2.5地图三、演示视频一......
  • 【转载】AF_XDP技术详解
    原文信息作者:rexrock出处:https://rexrock.github.io/post/af_xdp1/目录1.用户态程序1.1创建AF_XDP的socket1.2为UMEM申请内存1.3向AF_XDPsocket注册UMEM1.4......
  • 广州三维可视化技术开发_三维可视化平台搭建_华锐互动
    三维可视化即一种利用计算机技术,再现三维世界中的物体,并能够表示三维物体的复杂信息,使其具有实时交互的能力的一种可视化技术,是对现实世界的真实再现。通过3D结合信息交接......
  • MFC技术之基于Windowns项目创建MFC程序
    第一步:创建Win32或者Windowns空项目(有main()的项目需要删除main()函数)   第二步:修改属性配置【高级】,将【MFC的使用】设置为【在共享DLL中使用MFC】或者【在静态库......
  • 5、成熟的框架 - 软件技术系列文章
        对于笔者来说,对于框架的选型和应用还是挺感兴趣的。现在市面上已经有很多的软件框架了,而且还朝着更全面更快速的进行着发展。这里笔者主要从前端、后端、UI框架......
  • 4、架构设计 - 软件技术系列文章
        架构设计主要是架构师要做的工作,其实技术经理也需要了解。对于架构,软件工程师如果想往上发展的必经之路。除了设计模式,就是架构设计的过程。这里需要熟悉设计模......
  • 汽车与芯片技术漫谈
    汽车与芯片技术漫谈参考文献链接https://mp.weixin.qq.com/s/2sAxPEK8iT1VdzLLpYtGswhttps://mp.weixin.qq.com/s/xuAIVVBZGpoCpWtRUgW58Qhttps://mp.weixin.qq.com/s/......
  • 虚拟现实技术开发发展趋势是什么,你知道吗?华锐互动
    近几年来,VR线上全景展示的热度总是处于时而上升时而下降。而就在今年疫情期间,专家提倡的“无接触式生活方式”同时也使得VR全景展示重回大众视野,成为商迪3D发展的重要转折......