作者 |OngKoonHan
编译 |Flin
起源 |towardsdatascience
在我大学的 Android 开发课程的组我的项目局部中,咱们的团队构建并部署了一个认证零碎,通过谈话人的语音配置文件进行认证。
在我上一篇文章(请参阅下一部分)形容了语音认证零碎的高级体系结构之后,本文将深入探讨所应用的深度学习模型的开发过程。
我以前的文章能够在这里找到(一个带有挪动部署的高级语音认证零碎)。
- https://medium.com/@ongkoonha…
在这篇简短的文章中,我将形容开发语音认证模型所波及的不同阶段,并探讨在学习过程中遇到的一些问题。
这是文章的概述:
- 问题陈说
- 高级模型设计
- 数据预处理
- 比照学习语音编码器
- 身份验证的二进制分类器
- 模型体现
问题陈说
在开始之前,咱们须要弄清楚咱们是如何试图构建语音认证问题的。
语音认证次要有两种形式(广义地说):谈话人辨认和谈话人验证。这两种办法尽管密切相关,但在比拟两种零碎的相干平安危险时,它们将导致两个零碎具备截然不同的个性。
问题定义:
谈话人辨认:n 分类工作:给定一个输出语音,从 n 个已知谈话人(类)中找出正确的谈话人。
谈话人验证:二元分类工作:给定一个申明身份的谈话者的输出话语,确定该申明身份是否正确。
咱们能够看到,在 谈话人辨认 中,咱们假如给定的输出话语属于咱们曾经意识的谈话人(兴许是办公环境),咱们试图从 n 个已知的谈话人(类)中选出最匹配的。
相同,在 谈话人验证 中,咱们假如咱们不晓得给定输出话语属于谁(事实上咱们不须要晓得)。咱们关怀的是给定的一对输出话语是否来自同一个人。
精确地说,从整个谈话人验证零碎的角度来看,零碎“晓得”谈话人宣称本人是“已知”的人,而从模型的角度来看,模型只接管一对语音样本并判断它们是否来自同一个人。
设想一下应用一个惯例的用户名和明码认证零碎。零碎晓得你宣称是谁(用户名),并检索参考明码的存储正本。然而,明码查看器只查看参考明码是否与输出明码匹配,并将验证后果返回给验证零碎。
在此我的项目中,语音身份验证问题被结构为谈话者验证问题。
旁白:
在这一点上,值得注意的是,还有另一种类型的语音剖析问题,称为谈话人分类(Speaker Diarisation),它试图拆散出多人同时讲话的源信号。
谈话人分类波及多人同时讲话的场景(设想一下在两张满是人的桌子之间放一个麦克风),咱们试图拆散出每一个独特的谈话人的语音音频波形。这可能须要多个麦克风从不同的角度捕获同一场景,或者只须要一个麦克风(最艰难的问题)。
咱们能够看到这会变得非常复杂。一个例子是辨认在给定对话的录音中谁在讲话。在试图给谈话人起名字(谈话人辨认)之前,必须先拆散对话中每个人的语音信号(谈话人分类)。当然,存在混合办法,这是一个沉闷的钻研畛域。
高级模型设计
转换数据以进行迁徙学习—对于这个工作,我心愿尽可能地利用迁徙学习,以防止本人构建一个简单而高效的模型。
为了实现这一指标,语音音频信号被转换成相似某种图像的声谱图。将音频转换为声谱图后,我便能够应用 PyTorch 中可用的任何风行图像模型,例如 MobileNetV2,DenseNet 等。
其中一个演讲者的声谱图
预先,我意识到我能够应用基于小波变换(WT)的办法来代替基于傅立叶变换变换(FT)的 Melspectrogram 来取得“更清晰”的光谱图图像。
Youtube 视频中的一个演示(https://youtu.be/g8MfWGibjT8)比拟了心脏心电信号的小波变换和傅立叶变换在“图像品质”上的差别,结果表明,小波变换失去的声谱图在视觉上比傅立叶变换更“清晰”。
比照学习的杠杆作用:大家都相熟的比照学习的经典例子是应用三重态损失的设置。此设置每次编码 3 个样本:参考样本、正样本和负样本(2 个候选样本)。指标是减小参考样本和正样本之间编码向量的间隔,同时减少参考样本和负样本之间编码向量的间隔。
在我的办法中,我不想将候选样本的数量限度在 2 个。相同,我应用了一种相似于 SimCLR(Chen 等人,2020)的办法,即应用多个候选样本,其中一个样本是正样本。而后“比照分类器”被迫从一堆候选样本中选出正样本。
两阶段迁徙学习法:为了解决谈话人验证问题,咱们将分两个阶段训练模型。
首先,通过比照学习对谈话人语音编码器进行训练。如前所述,比照学习将波及多个候选样本,而不是通常的三重态损失设置的正负对。
其次,在事后训练好的语音编码器上训练二元分类器。这将容许语音编码器在用于此传输学习工作(二进制分类器)之前独自进行训练。
数据预处理
VoxCeleb1 数据集:为了训练模型辨认谈话人的语音配置文件(无论他 / 她说了什么),我抉择应用 VoxCeleb1 公共数据集。
VoxCeleb1 数据集蕴含多个扬声器在野外的音频片段,也就是说,这些扬声器在“天然”或“惯例”设置下讲话。对数据集中的演讲者进行访谈,并对数据集中的音频片段进行治理,使每个片段都蕴含演讲者正在谈话的访谈片段。
这个数据集蕴含了每个谈话人在不同的访谈设置下的多个访谈,并且应用了不同类型的设施,这给了我心愿语音认证零碎配合应用的可变性。
对于这个我的项目,只应用音频数据(视频数据可用)。还有其余的认证零碎试图合并多种数据模式(比方视频和音频联合起来,以检测语音是否在现场生成),但我认为这超出了我的我的项目范畴。
音频波形到声谱图:为了可能利用风行的图像模型架构,语音音频信号被转换成相似某种图像的声谱图。
首先,将来自同一扬声器的多个短音频样本组合成一个长音频样本。因为 mel 谱图是基于短时傅里叶变换(STFT)的,因而能够将整个长音频样本一次性转换成 mel 谱图,并从长谱图中失去更小的谱片。
因为长音频样本是由单个惟一谈话人的较小音频样本组成的,因而从长样本中提取片段应该会迫使模型专一于从每个独自谈话的人的语音配置文件中找出独特的特色。
来自一个扬声器的串联音频样本:
接下来,应用 LibROSA(Librosa)库将长音频样本转换为频谱图。以下是应用的要害参数:
- Target sampling rate(指标采样率): 22050
- STFT window: 2048
- STFT hop length: 512
- Mels: 128
而后将功率谱转换为对数级的分贝。因为咱们是用图像网络分析的,所以咱们心愿光谱图中的“images”特色略微均匀分布。
一个扬声器的混音谱图
创立“images”:采样是通过从长光谱图中宰割较小的光谱图来实现的。
光谱图“images”创立为 128x128x3 阵列,格局为 RGB 图像。在长谱图上随机选取一个起始点,对每个新切片滑动半步(128/2=64),失去三个 128×128 的谱图切片。而后用 [-1,1] 之间的最大绝对值对“images”进行标准化。
最后,我复制同一个光谱片 3 次,将“灰度”图像转换为“RGB”图像。然而,我决定将更多的信息打包到每个光谱图“images”中,为每个“RGB”图像放入 3 个稍有不同的切片,因为这 3 个通道不像一般 RGB 图像那样具备通常的含意。应用这种滑动技术后,性能仿佛略有改善。
比照学习语音编码器
数据采样 —— 以下是用于语音编码器比照学习的数据采样的一些详细信息。
[** 频谱图切片将称为“图像”]
对于每个期间,将 200 个(总共 1,000 个)随机全长频谱图加载到内存中(“子样本”)(因为资源限度,并非所有 1000 个全长频谱图都能够一次加载)。
每行应用 1 个参考样本和 5 个候选样本。候选图像蕴含 4 个负样本和一个正样本(随机混洗),并且图像是从子样本中随机生成的。
每个期间有 2,000 行,批大小为 15(MobileNetV2)和 6(DenseNet121)。
多暹罗编码器网络 — 对于编码器网络,应用的根本模型是 MobileNetV2 和 DenseNet121。编码器层大小为 128(取代根本模型中的 Imagenet 分类器)。
为了便于比照学习,建设了一个多连体编码器模型包装器作为 torch 模块。该包装器对每个图像应用雷同的编码器,不便了参考图像和候选图像之间的余弦相似性计算。
比照损失 + 类内方差缩小——两个指标,比照损失和方差缩小,间断最小化(因为资源限度,现实状况下,两个指标的损失应相加并最小化)。每 1 批计算比照损失,每 2 批进行方差缩减(类内 MSE)。
对于 比照损失,该问题被形容为一个 n 分类问题,模型试图从所有候选对象中辨认出正样本。针对参考编码计算所有候选编码的余弦类似度,并依据余弦类似度产生的概率计算一个 softmax。依据个别的 n - 分类问题,穿插熵损失最小。
对于 类内方差缩小,目标是将来自同一类的图像在编码空间中推近。对来自同一类 / 同一谈话人的图像进行采样,计算均匀编码矢量。编码的 MSE 损失依据平均值(类内方差)计算,并且在反向流传之前,MSE 损失按 0.20 进行缩放。
身份验证的二进制分类器
数据采样 —— 以下是用于谈话人验证二进制分类器的数据采样的一些详细信息。
对于每个期间,将 200 个(总共 1,000 个)随机全长频谱图加载到内存中(“子样本”)(因为资源限度,并非能够一次加载所有 1,000 个全长频谱图)。
对于每个参考图像,将生成 2 张测试图像,其中 1 张为正图像,1 张为负图像。对于每个参考图像,这将产生 2 对 / 行,实在对(正)和假冒者对(负)。
图像是从子样本中随机生成的。每个期间有 4,000 行,并且批大小为 320(MobileNetV2 和 DenseNet121)。
验证二进制分类器网络 —— 底层编码器网络是来自比照学习步骤的预训练编码器网络,在训练过程中权重被解冻。
二进制分类器设置为暹罗网络,其中计算了来自输出对的编码矢量的相对差。而后,将二元分类器构建在相对差别层之上。
模型训练
学习率循环:循环学习率可进步比照学习步骤和二元分类器步骤中的模型准确性。
应用了 torch.optim.lr_scheduler.CyclicLR(),其步长(默认)为 2000,循环模式(默认)为“Triangular”,没有动量循环(Adam 优化器)。
学习率的范畴如下:
- 具备比照学习性能的语音编码器:0.0001 至 0.001
- 根本分类器:0.0001 至 0.01
模型体现
不出所料,模型性能不如最新模型。我认为,促成因素是:
- 声谱图不是我本能够应用的最佳信号转换。基于小波变换的办法可能会产生更多高质量的声谱图“图像”。
- 应用的根本图像模型不是最新的模型,因为我无奈在中等大小的 GPU(3GB VRAM)上应用超大型模型。兴许像 ResNet 或 ResNeXt 这样更弱小的模型可能会产生更好的后果。
- 仅应用了一个语音数据集(VoxCeleb1)。必定能够应用大量和各种各样的数据(但遗憾的是,最初期限火烧眉毛)。
以下是可比模型的均等错误率(EER):
- 我最好的模型 EER 19.74%(VoxCeleb)
- Le and Odobez (2018), Best model from scratch EER 10.31% (VoxCeleb)
- Jung, et. al. (2017), EER 7.61% (RSR2015 dataset)
其余调查结果
根本模型大小:应用更大的根本模型进步了分类性能(MobileNetV2 vs DenseNet121)。
类内方差缩小的成果:类内方差缩小进步了两个根本模型的分类性能。事实上,通过方差缩减的 mobilenetw2 的性能进步到了与 DenseNet121 相当的程度。
ROC(左)和 DET(右)曲线
上面是应用 MobileNetV2 和 DenseNet121 的二元分类分数散布[P(is_genuine)],包含带 / 不带方差缩小。
MobileNetV2 根本模型 - 不带 / 带方差缩小(左 / 右):
DenseNet121 根本模型 - 不带 / 带方差缩小(左 / 右):
参考文献
Chen, T., Kornblith, S., Norouzi, M. and Hinton, G., 2020. A simple framework for contrastive learning of visual representations. arXiv preprint arXiv:2002.05709
Jung, J., Heo, H., Yang, I., Yoon, S., Shim, H. and Yu, H., 2017, December. D-vector based speaker verification system using Raw Waveform CNN. In 2017 International Seminar on Artificial Intelligence, Networking and Information Technology (ANIT 2017). Atlantis Press.
Le, N. and Odobez, J.M., 2018, September. Robust and Discriminative Speaker Embedding via Intra-Class Distance Variance Regularization. In Interspeech (pp. 2257–2261).
原文链接:https://towardsdatascience.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/