课程向:深度学习与人类语言处理 ——李宏毅,2020 (P16)

本文深入探讨深度学习在语者验证(SpeakerVerification)领域的应用,包括语者识别、语者验证、语者分段标记等任务。介绍了i-vector、d-vector、x-vector等SpeakerEmbedding方法,以及Attention和NetVLAD的高级应用。最后,讨论了端到端的SpeakerVerification模型,包括如何准备训练数据集和模型结构。
摘要由CSDN通过智能技术生成

Speaker Verification

李宏毅老师2020新课深度学习与人类语言处理课程主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
视频链接地址:
https://www.bilibili.com/video/BV1RE411g7rQ



前言

在上两篇中(P14、15),我们讲解了 Text-to-Speech (TTS) Synthesis 语音合成,输入文字产生声音,我们从四个方面进行讲述的:P14讲解1 和 2,而P15讲解 3 和 4
1 TTS before End-to-End :在端到端技术之前TTS是怎么做的
2 Tacotron: End-to-end TTS :硬train一发的时代
3 Beyond Tacotron :硬train一发的后时代
4 Controllable TTS :怎么控制TTS合出我们要的声音

而在本篇中,我们将开始讲解 Speaker Verification 语者验证有关技术,输入语音,输出类别的模型。类似地,这样的模型可以用在很多不同的领域,如语音情绪判断、语音安全判断、语音关键词是否存在等等,而今天我们只关注 语者验证,其他的应用大同小异,模型一样,都是语音分类问题。 .Speaker Verification 语者验证我们将会从3个方面讲解:
1 Task Introduction
2 Speaker Embedding
3 End-to-end


I Task Introduction

在这里插入图片描述
今天我们要讲的任务仅是 .Speaker Verification 语者验证,但和语者有关的任务还有很多,如上图

那第一个要讲的任务是 Speaker Recognition / Identification ,语者识别。

1.1 Speaker Recognition / Identification

在这里插入图片描述
Speaker Recognition / Identification 语者识别,要做的就是判断一段语音是谁所说的,标准的多分类问题,老师没有细讲。

1.2 Speaker Verification

在这里插入图片描述
Speaker Verification 语者验证,要做的就是判断两段声音是不是同一个人讲的,输入两段声音讯号,输出一个数值scalar,如果这个scalar大于阈值threshold,就表示这两段声音讯号是一个人说的,反之不是一个人说的。通俗而言,这个模型做的就像是比对相似度,看看这两段声音的相似程度,如果相似程度很大就代表是同一个人讲的,如果很小就不是同一个人讲的。

那这样的 Speaker Verification 模型有什么用呢?它的用途很大,今天我们日常生活中的银行客服,很多的银行客服会问你,“要不要开启语者验证系统?”,接下来客服就会要求你念几句话,这几句话就会以某种形式存在银行客服端。下次再打电话的时候,客服端就会比对现在的声音和之前注册时存的声音的相似度,如果相似度大于阈值threshold就不需要再做额外的验证,如果小于阈值 ,就需要人力介入进行再次验证。当然,这个threshold是人为设定的,决定系统判别相似度要有多严苛。

那既然threshold是人为设定的,那我们该怎么判断评价两个语者验证系统哪一个更好呢?我们会用一个指标 Equal Error Rate (EER) 等错误率来进行判断。
在这里插入图片描述

RateMeaning
TP同一语者被判断为同一语者的可能性
TN不同语者被判断为不同语者的可能性
FN同一语者被判断成不同语者的可能性
FP不同语者被判断为同一语者的可能性

Equal Error Rate (EER) ,因为不同的threshold会导致系统有不同的行为,所以先把所有的threshold都穷举出来,如
当 threshold = 1.0 时,所有输入的两段语音都会被判断为 不是同一个人所说的 FN和FP均为100。接下来,不断降低threshold ,并计算FN和FP,并会经过FN=FP,直到 threshold = 0为止。

在此过程中,当FN=FP时,这个值就是 Equal Error Rate ,不同的Speaker Verification系统在评比的时候就会比较这个值。

1.3 Speaker Diarization

在这里插入图片描述
还有第三个和语者有关的任务,叫做 Speaker Diarization 语者分段标记。
输入一段语音,如会议的录音、电话对话等
首先,Speaker Diarization 会把声音 分段,每一段代表同一个语者说的话
然后,标记每一个段是哪个语者讲的。

通常, 对于电话对话,语者个数是确定的。但对于会议录音,语者个数不确定,如上图分成了四段并标号。但我们本篇只关注 Speaker Verification 上,本任务不细讲。

II Speaker Embedding

在这里插入图片描述

2.1 Definition

对于 Speaker Verification 内的模型而言,输入两段声音讯号,输出 scalar ,实际上就是在判断两段声音的相似度。比较传统的模型内部会有某些方法,可以将输入的声音讯号转成 vector,而这个vector就是 Speaker Embedding,并通过比较这个vector计算两段语音的相似度。

2.2 Framework

通常, Speaker Verification 会分成3个步骤,如下图
在这里插入图片描述
个步骤:Development,找出可以产生speaker embedding的模型,输入声音,输出speaker embedding的。
个步骤:Enrollment,注册。如银行客户端要求你念几句话进行注册。如果有很多句话,就把它们的speaker embedding平均起来。
个步骤:Evaluation,验证。判断新输入的语音和注册时的语音的相似度 Scalar。

注意,在第一步骤中使用的训练资料不会在第二三步骤中再使用。

2.3 Metric-based meta learning

其实,这整套 Speaker Verification 的想法就是 Metric-based meta learning,这里没讲,老师说可以参见链接。
在这里插入图片描述

2.4 Method

接下来我们就讲 怎么抽 Speaker Embedding

2.4.1 i-vector

在这里插入图片描述
早期最有用的方法就是 i-vector,吃一个声音讯号,输出一个400维的向量,就代表了这段声音讯号语者的特性,且无论这段声音讯号多长,都只抽400维的向量出来。i-vector的效果逐渐被后续的使用 deep learning 模型所打败。

2.4.2 d-vector

接下来,将进入deep learning 的模型,最早的用deep network抽 Speaker Embedding的模型叫做 d-vector。d就是deep learning的缩写。
在这里插入图片描述
那d-vector是怎么做的呢?有一段声音讯号 (whole utterance),然后从其中截下一小段(audio segment)出来,把这一小段丢到DNN,而截一小段也是因为这边用的是DNN不是RNN,只能给DNN输入固定长度的东西。而这个DNN的训练目标就是 Speaker Recognition 语者识别。

然后我们把这个模型最后一个layer 的输出抽出来,这个东西就是d-vector

那为什么不使用模型最终的输出呢?最终的输出output layer是与语者数目有关的,如果语者有5000个,那这个最终输出就有5000维度,维度太大了,因此一般的d-vector都是抽出最后一个hidden layer 的输出,它可以不受语者数目限制。

但我们只使用了一小段语音,我们实际是要根据整段声音来得到 d-vector,那这该怎么办呢?
在这里插入图片描述
d-vector的解决方法也很简单,一整个语音就切成很多段,小段和小段之间可以有重叠没关系,每一个小段都可以抽一个vector出来,最终,把这些vector统统平均起来,就叫做d-vector,代表整个句子语者资讯的vector。

但其实d-vector的效果并不是很好,与i-vector相比还略逊一筹。后来就有了效果更好的x-vector,这个效果就比i-vector还好了。

2.4.3 x-vector

在这里插入图片描述
x-vector 与 d-vector最大不同是什么?刚才的d-vector,类似上图的每一个DNN是单独训练的。但在 x-vector 训练 Speaker Recognition 的时候,是直接使用了一整段语音来预测是哪个语者,一样和d-vector有很多DNN,但会把这些DNN的输出vector集合起来

那怎么将这些vector集合起来呢?有很多不同的方法,在x-vector原始论文中,将这些vector的mean算出来当作一个vector,variance算出来当作一个vector,把这两个vector连接起来丢给DNN,而这个DNN要做的是 Speaker Recognition,同样最后的一个layer的输出拿出就是x-vector。

2.4.4 Attention & NetVLAD

当然,这其中的DNN可以换为LSTM等。还有另外的进阶想法,比如说加个Attention。

用Attention Mechanism 训练一个权重,把这些vector做加权求和。
还有更进阶的方法,NetVLAD,这边不细讲,从影像那边借来的方法。
在这里插入图片描述

2.4.5 Summary

总之,我们如今有各式各样的方法可以把一整段声音讯号变成一个vector。当然,上述方法,都是先做Speaker Recognition,用 Speaker Recognition 训练完后得到Speaker Embedding,再把 Speaker Embedding 拿去做 Speaker Verification。

III End-to-end

在上面的讲述中,我们需要模型分别抽取Speaker Embedding和计算两个vector的相似度,那能不能把这两件事放在同一个模型里一起训练学习呢?

3.1 Data Set

在这里插入图片描述
在这里插入图片描述

首先,我们要准备相应的训练资料。具体而言,我们会先收集到很多的不同语者的声音讯号并带有语者标记,如上图的A B C三个语者的多段语音。

假设语者讲了K个句子当作注册的句子。那我们要怎么产生训练资料呢?
Positive Examples:随机选取语者i,并选出他的K个句子当作注册的句子,取另外一个他说的句子当作测试的句子,我们希望模型可以将这K个语音句,和 这一个语音句的相似度越大越好。
Negative Examples: 随机选取语者i,并选出他的K个句子当作注册的句子,取
另外一个语者
说的句子当作测试的句子,我们希望模型可以将这K个语音句,和 一个语音句的相似度越小越好。

当然,这只是一种准备训练资料的方法,还有很多方法,比如 GE2E,如今比较常用的方法留给大家研究。

3.2 Model

那端到端的 Speaker Verification 模型结构是什么样的呢?其实它完全仿照了传统的 Speaker Verification 模型结构。
在这里插入图片描述
首先将注册的K个语音句输给一个 Network里,从中输出代表每个将语音句的vector,将这个K个vector平均求和得到一个如上图,蓝色的vector。
之后,再将测试的语音句,同样输给这个Network里,从中输出代表这个测试语音句的vector,橙色的vector,并计算这个橙色vector与蓝色vector之间的相似度。如果测试语者与注册语者相同,则相似度越大越好;不同,则相似度越小越好。

其实这个Network就是传统方法里的Speaker Embedding,只不过,在端到端模型里,将这些都替换一个可以一起训练的神经网络,与传统的拆成多步骤的训练方法不同。

Text-dependent v.s. Text-independent

在做这种端到端 Speaker Verification 时,又会分成 Text-dependent 和 Text-independent 两种:

  1. Text-dependent :已经设计好 EnrollmentEvaluation 要说什么话,比如在 Enrollment 和 Evaluation 都说 “芝麻开门” 和 “芝麻关门”,不过它们没有做 Speaker Verification ,所以什么样的人都可以通过说 这样的话开门关门,所以他们需要这样的技术。
  2. Text-independent : EnrollmentEvaluation 随便讲。希望模型可以不受内容的影响。
    在这里插入图片描述
    同时,如果在做 Text-independent 的语者验证系统,还可以加一个 Discriminator,根据抽speaker embedding的Network的输出的vector去判断这个vector的文字内容是什么,而这个Network在训练时就要去骗过这个 Discriminator,也就做到了把文字信息滤掉只包含语者的资讯。

至此 ,Speaker Verification 语者验证系统课程结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿芒Aris

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值