发明内容
本方案的一个目的在于提供一种端到端的声纹识别方法,可有效提高声纹识别的准确率和鲁棒性。
本方案的另一个目的在于提供一种执行上述识别方法的装置。
本方案的第三个目的是提供一种存储介质和设备。
为达到上述目的,本方案如下:
本方案的第一方面提供一种端到端的声纹识别方法,该方法包括:
准备训练用声音数据集;
对所述训练用声音数据集中的声音数据进行预处理,所述预处理包括对信噪比和语速进行规整和拼接;
对预处理后的声音数据进行活动语音段检测,并将检测存在语音段的声音数据进行拼接得到语音数据;
提取所述语音数据的对数梅尔特征;
基于所述对数梅尔特征构建端到端的深度神经网络模型,在模型训练的开始阶段,每个MiniBatch中轮流加入部分损失值最大的正样本和损失值最大的负样本;在训练结果逐渐稳定后,将损失值大于预定阈值的样本剔除;根据模型训练的结果提取所述声音数据的声纹特征,建立说话人声纹数据库;
基于所述说话人声纹数据库对说话人声音数据进行识别;
其中,所述端到端的深度神经网络模型训练所采用的损失函数具有如式(1)所示的公式,
kyloss=l1+l2 (1);
式(1)中,kyloss表示损失函数,l1表示类间距离,l2表示类内距离,l1=max(san- sap+alpha,0),其中alpha设为0.5;l2=max(-0.5*sap,0)+max(0.5*san,0);san为不同用户对应的声纹特征的余弦距离,sap为相同用户对应的声纹特征的余弦距离。
在一个优选的实施例中,所述对信噪比和语速进行规整和拼接包括:将获取的原始声音、叠加了噪音的声音、调整语速的声音拼接在一起。
在一个优选的实施例中,所述对预处理后的声音数据进行活动语音段检测,并将检测存在语音段的声音数据进行拼接得到语音数据包括:
将拼接后的声音数据集进行分帧,使用双门限法进行基本帧的VAD;对基
本帧的VAD结果进行中值滤波;将通过VAD检测的声音数据拼接得到语音数据。
在一个优选的实施例中,所述端到端的深度神经网络训练包括:
将从各用户标识对应的声音数据中分别提取的对数梅尔特征作为训练数据;
利用深度神经网络对各声音数据的对数梅尔特征进行学习,输出各声音数据的声纹特征;
利用所述各声音数据的声纹特征计算损失函数,利用所述损失函数对所述深度神经网络进行调参,以最小化所述损失函数值。
在一个优选的实施例中,基于所述说话人声纹数据库对说话人声音数据进行识别包括:
通过所述端到端的深度神经网络模型提取说话人声音数据的声纹特征;
利用所述说话人声音数据的声纹特征,注册所述说话人声音数据所对应用户标识的声纹模型;
将所述声纹特征与声纹数据库中全部或部分的声纹数据通过余弦距离进行相似度对比,若匹配到某说话人,将该声纹特征更新到对应用户标识的声纹数据库中。
在一个优选的实施例中,将所述声纹特征与声纹数据库中全部或部分的声纹数据通过余弦距离进行相似度对比,若匹配到某说话人,将该声纹特征更新到对应用户标识的声纹数据库中进一步包括:
将与所述用户标识对应的声纹特征按注册时间从近期到远期排序,以注册时间排序前5%的声纹特征的均值向量作为近期声纹特征向量值,其他声纹特征的均值向量作为历史声纹特征向量值,将所述说话人声音数据的声纹特征向量与已注册的各用户标识的声纹模型进行匹配,确定所述说话人声音数据对应的用户标识。
第二方面,提供一种端到端的声纹识别装置,该装置包括:
预处理单元,用于准备训练用声音数据集;
对所述训练用声音数据集中的声音数据进行预处理,所述预处理包括对信噪比和语速进行规整和拼接;
对预处理后的声音数据进行活动语音段检测,并将检测存在语音段的声音数据进行拼接得到语音数据;
提取所述语音数据的对数梅尔特征;
特征提取单元,用于基于所述对数梅尔特征构建端到端的深度神经网络模型,在模型训练的开始阶段,每个MiniBatch中轮流加入部分损失值最大的正样本和损失值最大的负样本;在训练结果逐渐稳定后,将损失值大于预定阈值的样本剔除;根据模型训练的结果提取所述声音数据的声纹特征,建立说话人声纹数据库;
识别单元,基于所述说话人声纹数据库对说话人声音数据进行识别;
其中,所述端到端的深度神经网络模型训练所采用的损失函数具有如式(1)所示的公式,
kyloss=l1+l2 (1);
式(1)中,kyloss表示损失函数,l1表示类间距离,l2表示类内距离,
l1=max(san-sap+alpha,0),其中alpha设为0.5;l2=max(-0.5*sap,0)+max(0.5* san,0);san为不同用户对应的声纹特征的余弦距离,sap为相同用户对应的声纹特征的余弦距离;
在一个优选的实施例中,所述装置还包括:
模型训练单元,利用训练数据训练端到端的深度神经网络模型;
声纹注册单元,利用所述说话人声音数据的声纹特征,注册所述说话人声音数据所对应用户标识的声纹模型;或者,
声纹匹配单元,将与用户标识对应的声纹特征按注册时间从近期到远期排序,以注册时间排序前5%的声纹特征的均值向量作为近期声纹特征向量值,其他声纹特征的均值向量作为历史声纹特征向量值,将所述说话人声音数据的声纹特征向量与已注册的各用户标识的声纹模型进行匹配,确定所述说话人声音数据对应的用户标识。
第三方面,提供一种存储介质,所述存储介质上存储有计算机程序,所述程序在被一个或多个计算机执行时,使得所述一个或多个计算机执行如上述任一所述方法中执行的操作。
第四方面,提供一种电子设备,包括存储器,包括一个或者多个程序;一个或者多个处理器,耦合到所述存储器,执行所述一个或者多个程序,以实现如上述任一项所述方法中执行的操作。
本方案的有益效果如下:
本方案从数据预处理、端到端的模型、损失函数的改进、训练过程的改进、匹配算法的改进等方面进一步提升了声纹识别的准确率。
具体实施方式
下面将结合附图对本方案的实施方式作进一步地详细描述。显然,所描述的实施例仅是本方案的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本方案中的实施例及实施例中的特征可以相互组合。
说明书和权利要求书及上述附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备,不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
基于端到端的声纹识别方案虽然可以提升声纹识别的准确率,但仍然存在依赖海量数据、环境噪音、识别结果鲁棒性差等问题;本方案通过对数据的预处理获得用于训练的低层声学特征,再基于深度神经网络提取声音数据的高层声学特征,在训练深度神经网络时,对损失函数进行改进,对训练过程及匹配算法也进行了改进。从而提升了声纹识别的准确率。
在进行端到端的深度神经网络模型的训练时,需要首先对训练数据中的声音数据进行声学特征的提取,即进行预处理。预处理获得的声学特征相对于经过端到端的深度神经网络模型提取得到的声学特征粒度更粗,包含信息量也更粗;相反,经过端到端的深度神经网络模型处理后得到的声学特征相对于预处理获得的声学特征粒度更细,包含信息量也更细致,更适于建立声纹模型,以进行用户声纹的建立。在本发明实施例中,为了对这两种声学特征进行区分,将对声音数据进行预处理后得到的声学特征以梅尔特征的对数形式表示,称为log_mel特征(对数梅尔特征);将经过端到端的深度神经网络模型对对数梅尔特征进行处理后,得到的声学特征称为声纹特征。
在本方案中存在三个阶段:端到端的深度神经网络模型的建立阶段、利用端到端的深度神经网络模型提取声纹特征的阶段及利用提取的声纹特征进行识别的阶段。其中三个阶段互相独立,端到端的深度神经网络模型的建立阶段可以是预先执行的阶段,但也可以在后续过程中不断对端到端的深度神经网络模型进行更新。
如图1所示,本方案的端到端声纹识别方法包括如下步骤:
S100,准备训练用声音数据集;
对所述训练用声音数据集中的声音数据进行预处理,所述预处理包括对信噪比和语速进行规整和拼接;
对预处理后的声音数据进行活动语音段检测,并将检测存在语音段的声音数据进行拼接得到语音数据;
提取所述语音数据的log_mel特征;
在一个实施例中,预先采集已知用户的声音数据,本方案使用的声音数据
集中的原始声音包括多个开源说话人的原始声音数据,囊括了多种语言,多个年龄段,男女比例相近;
录制不同环境下的环境噪音如户外、办公室、银行、车站等场景的环境噪
音;将噪声声音重采样到16000HZ并做声强归一化;将环境噪音按照一定信噪比叠加到原始声音中;将原始声音按16000HZ重采样,通过重采样的方式模拟语速变化,最终将语速变成原始语速的0.8~1.2倍之间的随机倍数;将原始声音、叠加了噪音的声音、调整语速的声音拼接在一起获得说话人声音数据集;
将拼接后的声音数据集按照每320个采样点进行分帧,使用双门限法进行
基本帧的语音活动段检测(VAD);对基本帧的VAD结果进行中值滤波,中值滤波的窗值设置为5;将说话人声音数据中通过VAD检测的数据拼接起来获得语音数据集;
对拼接起来的说话人声音数据中通过VAD检测获得的语音数据进行
log_mel特征提取并进行MVN(Mean and Variance Normalization)操作;提取log_mel特征时,设置帧长为25毫秒、帧间步长为10毫秒、滤波器的个数为64、FFT的点数设置为512;
通过上述的预处理步骤,获得各用户声音数据的log_mel特征;
这样,就可以得到各用户标识对应的log_mel特征。其中本方案并不限定用户标识的具体类型,可以是任意类型的标识,只要能够区分用户即可。在训练中可以包含同一用户对应的不同声音数据的log_mel特征,不同用户对应的声音数据log_mel特征,等等。训练数据中各log_mel特征均具有对应的用户标识作为标签。
S200,基于所述log_mel特征构建端到端的深度神经网络模型,在模型训练的开始阶段,每个单次送给网络的数据块(MiniBatch)中轮流加入部分损失值最大的正样本和损失值最大的负样本;在训练结果逐渐稳定后,将损失值大于预定阈值的样本剔除;根据模型训练的结果提取所述声音数据的声纹特征,建立说话人声纹数据库;
本步骤中的端到端的深度神经网络模型的建立阶段是被预先执行的,本方案在构建端到端的深度神经网络时提出了新的损失函数,在类内距离、类间距离、距离的有效性上做出全方位的约束;
本步骤中,首先利用深度神经网络对作为训练用的各声音数据的log_mel特征进行学习,输出各声音数据的声纹特征。然后利用各声音数据的声纹特征计算损失函数,损失函数反馈给深度神经网络,以便调整深度神经网络的参数以最小化该损失函数。
在模型训练的开始阶段,每个批训练数据集中轮流加入部分损失值最大的正样本和损失值最大的负样本,这样可使得分类错误的样本得到更多的关注;在训练结果逐渐稳定后,将损失值特别大的样本剔除,剔除的样本可能是无效的样本。
在一个优选的实施例中,损失函数具有如式(1)所示的公式,
kyloss=l1+l2 (1);
式(1)中,kyloss表示损失函数,l1表示类间距离,l2表示类内距离,
l1=max(san-sap+alpha,0),其中alpha设为0.5;l2=max(-0.5*sap,0)+max(0.5* san,0)
;san为不同用户对应的声纹特征的余弦距离,sap为相同用户对应的声纹特征的余弦距离;
训练深度神经网络过程中,当损失函数值几乎不再变化时,将san值大于0.2的不同用户对应的声纹特征从训练数据集中删除,将sap值小于0.2的相同用户对应的声纹特征从训练数据集中删除。
为了方便对本方案提供的端到端的深度神经网络模型(ResLike-dnn)的理解,对该端到端的深度神经网络模型的结构进行介绍。如图2所示,本方案中的端到端的深度神经网络模型包括深度神经网络层、重塑层、池化层、仿射层和长度归一化层以及损失函数层。
其中,深度神经网络层可以采用CNN、GRU(Gated Recurrent Unit,门控递归单元)等,当然也可以采用其他诸如RNN、LSTM等其他类型的深度神经网络。由于CNN相比较RNN、LSTM等而言,能够更加有效地减小频谱变化以及将频谱相关性在声学特征中进行体现,因此在本方案中优选CNN这种类型的深度神经网络。
然而,尽管深度神经网络具有很好地学习能力,但更难进行训练,在一定深度情况下准确性反而下滑。为了解决该问题,本方案提供的深度神经网络(ResLike-dnn)是一种类似ResNet(Residual Net,残差网络)型的CNN。
对本方案提供的端到端的深度神经网络模型(KYNET)介绍如下。
在一个实施例中,如图2所示,端到端的深度神经网络模型KYNET包含深度神经网络层(ResLike-dnn),池化和L2归一化层以及损失层,如图3所示,深度神经网络层包含若干残差卷积神经网络,如图4所示,每个残差卷积神经网络包含卷积层、批处理归一化层、激活函数层和若干堆叠残差块,如图5所示,每个堆叠残差块包括低层输出和高层输入间的直接连接,残差块可以包括两个卷积层和两个激活层。其中,两个卷积层可以包括诸如3×3的过滤器和1×1的stride(步幅)。每个残差快包括相同的结构,并且跳转连接是对x的相同映射。若通道的数量增加,则可以使用一个卷积层(例如具有5×5的过滤器和2×2的stride)。因此,频率维度始终在卷积层中保持恒定。经过研究发现,语音识别在时间维度上对stride并不敏感。在本方案中,可以使用ReLU(Rectified LinearUnits,修正线性)函数作为所有激活层的非线性处理。
紧接着深度神经网络层的是池化和L2归一化层,池化和归一化层包括:重塑层、池化层、仿射层和L2归一化层。
其中,重塑层,对深度神经网络层输出的结果做变形,达到降维的结果;
池化层对重塑层的输出结果求均值;池化层用于将帧级别的输入转变为句子级别的表示,即将帧级别的声纹特征进行取平均,得到句子级别的声纹特征。
经过池化(Pooling)层的处理,使得本方案提供的声学特征提取模型能够处理
不同时长的语句,解决了文本无关的情况。
仿射层将句子级别的声纹特征投射到预设的维度,例如投射到640维度。
L2归一化层将仿射层输出的句子级别的声纹特征的长度进行规整,使模为1。
本方案中,损失层(KYLOSS)封装了相似度计算及损失函数计算过程,采用如式(1)所示的损失函数对深度神经网络层进行反馈训练,以最大化相同用户的声纹特征之间的相似度且最小化不同用户的声纹特征之间的相似度。
损失层可以采用三个样本作为输入:锚样本(AnchorEmbeds),包括一个用户的句子级别的声纹特征;正样本(PosEmbeds),包括与锚样本同一用户的另一句子级别的声纹特征;负样本(NegEmbeds),包括与锚样本不同用户的句子级别的声纹特征。将上述样本构成一个三元组。
三元组表示为:
AnchorEmbeds=Embeds[0:Batchsize]
PosEmbeds= Embeds[Batchsize+1:2* Batchsize]
NegEmbeds= Embeds[2*Batchsize+1:3* Batchsize]
计算AnchorEmbeds与PosEmbeds之间的余弦距离记为sap,计算AnchorEmbeds与NegEmbeds之间的余弦距离记为san;l1表示类间距离,l2表示类内距离,
l1=max(san-sap+alpha,0),其中alpha设为0.5;l2=max(-0.5*sap,0)+max(0.5* san,0)
;损失函数如式(1)所示,
kyloss=l1+l2 (1)
损失层对深度神经网络层进行反馈,以使得锚样本和正样本之间的余弦相似度(在本方案中样本之间的相似度采用余弦相似度体现,但不排除其他相似度计算方式)大于锚样本和负样本之间的余弦相似度。
训练过程中,当经历多个epoch(比如10000)并且损失值几乎不再变化时,将san中值大于0.2对应的[Ancho,Neg]从训练集中删除,将sap中值小于-0.2对应的[Ancho,Pos]从训练集中删除;将删除了部分[Ancho,Neg],[Ancho,Pos]的数据集继续训练。
S300,基于所述说话人声纹数据库对说话人声音数据进行识别;
在一个实施例中,如图6所示,步骤S300进一步包括:
S310,通过所述端到端的深度神经网络模型提取说话人声音数据的声纹特征;
S320,利用所述说话人声音数据的声纹特征,注册所述说话人声音数据所对应用户标识的声纹模型;
在S320中进一步包括:
计算所述声纹特征的各个向量之间的余弦距离的平均值;
当所述平均值小于0.5时,由该条声音提取的特征不作为声纹特征;
当所述平均值大于等于0.5时,将所述平均值写入声纹数据库;
S330,将所述声纹特征与声纹数据库中全部或部分的声纹数据通过余弦距离进行相似度对比,若匹配到某说话人,将该声纹特征更新到对应用户标识的声纹数据库中。
在S330中进一步包括:将与所述用户标识对应的声纹特征按注册时间从近期到远期排序,以注册时间排序前5%的声纹特征的均值向量作为近期声纹特征向量值,其他声纹特征的均值向量作为历史声纹特征向量值,将所述说话人声音数据的声纹特征向量与已注册的各用户标识的声纹模型进行匹配,确定所述说话人声音数据对应的用户标识。
对于预先训练得到的端到端的深度神经网络模型,由于其从训练数据中已经完成从log_mel特征到声纹特征的自学习,因此将按步骤S100提取出的说话人声音数据的log_mel特征输入端到端的深度神经网络模型,端到端的深度神经网络模型就能够输出说话人声音数据的声纹特征。
在得到说话人声音数据的声纹特征后,可以利用声纹特征进行后续应用的处理,例如在S320中,利用说话人声音数据的声纹特征,注册该说话人声音数据所对应用户标识的声纹模型,或者在S330中,将说话人声音数据的声纹特征与已注册的各用户标识的声纹模型进行匹配,确定说话人声音数据对应的用户标识。
在S320中,若说话人声音数据对应的用户标识已知,则可以利用提取的声纹特征注册该用户标识对应的声纹模型。在S330中,若说话人声音数据对应的用户标识未知,则可以利用提取的声纹特征与声纹数据库中各已注册的声纹模型进行匹配,例如通过计算提取的声纹特征与声纹数据库中各声纹模型之间相似度的方式进行匹配。若匹配到某个声纹模型,则可以确定该说话人声音数据所对应的用户标识。
上述方法可以应用于语音识别系统中,执行主体可以为对应装置,该装置可以是位于用户设备的应用,或者还可以为位于用户设备的应用中的插件或软件开发工具包(Software Development Kit,SDK)等功能单元。其中,用户设备可以包括但不限于诸如:智能移动终端、智能家居设备、网络设备、可穿戴式设备、智能医疗设备、PC(个人计算机)等。其中智能移动设备可以包括诸如手机、平板电脑、笔记本电脑、PDA(个人数字助理)、互联网汽车等。智能家居设备可以包括智能家电设备,诸如智能电视、智能空调、智能热水器、智能冰箱、智能空气净化器等等,智能家居设备还可以包括智能门锁、智能电灯、智能摄像头等。网络设备可以包括诸如交换机、无线网络接入点、服务器等。可穿戴式设备可以包括诸如智能手表、智能眼镜、智能手环、虚拟现实设备、增强现实设备、混合现实设备(即可以支持虚拟现实和增强现实的设备)等等。智能医疗设备可以包括诸如智能体温计、智能血压仪、智能血糖仪等等。
如图7所示,声纹识别装置包括:预处理单元01,特征提取单元02和识别单元03。
预处理单元01用于
用于准备训练用声音数据集;
对所述训练用声音数据集中的声音数据进行预处理,所述预处理包括对信噪比和语速进行规整和拼接;
对预处理后的声音数据进行活动语音段检测,并将检测存在语音段的声音数据进行拼接得到语音数据;
提取所述语音数据的log_mel特征;
特征提取单元02用于用于基于所述log_mel特征构建端到端的深度神经网络模型,在模型训练的开始阶段,每个MiniBatch中轮流加入部分损失值最大的正样本和损失值最大的负样本;在训练结果逐渐稳定后,将损失值大于预定阈值的样本剔除;根据模型训练的结果提取所述声音数据的声纹特征,建立说话人声纹数据库;
识别单元03,用于基于所述说话人声纹数据库对说话人声音数据进行识别。
该装置进一步还包括模型训练单元(图中未示出),声纹注册单元(图中未示出)和声纹匹配单元(图中未示出)。
模型训练单元,利用训练数据训练端到端的深度神经网络;
声纹注册单元,利用所述说话人声音数据的声纹特征,注册所述说话人声音数据所对应用户标识的声纹模型;
声纹匹配单元,将与用户标识对应的声纹特征按注册时间从近期到远期排序,以注册时间排序前5%的声纹特征的均值向量作为近期声纹特征向量值,其他声纹特征的均值向量作为历史声纹特征向量值,将所述说话人声音数据的声纹特征向量与已注册的各用户标识的声纹模型进行匹配,确定所述说话人声音数据对应的用户标识。
图8示出了适于用来实现本方案实施方式的示例性计算机系统/服务器012的框图。图8显示的计算机系统/服务器012仅仅是一个示例,不应对本方案实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统/服务器012以通用计算设备的形式表现。计算机系统/服务器012的组件可以包括但不限于:一个或者多个处理器或者处理单元016,系统存储器028,连接不同系统组件(包括系统存储器028和处理单元016)的总线018。总线018表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC) 总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器012典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器012访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器028可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)030和/或高速缓存存储器032。计算机系统/服务器012可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统034可以用于读写不可移动的、非易失性磁介质(图8未显示,通常称为“硬盘驱动器”)。尽管图8中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM ,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线018相连。存储器028可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块042的程序/实用工具040,可以存储在例如存储器028中,这样的程序模块042包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块042通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器012也可以与一个或多个外部设备014(例如键盘、指向设备、显示器024等)通信,在本发明中,计算机系统/服务器012与外部雷达设备进行通信,还可与一个或者多个使得用户能与该计算机系统/服务器012交互的设备通信,和/或与使得该计算机系统/服务器012能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口022进行。并且,计算机系统/服务器012还可以通过网络适配器020与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器020通过总线018与计算机系统/服务器012的其它模块通信。应当明白,尽管图8中未示出,可以结合计算机系统/服务器012
使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元016通过运行存储在系统存储器028中的程序,从而执行各种功能应用以及数据处理。
随着时间、技术的发展,介质含义越来越广泛,计算机程序的传播途径不再受限于有形介质,还可以直接从网络下载等。可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
由以上描述可以看出,本方案提供的上述方法、装置、设备和计算机存储介质可以具备以下优点:
1)本方案的端到端的深度神经网络模型能够自学习从而获得训练目标的最优声纹特征。
2)本方案的ResLike-dnn深度神经网络,能在采用较高层级深度的神经网络情况下,保证特征提取的准确性和鲁棒性。
下面,通过具体实施例对本方案进行详细介绍。
一.提取训练数据(log_mel特征)
选取10000人的说话人数据作为训练数据集,每个说话人的时长为5分钟,包含33种不同国家和地区的语言,男女比例约为1:1;
假设数据集中某一说话人原始声音为S1,Snoise为已录制的环境噪音, S2为叠加环境噪声后的声音;
对原始声音进行重采样操作S3=Resample(S1,SampleRatio) ,其SampleRatio为[0.8,1.2]之间的随机值;
计算S3,将S3和Snoise的声音长度分别记为L1,L2;S3叠加的长度为MIN(L1,L2),最终S3=S1+Rand*0.5*Snoise,其中Rand为0到1之间的随机数。最终S={S1,S2,S3},S为S1,S2,S3拼接后的数据;
将预处理之后的数据S使用双门限法进行活动语音段检测(VAD),其中检测帧的长度为320个采样点,记做T={t1,t2,t3……tn},tn的取值为0或1,0代表静音段,1代表语音段;
对T做中值滤波,T’=medfilt(T,smooth Length),其中smooth Length为滤波窗大小,其值设为5;
将tn为1的对应帧依次拼接起来记做SVadi,其中为说话人编号;
对SVadi提取log_mel特征;帧长为25毫秒、帧间步长为10毫秒、滤波器的个数为64、FFT的点数设置为512;提取的结果记为Fea i ,Fea i 为n*64的矩阵,其中n为帧的个数;
将Fea i 按每200个帧进行拆分并执行MVN,拆分的结果为m*200*64,其中m=n/200,m可以近似认为是语音段的个数;
计算所有说话人的Fea i ,随机选取8000个说话人作为训练数据集记为trainFeas,2000个为测试数据集记为testFeas,其中trainFeas的维度为8000*m
*200*64,testFeas的维度为2000*m*200*64。
二.训练端到端的深度神经网络模型
如图9所示,将训练数据集的语音分为三种,分别用Anchor,Pos,Neg表示,训练数据集表示为MiniBatch=[Anchor,Pos,Neg],其中Anchor,Pos,Neg均为Batchsize*m*200*64的多维数组;其中的Batchsize=Anchorsize+badpairsize;
Anchorsize的值设为100,badpairsize的值设为16。
在训练的过程中,第一个MiniBatch选择的Anchor为从trainFeas中随机挑选出Batchsize个不同说话人的Fea,Pos为随机挑选的与Anchor是同一说话人但不同语音段的Fea,Neg为随机挑选的与Anchor是不同说话人的Fea;
从第二个MiniBatch开始,选择的Anchor分为两部分,一部分是随机选取Anchor,第二部分是经过上轮训练后,相似度最高的前Anchor个[Anchor,Neg]或相似度最低的前badpairsize个[Anchor,Pos]中的Anchor;
[Anchor,Neg]和[Anchor,Pos]选择方式为轮流选择;
reslike-dnn的结构与resnet相近,结构如图10所示;
其中Conv_and_res_block表示一种基本的结构,20,40,80表示输出神经元的个数;
Conv_and_res_block的结构图如图11所示;
Conv2D_5*5_2代表卷积核大小为5*5,步长为2的二维卷积;卷积核使用glorot_uniform方法初始化;
BN代表Batch Normalization层,参数使用tensorflow默认参数;
Cliped_relu在relu的基础上增加输出数值不超过20的约束;
Block1,Block2,Block3拥有相似的结构,输出神经元的个数分别对应20,40,80;
Block1 的结构如图12所示;
其中Conv2D_3*3_1代表卷积核大小为3*3,步长为1的二维卷积;卷积核使用glorot_uniform方法初始化;
BN代表Batch Normalization层,参数使用tensorflow默认参数;
Cliped_relu在relu的基础上增加输出数值不超过20的约束;
加号表示对应的tensor加法;
Re shape-layer对reslike-dnn的结果做变形,reslike-dnn的输出tensor维度为N*25*8*80,其中N为MiniBatch的样本个数,25表示宽,8表示高,80为输出神经元的个数;经过Re shape-layer之后的tensor维度为N*25*640;
Avg-layer对Re shape-layer的结果的第一个维度求均值,Avg-layer之后的tensor的维度为N*640;
Affine-layer为全连接层,输出维度为N*1024;
Lenthnorm-layer做L2归一化,该层的输出结果即为说话人的Embedding,输出维度为N*1024,输出结果记为Embeds;
KYLOSS层封装了相似度计算及损失函数计算过程,首先分离出Anchor,Pos,Neg对应的Embedding,即:AnchorEmbeds=Embeds[0: Batchsize],PosEmbeds=Embeds[Batchsize +1:2*Batchsize],
NegEmbeds=Embeds[2*Batchsize+1:3*Batchsize],计算AnchorEmbeds与PosEmbeds之间的余弦距离记为sap,计算AnchorEmbeds与NegEmbeds之间的余弦距离记为san;
本实施例从最大化类间距离和最小化类内距离两方面约束损失函数,类间距离约束定义为l1=max(san-sap+alpha,0),其中alpha设为0.5;
类内距离的约束方法为l2=max(-0.5*sap,0)+max(0.5*san,0);
最终的损失函数为kyloss=l1+l2;
训练过程中,当经历多个epoch(比如10000)并且损失值几乎不再变化时,将san中值大于0.2对应的[Anchor,Neg]从训练集中删除,将sap中值小于-0.2对应的[Anchor,Pos]从训练集中删除;将删除了部分[Anchor,Neg],[Anchor,Pos]的数据集继续训练。
三.待识别声音的注册和匹配
此步骤包括声纹的注册和声纹的验证(检索),声纹注册的流程如图13所示;
首先按照步骤一中的方法计算声音数据的Fea,通过步骤二的端到端的深度神经网络模型计算声纹特征(Embedding),Embedding的维度为N*1024;
Embedding各个向量之间的余弦距离的平均值记做meanDist;
当meanDist小于0.5时,表示该条声音提取的特征不能作为声纹特征,可能的原因是环境噪音、说话人配合度等问题;
当meanDist大于等于0.5时,将Embedding的均值写入声纹数据库;单个说话人的Embedding个数最大设置为1000;
在声纹的验证(检索)阶段,采用与声纹注册相同的方法计算Embedding,Embedding的维度为N*1024;计算Embedding的均值向量记为srcEmbedding,srcEmbedding的维度为1*1024;
从数据库中取出与该声音对应的用户标识的Embedding并计算hisEmbedding,recentEmbedding,维度皆为M*1024,其中M表示取出的与该声音对应的用户标识个数;
将声纹数据库中某个(所有)说话人的Embedding按注册时间从近期到远期排序,选择前5%的Embedding计算的均值作为recentEmbedding,其维度为M*1024,其他Embedding计算的结果作为hisEmbedding,其维度为M*1024;
分别计算
srcEmbedding与
hisEmbedding和
recentEmbedding的余弦距离,计算得到的余弦距离分别记为
disthistory和
distrcent,
disthistory和
distrcent的维度均为
;
声纹验证时(一对一匹配),disthistory和distrcent的维度为1*1,当满足条件max(disthistory,distrcent )>0.5时通过验证;
若通过验证,则将srcEmbedding添加到对应说话人的声纹库中。若超过最大范围,则删除最早的一条Embedding;
通过对近期声纹特征、远期声纹特征分开处理的方式,可有效提高匹配的鲁棒性;
声纹检索时(一对多匹配),dishistory和disrecent的维度为M*1,M>1;
找出dishistory中的最大值及对应说话人编号,记为maxdishistory和lochistory;
找出disrecent中的最大值及对应说话人编号,记为maxdisrecent和locrecent;
若maxdishistory和maxdisrecent均小于0.5,则检索失败;计算spearlerid,若maxdisrecent>maxdishistory,则spearlerid=locrecent, 否spearlerid=lochistory;
spearlerid即为检索到的说话人;
若匹配成功,则将srcEmbedding添加到spearlerid对应的声纹库中。若超过最大范围,则删除最早的一条Embedding。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定,对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动,这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。