【记录】声纹识别学习记录
文章目录
- 一、算法总览
- 1. 最早的GMM-UBM i-vector
- 2. DNN
- 3. 端到端系统
- 二、初识声纹
- 1. 什么是声纹?
- 2. 声纹识别的原理
- 3. 声纹识别算法的技术指标
- 4. 影响声纹识别水平的因素
- 声源采样率
- 信噪比(SNR)
- 信道
- 语音识别
- 文本内容
- 5. 声纹识别的应用流程
- 三、语音技术
- 语音唤醒:
- 声纹确认:
- 语音合成:
- 四、声纹识别算法、资源与应用
- (一)算法
- (二)资源
- 声纹识别 · Triplet Loss
- Triplet Loss
- 参考文献:
- 声纹识别 · 改良算法之GE2E Loss
- GE2E Loss
- 参考文献
- 大佬的回答:
- 课程:
- 开源资源整理:
- 引用:
一、算法总览
1. 最早的GMM-UBM i-vector
利用GMM高斯混合模型提取特征i-vector;克服训练数据不多的情况,引入UBM;将语音分为说话人空间和环境空间,解决环境带来的信道,PLDA实现信道补偿,将提取的i-vector更加纯粹。
当然,获取i-vector的方法不仅仅局限在高斯混合模型,利用一起其它的机器学习方法进行补充一样可以,甚至是DNN提取的特征。
2. DNN
DNN的引入极大的降低了识别错误率。这时候的算法,可以称为embedding算法,依然是提取特征,不过这时候提取的是神经网络最后隐藏层的激活单元了,作为embedding,代替i-vector来作为一段语音的特征表示。
这时候出现了d-vector(深度神经网络最后一个隐藏层作为embeddings特征)、x-vector(从TDNN网络中提取embeddings特征)、j-vector模型(适用于文本相关说话人确认)
3. 端到端系统
无论是获得i-vector,还是DNN提取出的embedding,都是从语音中提取出特征再做分类或者确认。而端到端系统将这2段合到一个系统中,从输入到输出,一体化特征训练和分类打分。这和之前有了重大的不同。
二、初识声纹
1. 什么是声纹?
Voiceprint 声纹 是用电声学仪器现实的携带言语信息的声波频谱, 是由波长频率以及强度等百余种特征维度组成的生物特征,具有稳定性、可测量性、唯一性等特点。
- 人类语言的产生是人体语言中枢与发音器官之间一个复杂的生理物理过程,发声器官–舌、牙齿、喉头、肺、鼻腔在尺寸和形态方面每个人的差异很大,所以任何两个人的声纹图谱都有差异。
- 每个人的语音声学特征既有相对稳定性,又有变异性,不是一成不变的。这种变异可来自生理、病理、心理、模拟、伪装,也与环境干扰有关。
声纹不如图像那样直观展现,在实际分析中,可通过波形图和语谱图进行展现。
2. 声纹识别的原理
人在讲话时使用的发声器官在尺寸和形态方面每个人的差异很大,所以任何两个人的声纹图谱都有差异,主要体现在如下方面:
- 共鸣方式特征:咽腔共鸣、鼻腔共鸣和口腔共鸣
- 嗓音纯度特征:不同人的嗓音,纯度一般是不一样的,粗略地可分为高纯度(明亮)、低纯度(沙哑)和中等纯度三个等级
- 平均音高特征:平均音高的高低就是一般所说的嗓音是高亢还是低沉
- 音域特征:音域的高低就是通常所说的声音饱满还是干瘪
不同人的声音在语谱图中共振峰的分布情况不同,声纹识别正是通过比对两段语音的说话人在相同音素上的发声来判断是否为同一个人,从而实现“闻声识人”的功能。
3. 声纹识别算法的技术指标
声纹识别在算法层面可通过如下基本的技术指标来判断其性能,除此之外还有其它的一些指标,如:信道鲁棒性、时变鲁棒性、假冒攻击鲁棒性、群体普适性等指标,这部分后续于详细展开讲解。
错误拒绝率(False Rejection Rate, FRR) :分类问题中,若两个样本为同类(同一个人),却被系统误认为异类(非同一个人),则为错误拒绝案例。错误拒绝率为错误拒绝案例在所有同类匹配案例的比例。
错误接受率(False Acceptance Rate, FAR) :分类问题中,若两个样本为异类(非同一个人),却被系统误认为同类(同一个人),则为错误接受案例。错误接受率为错误接受案例在所有异类匹配案例的比例。
等错误率(Equal Error Rate,EER):调整阈值,使得误拒绝率(False Rejection Rate,FRR)等于误接受率 (False Acceptance Rate,FAR),此时的FAR与FRR的值称为等错误率。
准确率(Accuracy,ACC):调整阈值,使得FAR+FRR最小,1减去这个值即为识别准确率,即ACC=1 - min(FAR+FRR)
速度:(提取速度:提取声纹速度与音频时长有关、验证比对速度):Real Time Factor 实时比(衡量提取时间跟音频时长的关系,比如:1秒能够处理80s的音频,那么实时比就是1:80)。验证比对速度是指平均每秒钟能进行的声纹比对次数。
ROC曲线:描述FAR与FRR之间相互变化关系的曲线,X轴为FAR的值,Y轴为FRR的值。从左到右,当阈值增长期间,每一个时刻都有一对FAR和FRR的值,将这些值在图上描点连成一条曲线,就是ROC曲线。
阈值:在接受/拒绝二元分类系统中,通常会设定一个阈值,分数超过该值时才做出接受决定。调节阈值可以根据业务需求平衡FAR与FRR。 当设定高阈值时,系统做出接受决定的得分要求较为严格,FAR降低,FRR升高;当设定低阈值时,系统做出接受决定的得分要求较为宽松,FAR升高,FRR降低。在不同应用场景下,调整不同的阈值,则可在安全性和方便性间平平衡,如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k2fkzPHK-1572455807115)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmK1Q1ZiceSJzPFcUGGTE6TiaB9tWgY9LBG30/0)]
4. 影响声纹识别水平的因素
训练数据和算法是影响声纹识别水平的两个重要因素,在应用落地过程中,还会受很多因素的影响。
声源采样率
- 人类语音的频段集中于50Hz ~ 8KHz之间,尤其在4KHz以下频段
- 离散信号覆盖频段为信号采样率的一半(奈奎斯特采样定理)
- 采样率越高,信息量越大
- 常用采样率:8KHz (即0 ~ 4KHz频段),16KHz(即0 ~ 8KHz频段)
信噪比(SNR)
- 信噪比衡量一段音频中语音信号与噪声的能量比,即语音的干净程度
- 15dB以上(基本干净),6dB(嘈杂),0dB(非常吵)
信道
- 不同的采集设备,以及通信过程会引入不同的失真
- 声纹识别算法与模型需要覆盖尽可能多的信道
- 手机麦克风、桌面麦克风、固话、移动通信(CDMA, TD-LTE等)、微信……
语音识别
- 语音时长(包括注册语音条数)会影响声纹识别的精度
- 有效语音时长越长,算法得到的数据越多,精度也会越高
- 短语音(1~3s)
- 长语音(20s+)
文本内容
- 通俗地说,声纹识别系统通过比对两段语音的说话人在相同音素上的发声来判断是否为同一个人
- 固定文本:注册与验证内容相同
- 半固定文本:内容一样但顺序不同;文本属于固定集合
- 自由文本
5. 声纹识别的应用流程
声纹识别(VPR) ,生物识别技术的一种,也称为说话人识别 ,是从说话人发出的语音信号中提取声纹信息,从应用上看,可分为:
- 说话人辨认(Speaker Identification):用以判断某段语音是若干人中的哪一个所说的,是“多选一”问题;
- 说话人确认(Speaker Verification):用以确认某段语音是否是指定的某个人所说的,是“一对一判别”问题。
声纹识别在应用中分注册和验证两个主流程,根据不同的应用中,部分处理流程会存在差异,一般的声纹识别应用流程如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNVSSYQX-1572455807116)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmI5cWVa007ghlEhGBnahAdqxyKXXw8XJ5I/0)]
三、语音技术
几大模块及之间的关系:
- 语音唤醒模块 (Wake up)
- 声纹识别模块 (Voice Print)
- 语音识别模块 (ASR)
- 语义理解模块 (NLP)
- 对话管理模块 (DM)
- 语音合成模块 (TTS)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S5C2Z5ah-1572455807116)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmJJiaTAHjq3j2n3IO5UdBkTF2ayw7gNOt70/0)]
流程:
[外链图片转存中…(img-ppXjrQlZ-1572455807117)]
评判指标:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVn6N1QB-1572455807117)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmKdrzpIx4QSnQlEIM1eKc3KHanDtz2RHpE/0)]
输入部分:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fv9a6yhE-1572455807118)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmKjRphr0hAt7YFeibBKREP3MrzAf9dwiaP6Y/0)]
训练集:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MdIOyZCo-1572455807118)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmK13jkJtNZSAdPjW5Khge91Jsichiada0HW8/0)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w9OtEkSS-1572455807118)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5QofXsDn1GYvibmJPaf4NZAnVp7mmdR2lETZJTSaWJj2ZokE/0)]
语音唤醒:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DlZ3ux5o-1572455807119)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5Qofx9LAnmjicdeCBlHvdlkEaMqwlpsibaEVU2Wac2tic5V7w8/0)]
设计和影响因素:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ORt6NM1W-1572455807119)(https://p.qlogo.cn/qqmail_head/t8YYQUIrFJf5SQou0w7b9x8huEJp5Qofx9LAnmjicdeBNDar6nPZibTwrO2B67e3lAPC1HQAmiamPg/0)]
声纹确认:
流程:
[外链图片转存中…(img-w6JVyLju-1572455807119)]
设计和影响因素:
[外链图片转存中…(img-suVMUnuz-1572455807120)]
总结:
[外链图片转存中…(img-nMfypiul-1572455807120)]
语音合成:
应用场景
[外链图片转存中…(img-kuek1MES-1572455807122)]
流程:
[外链图片转存中…(img-klNgLZHm-1572455807122)]
基于深度学习的模型训练
[外链图片转存中…(img-1Wg0eVie-1572455807122)]
指标
[外链图片转存中…(img-yD0EqJ3E-1572455807123)]
总结
[外链图片转存中…(img-QCuf3UCC-1572455807123)]
四、声纹识别算法、资源与应用
(一)算法
Speaker recognition以2012年为分水岭,由statistics-based machine learning,跨到了以deep learning为主线的算法。随后,bottleneck feature、d-vector、x-vector、j-vector等DNN-based的系统陆续出现,随后attention mechanism、Learning to rank等思想被用于改良训练过程。
对这些算法按照3类分别做简要阐述:1)iVector-based;2)dnn-based;3)基于attention mechanism、Learning to rank等思想的改良算法。
序号 | 类型 | 注释 |
---|---|---|
1 | iVector-based | iVector/PLDA,最佳基线模型 |
2 | DNN-based | x-vector,Bottleneck Feature,d-vector,j-vector等,基本思想都是从神经网络中提取某层的权重作为说话人的身份向量。然后有两种说法:1. 直接计算 vector 之间的 Cosine Distancd; 2. 或者再加个 back-end 分类器。x-vector,d-vector,j-vector,BNF等都可以归纳到 embeddings 类型上。End-to-End,即给定 Speech,直接从网络给出拒绝或接受。 |
3 | attention mechanism、Learning to rank 等改良类 | Attention mechanism 在 CV 上的效果非常优秀,Google 在 Speech Recognition 和Speaker Recognition 上做了有效的应用。Learning to rank 也是被 Google 用于 Face recognition 取得不错的效果,被借鉴用来做 Speaker recognition 的。Triplet Loss 就是 Learning to rank 步骤中的一个 similarity function[6][15] |
- iVector-based
2011年,第十一届全国人机语音通讯学术会议(NCMMSC2011)上,大神邓力给伙计们开了小灶,分享了他在微软DNN-based speech recognition研究结果(30% relative improvement),群情激奋。就在前一年,ABC(Agnitio/BUT/CRIM)在NIST SRE 2010 workshop上分享了JFA(Joint Factor Analysis,联合因子分析)的改良版(即iVector[1][16]),群情激奋。
iVector中Total Variability的做法 (M=m+Tw)(M = m + Tw)(M=m+Tw) ,将JFA复杂的训练过程以及对语料的复杂要求,瞬间降到了极致,尤其是将Length-Variable Speech映射到了一个fixed- and low-dimension的vector(identity vector,即iVector)上。于是,机器学习爱好者群情激奋,所有机器学习的算法都可以用来解决声纹识别的问题了。
PLDA(Probabilistic Linear Discriminant Analysis,概率形式的LDA[17])是生成型模型(generated model),被用于对iVector进行建模、分类,实验证明其效果最好。PLDA是一种信道补偿算法,因为iVector中,既包含说话人的信息,也包含信道信息,而我们只关心说话人信息,所以才需要做信道补偿。在声纹识别训练过程中,我们假设训练语音由I个说话人的语音组成,其中每个说话人有J段不一样的语音,并且我们定义第i个说话人的第j段语音为Xij。那么,我们定义Xij的生成模型为:
Xij=μ+Fhi+Gwij+εijX_{ij} = \mu+Fh_i+Gw_{ij}+\varepsilon_{ij} Xij=μ+Fhi+Gwij+εij
F、G是矩阵,包含了各自假想变量空间中的基本因子,这些因子可以看做是各自空间的基底(basis)。 F的每一列,相当于类间空间的特征向量;G的每一列,相当于类内空间的特征向量。而向量Hi和Wij可以看做是该语音分别在各自空间的特征表示。如果两条语音的hi特征相同的似然度越大,那么它们来自同一个说话人的可能性就越大。
PLDA的模型参数包括4个,mean、F和G、sigma,采用EM算法迭代训练而成。通常,我们采用简化版的PLDA模型,忽略类内特征空间矩阵的训练[18],只训练类间特征空间矩阵F。即:
Xij=μ+Fhi+εijX_{ij} = \mu+Fh_i+\varepsilon_{ij} Xij=μ+Fhi+εij
- DNN-based
早期DNN-based Speaker Recognition,用DNN代替GMM去计算Posterior Statistics,延续了DNN-based Speech Recognition的研究成果。2014年,Google提出d-vector[3]后,一系列的DNN-based方法被提出,如x-vector、j-vector等[2][8][9]。下面分别介绍下此类算法的基本思路。
- d-vector
DNN训练好后,提取每一帧语音的Filterbank Energy 特征作为DNN输入,从Last Hidden Layer提取Activations,L2正则化,然后将其累加起来,得到的向量就被称为d-vector。如果一个人有多条Enroll语音,那么所有这些d-vectors做平均,就是这个人的Representation。DNN的网络结构如图所示。(图1.2 用于提取d-vector的DNN模型)
[外链图片转存中…(img-0f1EmOyd-1572455807123)]
因为d-vector是从Last Hidden Layer提取的,通过移除Softmax Layer,可以缩减Model Size。而且,这也可以让我们在不改变Model Size的情况下,在训练过程中使用更多的说话人数据来做训练(因为Softmax Layer被移除了,不用考虑Softmax Layer的节点数)。DNN的训练过程,可以详细阅读参考文献[3]。
- x-vector
x-vector是Daniel Povey教授在论文[13]中提出的概念,用于描述从TDNN网络中提取的embeddings特征,如图所示。(图1.3 TDNN-based Segment-Level embeddings Diagram)
[外链图片转存中…(img-y8NFW66g-1572455807124)]
上面的网络结构中,有一个Statistics Pooling Layer,负责将Frame-level Layer,Map到Segment-Level Layer,计算frame-level Layer的Mean和standard deviation。TDNN是时延架构,Output Layer可以学习到Long-Time特征,所以x-vector可以利用短短的10s左右的语音,捕捉到用户声纹信息,在短语音上拥有更强的鲁棒性。TDNN的训练方式可以参考文献[13]。
提取x-vector,LDA降维,然后以PLDA作为back-end,便可以做Verification。
开源代码:传送门
- j-vector
提取i-vector依赖于较长(数十秒到数分钟)的语音,而Text-Dependent Speaker Verification任务中,语音很短(甚至只有1秒左右),所以i-vector不适用于Text-Dependent Speaker Verification。Text-Dependent Speaker Verification属于Multi-task,既要验证身份,又要验证语音内容。j-vector[8]就是为了解决Text-Dependent Speaker Verification而提出的,如图1.4所示,j-vector从Last Hidden Layer提取。
论文[8]中指出,相比于Cosine Similarity、Joint PLDA,使用Joint Gaussian Discriminant Function作为back-end时,实验效果最佳。
[外链图片转存中…(img-YbhO67pG-1572455807124)]
参考文献
[1] Niko Brümmer, Doris Baum, Patrick Kenny, et al., “ABC System description for NIST SRE 2010”, NIST SRE 2010.
[2] David Snyder, Pegah Ghahremani, Daniel Povey, “Deep Neural Network-based Speaker Embeddings for END-TO-END Speaker Verification”, Spoken Language Technology Workshop , 2017 :165-170.
[3] Variani, Ehsan, et al. “Deep neural networks for small footprint text-dependent speaker verification.” Acoustics, Speech and Signal Processing (ICASSP), 2014 IEEE International Conference on. IEEE, 2014.
[4] Liu, Yuan, et al., “Deep feature for text-dependent speaker verification.” Speech Communication 73 (2015): 1-13.
[5] Heigold, Georg, et al., “End-to-end text-dependent speaker verification.” Acoustics, Speech and Signal Processing (ICASSP), 2016 IEEE International Conference on. IEEE, 2016.
[6] Zhang Chunlei, and Kazuhito Koishida. “End-to-End Text-Independent Speaker Verification with Triplet Loss on Short Utterances.” Proc. InterSpeech 2017 (2017): 1487-1491.
[7] Li Chao, et al., “Deep Speaker: an End-to-End Neural Speaker Embedding System.” arXiv preprint arXiv:1705.02304 (2017).
[8] Nanxin Chen, Yanmin Qian, and Kai Yu, “Multi-task learning for text-dependent speaker verificaion,” in INTERSPEECH, 2015.
[9] Ziqiang Shi, Mengjiao Wang, Liu Liu, et al., “A DOUBLE JOINT BAYESIAN APPROACH FOR J-VECTOR BASED TEXT-DEPENDENT SPEAKER VERIFICATION”,
[10] FARR Chowdhury,Q Wang, IL Moreno, L Wan, “Attention-Based Models for Text-Dependent Speaker Verification”, Submitted to ICASSP 2018.
[11] C Zhang, K Koishida, “End-to-End Text-Independent Speaker Verification with Triplet Loss on Short Utterances”, Interspeech, 2017.
[12] Arsha Nagrani, “VoxCeleb: a large-scale speaker identification dataset”
[13] D Snyder, D Garcia-Romero, D Povey, S Khudanpur, “Deep Neural Network Embeddings for Text-Independent Speaker Verification”, Interspeech , 2017 :999-1003.
[14] T. Fu, Y. Qian, Y. Liu, and K. Yu, “Tandem deep features for textdependent speaker verification”, Proc. InterSpeech, 2014.
[15] Hervé Bredin, “TristouNet: Triplet Loss for Speaker Turn Embedding”, ICASSP 2017.
[16] Najim Dehak, Reda Dehak, et al., “Support Vector Machines versus Fast Scoring in the Low-Dimensional Total Variability Space for Speaker Verification”, InterSpeech, 2009.
[17] SJD Prince, JH Elder, “Probabilistic Linear Discriminant Analysis for Inferences About Identity”, Proceedings, 2007 :1-8.
[18] Y Jiang, AL Kong, L Wang, “PLDA in the i-supervector space for text-independent speaker verification”, Hindawi Publishing Corp. , 2014 , 2014 (1) :29.
(二)资源
- Kaldi
最流行的语音技术研究平台,没有之一。代码运行鲁棒性强、架构良好,便于算法修改、定制。
- 如果你是高校科研人员,工程实现能力有限,那么没关系,你只要懂一点Shell、Python或Perl脚本即可顺利开展实验。
- 如果你是工业界开发人士,完全可以直接拿来商用,KALDI遵循 Apache licence
- 如果你是自由开发者, 完全可以基于KALDI做一些开发,为企业提供语音服务
- 源码地址:传送门
- 语料集合:传送门
No. | Recipe | Detail |
---|---|---|
1 | egs/sre08 | i-vector/plda的基础版本 |
2 | egs/sre10 | i-vector/plda、dnn-ubm/i-vector/plda |
3 | egs/sre16 | x-vector/plda |
4 | egs/callhome_diarization | i-vector based speaker diarization |
TensorFlow-based Deep Speaker
实现ResNet网络上的TE2E(Tuple-base end-to-end)Loss function训练方式。安装TensorFlow、Python3和FFMPEG(文件格式转换工具)后,准备好数据,即可一键训练。只可惜验证部分还没做,而且GRU没实现、tensor实现部分也不严谨,可详细阅读代码和论文,并贡献下您的代码。
- 源码地址:传送门
- 论文地址:传送门
- 数据集合:传送门
PyTorch-based Deep Speaker
基于百度论文[1],实现了ResNet + Triplet Loss。不过在 牛津大学的Voxceleb库上,EER比论文[2]所宣称的(7.8%)要高不少,看来实现还是有改进空间。Owner在求助了,大家帮帮忙contribute。
- 源码地址:传送门
- 论文地址:传送门
TristouNet from pyannote-audio
一个音频处理工具箱,包括Speech change detection, feature extraction, speaker embeddings extraction以及speech activity detection。其中speaker embeddings extraction部分,包括TristouNet的实现。
- 源码地址:传送门
- 论文地址:传送门
CNN-based Speaker verification
Convolutional Neural Networks(卷积神经网络)在声纹识别上的试验,一个不错的尝试,可以与TDNN/x-vector做下对比。
- 源码地址:传送门
- 论文地址:传送门
- 数据集合:传送门
参考文献
[1] Li Chao, et al., “Deep Speaker: an End-to-End Neural Speaker Embedding System.” arXiv preprint arXiv:1705.02304 (2017).
[2] Arsha Nagrani, “VoxCeleb: a large-scale speaker identification dataset”.
声纹识别 · Triplet Loss
End-to-End Speaker Recognition往往是data-driven的,需要海量marked data才能取得预期效果。无论是Google d-vector,还是Daniel x-vector、Baidu Deep Speaker,其迭代速度和有效利用data的程度,仍然有较大改进空间,文献[1], [2], [3]就是朝着这些方向所做的尝试。
本节先对Triplet Loss做简单介绍。
Triplet Loss
2015年,谷歌的FaceNet[4]使用Triplet Loss在大规模人脸识别中取得了很大的成功。受此启发,在声纹识别领域,也有不少的文章使用Triplet loss,比如Zhang[3]、Baidu Deep Speaker[5]、Bredin[6]等 。它的优点是,直接使用embeddings之间的相似度作为优化的成本函数(Loss Function),最大化【anchor】和【positive】的相似度,同时最小化【anchor】和【negative】的相似度。这样,在提取了说话者的embedding之后,声纹验证和声纹识别任务就可以简单地通过相似度计算实现。(图1 谷歌FaceNet网络框架)
[外链图片转存中…(img-RginLDC7-1572455807124)]
Triplet Loss基本思路是:构造一个三元组,由anchor(锚,可以理解为一个参考语音)、positive(相对anchor而言)和negative(相对anchor而言)组成。然后,用大量标注好的三元组作为网络输入,来学习DNN参数。其中,anchor和positive是来自于同一个人的不同声音,anchor和negative是来自不同的人的声音。通过DNN获取各自的embeddings后,计算anchor和positive的相似度,以及anchor和negative的相似度,然后最大化ap(anchor与positive)的相似度,最小化an(anchor与negative)的相似度。
计算相似度有两种方法,一种是cosine相似度,值越大,相似度越高,正如Baidu Deep Speaker所采用的;一种是使用欧几里得距离,和FaceNet所使用的一样,值越小,相似度越高。
cosine 相似度的训练过程如图2所示:(图2 cosine相似度训练过程)
[外链图片转存中…(img-a3JpVPJL-1572455807125)]
其成本函数如下所示:
L=∑i=0N[sian−siap+α]+L = \sum^N_{i=0}[s_i^{an}-s_i^{ap}+\alpha]_+ L=i=0∑N[sian−siap+α]+欧几里得距离相似度的训练过程如图3所示:
[外链图片转存中…(img-Fyepr2ki-1572455807125)]
其成本函数如下所示:
∑IN[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]+\sum^N_I[||f(x^a_i)-f(x^p_i)||^2_2-||f(x^a_i)-f(x^n_i)||^2_2+\alpha]_+ I∑N[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]+
参考文献:
[1] Heigold, Georg, et al., “End-to-end text-dependent speaker verification.” Acoustics, Speech and Signal Processing (ICASSP), 2016 IEEE International Conference on. IEEE, 2016.
[2] FARR Chowdhury, Q Wang, IL Moreno, L Wan, “Attention-Based Models for Text-Dependent Speaker Verification”, Submitted to ICASSP 2018.
[3] C Zhang, K Koishida, “End-to-End Text-Independent Speaker Verification with Triplet Loss on Short Utterances”, Interspeech, 2017.
[4] Schroff, F., Philbin, J., “FaceNet: A Unified Embedding for Face Recognition and Clustering. The IEEE Conference on Computer Vision and Pattern Recognition”, CVPR 2015, pp. 815- 823.
[5] Li Chao, et al., “Deep Speaker: an End-to-End Neural Speaker Embedding System.” arXiv preprint arXiv:1705.02304 (2017).
[6] Bredin H., “TristouNet: Triplet Loss for Speaker Turn Embedding[J]”, 2017:5430-5434.
声纹识别 · 改良算法之GE2E Loss
End-to-End Speaker Recognition往往是data-driven的,需要海量标注数据才能取得预期效果。无论是Google d-vector,还是x-vector、Baidu Deep Speaker,其训练速度和有效利用data的程度,仍然有较大改进空间,文献[1], [2], [3]就是朝着这些方向所做的尝试。
本节继续介绍GE2E Loss。
GE2E Loss
Generalized end-to-end (GE2E) loss是谷歌在论文[4]中提出的新损失函数,还是比较有创意的。与TE2E loss和Triplet loss相比,它每次更新都和多个人相比,因此号称能使训练时间更短,说话人验证精度更高。
其基本思路如图1所示,挑选 N个人,每人 M句话,通过图示的顺序排列组成Batch,接着通过LSTM神经网络提取N*M句话的embeddings,然后求取每个embedding和每个人平均embedding的相似度,得到一个相似度矩阵。最后通过最小化GE2E loss使得相似矩阵中有颜色的相似度尽可能大,灰色的相似度尽可能小,即本人的embedding应该和本人每句话的embedding尽可能相近,和其他人的embedding尽可能远离,从而训练LSTM网络。(图1 GE2E系统架构(不同的颜色表示不同的说话者))
[外链图片转存中…(img-o395SX9i-1572455807125)]
相似度矩阵的定义如下公式所示 (1≤j≤N,1≤i≤M,1≤k≤M)(1\leq j\leq N,1\leq i\leq M,1\leq k\leq M)(1≤j≤N,1≤i≤M,1≤k≤M):
Sji,k=w⋅cos(eji,ck)+bS_{ji,k} = w\cdot \cos(e_{ji},c_k)+b Sji,k=w⋅cos(eji,ck)+b
其eij中表示第人第句话对应的embedding,w和b是要训练的参数(约束 w>0w>0w>0 ), ckc_kck是第kkk人的embedding,由MMM句话的embeddings求平均得到,即:
ck=1M∑m−1Mekmc_k = \frac1M\sum^M_{m-1}e_{km} ck=M1m−1∑Mekm
为了使得相似度矩阵中有颜色的相似度尽可能大,灰色的相似度尽可能小,有两种损失函数,第一种是softmax loss,即:
Ls(eji)=log∑k−1Mexp(Sji,k)−Sji,jL_s(e_ji) = \log{\sum^M_{k-1}exp(S_{ji,k})-S_{ji,j}} Ls(eji)=logk−1∑Mexp(Sji,k)−Sji,j
或者写成:
Ls(eji)=−logexp(Sji,j)∑k−1Mexp(Sji,k)L_s(e_{ji}) = -\log{\frac{exp(S_{ji,j})}{\sum^M_{k-1}exp(S_{ji,k})}} Ls(eji)=−log∑k−1Mexp(Sji,k)exp(Sji,j)
上式中(和论文不一样,本人认为应该加个负号),最小化损失函数Ls(eji)L_s(e_{ji})Ls(eji) , Sji,jS_{ji,j}Sji,j就要尽可能大,即优化使得本人和本人的每一句话都比较相似。
第二种是contrast loss,定义如下:
Lc(eji)=1−σ(Sji,j)+max1≤k<N,k≠jσ(Sji,j)L_c(e_{ji})=1-\sigma(S_{ji,j})+\max_{1\leq k<N,k\ne j}\sigma(S_{ji,j}) Lc(eji)=1−σ(Sji,j)+1≤k<N,k=jmaxσ(Sji,j)
上式中,最小化损失函数, σ(Sji,j)\sigma(S_{ji,j})σ(Sji,j)就要大, $\max_{1\leq k<N,k\ne j}\sigma(S_{ji,j}) $就要小,即本人和本人的每一句话都比较相似,和其他人最相似的地方要尽可能小。
而GE2E loss定义为以上两种损失函数之和:
Lg=∑j,i(Ls(eji)+Lc(eji))L_g=\sum_{j,i}(L_s(e_{ji})+L_c(e_{ji})) Lg=j,i∑(Ls(eji)+Lc(eji))
此外,为了训练的稳定性,论文中建议在计算本人和本人某句话相似度的时候,不要让该句话的embedding来参与计算本人的embedding,即实际上:
cj(−1)=1M−1∑m≠iMejmc^{(-1)}_j=\frac1{M-1}\sum^M_{m\ne i}e_{jm} cj(−1)=M−11m=i∑Mejm
Sji,k={w⋅cos(eji,cj−i+b)ifk=jw⋅cos(eji,ck+b)otherwiseS_{ji,k}=\begin{cases} w\cdot \cos(e_{ji},c^{-i}_j+b) if k=j\\ w\cdot \cos(e_{ji},c_k+b) other wise \end{cases} Sji,k={w⋅cos(eji,cj−i+b) if k=jw⋅cos(eji,ck+b) otherwise
参考文献
[1] Heigold, Georg, et al., “End-to-end text-dependent speaker verification.” Acoustics, Speech and Signal Processing (ICASSP), 2016 IEEE International Conference on. IEEE, 2016.
[2] FARR Chowdhury,Q Wang, IL Moreno, L Wan, “Attention-Based Models for Text-Dependent Speaker Verification”, Submitted to ICASSP 2018.
[3] C Zhang, K Koishida, “End-to-End Text-Independent Speaker Verification with Triplet Loss on Short Utterances”, Interspeech, 2017.
[4] Wan L, Wang Q, Papir A, et al. “Generalized End-to-End Loss for Speaker Verification”, IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP 2018).
大佬的回答:
传送门
课程:
同盾大学视频:传送门
开源资源整理:
d-vector:
https://github.com/rajathkmp/speaker-verificationhttps://github.com/wangleiai/dVectorSpeakerRecognition
E2E,Deep Speaker:
tensorflow实现:https://github.com/philipperemy/deep-speakerpytorch实现:https://github.com/qqueing/DeepSpeaker-pytorch
引用:
AI老司机带你认识声音黑科技:声纹识别
语音技术实战介绍
声纹识别的应用实践
小白声纹识别
【记录】声纹识别学习记录相关推荐
- 说话人识别/声纹识别学习路径的资料整理,从零学声纹识别
这是2年前我的总结,有点与最新方法和方向脱轨, 这两年内声纹识别/说话人识别已经又有很多新的方法出现, 等我看看论文和一些实验, 后面更新一波声纹识别的东西 ===================== ...
- 65、记录使用科大讯飞的声纹识别从官方的Python Demo转C++ Demo路程
基本思想:需要将声纹识别的demo集成到项目中,奈何官方只提供了py版本和java版本,需要c++版本,逐开发和记录一下,只是简单复现其py代码 一.官方代码的和手册的地址声纹识别 API 文档 | ...
- 命名实体识别学习记录(spaCy/OpenNLP..)
命名实体识别学习记录(spaCy/OpenNLP..) spaCy 环境 功能实现 NLTK 环境 功能实现 Stanford NLP 环境 功能实现 NER works Spacy Install ...
- 探秘身份认证利器——声纹识别!
在这个移动互联网大行其道的年代,人们不用互相见面就可以完成很多事情,比如社交.购物.网上开店.金融交易等等,但是如何验证身份变成了人和人在不见面的情况下最难的事情.传统的解决方案就是密码或者秘钥,它需 ...
- 如何三步搭建一套声纹系统
背景介绍 声纹检索,顾名思义就是说话人识别,通过声音来验证或者识别说话人的声音.声纹识别的关键步骤就是声音向量化,将说话人的声音将其转化成结构化的向量.阿里云AnalyticDB向量版,提供了一套声纹 ...
- python声纹识别_【kaldi学习.4】Aishell V1(说话人识别、声纹识别)中的run.sh详解...
下面打算用aishell来做声纹识别,在做声纹识别之前,肯定是要对run.sh这个文件做个深入的了解,才可以继续往下走,接下来会记录如何修改run.sh去运行自己的数据,而不是手动输入自己的数据... ...
- AI赋能下的声纹识别技术在公共安全领域的深度应用
佳都新太科技股份有限公司 徐建明 1.声纹识别在公共安全领域的应用现状 生物特征是指每个个体所独有的.可以通过技术有效测量.甄别.鉴定与验证的某类生理上的特征或行为上的方式.从生物特征的来源进行区分, ...
- 使用Tensorflow实现声纹识别
原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:使用Tensorf ...
- 声纹识别(一)——简介
一.基本概念 声纹识别也称为说话人识别,是指根据说话人语音中个性化的特征自动识别说话人身份的一种生物识别技术.说话人的声音特征不仅与其肺部.气管.喉部.声带.咽部.鼻腔.口腔.唇部等人体发声器官相关 ...
最新文章
- 在虚拟机linux环境下编译windows版adb fastboot
- iOS的block内存管理
- 筑业和恒智天成哪个好_浙江新闻客户端:废弃物变身创意作品 天成小学垃圾分类工作有声有色...
- 低代码是什么?有什么优势
- mysql中起飞到达城市查询_让mysql慢慢起飞 - 初识慢日志
- MySQL 数据库双向同步复制
- 计算机技术中的常见概念
- 274.	H-Index
- render vue 添加类_详解vue 动态加载并注册组件且通过 render动态创建该组件
- python如何下载os库_简谈下载安装Python第三方库的三种方法
- jquery+baidu map api 仿安居客地图找房源(基于百度地图)
- vue + 高德地图 + 图例
- 测试工程师-压力测试之jmeter脚本
- linux服务器挂掉之后
- 360企业版的IT管理价值
- finecms aip.php漏洞,finecms 最新版v2.3.3前台getshell
- 贝壳CVR转化率预估模型实践
- qr-rls算法matlab实现,【预测模型】基于RLS算法进行预测matlab源码
- 设计模式之浅浅的理解桥接模式
- HDFS删除并清空回收站
热门文章
- Codeforces Round #682 (Div. 2)
- for(i=0,j=0;i10,j10;i++,j++)用python怎么写
- 计算机键盘上切换账户怎么办,笔记本切换小键盘,详细教您笔记本小键盘怎么切换...
- fork后父子进程共享资源
- 小米10 Ultra从MIUI 13.0.3降级到12.0.15
- Idea新建项目并推送到远程仓库
- 2019年计算机考研大纲,2019年计算机考研大纲(原文).pdf
- 史上最全的IDE(文本编辑器)对比,包含了常用和不常用的近70种工具的比较。
- WIN10 动态磁盘转基本磁盘
- 机器学习领域 几种距离度量方法【3】