源码网站怎么搭建,做网站的可行性分析,网页设计实训总结和体会,2000个免费货源网站参考文献#xff1a; Speaker Verification哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 声纹识别 - 16 - 知乎 (zhihu.com) (2) Meta Learning – Metric-based (1/3) - YouTube 如何理解等错误率(EER, Equal Error Rate)#xff1f;请不要只给定义 - 知… 参考文献 Speaker Verification哔哩哔哩bilibili 2020 年 3月 新番 李宏毅 人类语言处理 独家笔记 声纹识别 - 16 - 知乎 (zhihu.com) (2) Meta Learning – Metric-based (1/3) - YouTube 如何理解等错误率(EER, Equal Error Rate)请不要只给定义 - 知乎 (zhihu.com) 本次省略所有引用论文 目录
一、Introduction
模型的简单介绍
评价指标 Equal Error RateEER
二、Speaker Embedding 讲解
模型框架
数据集
Speaker Embedding 制作方法
三、End-to-End 端到端学习
训练数据准备
模型设计
四、一些补充的问题与回答 一、Introduction
模型的简单介绍 声音模型有这么一大类其模型主要需要完成的任务是输入一段语音输出某一类别。 相关的模型或任务有 Emotion Recognition情绪识别输入语音判断语者情绪如何。 Sound Event Detection声音事件侦测输入语音判断发生了什么事可以用于安保等行业。 Autism Recognition自闭症识别输入语音判断是否患有自闭症。 Keyword Spotting关键词识别输入语音判断指定的关键词是否在语音中出现过。 那么采用这类模型和语者有关的任务有哪些呢 Speaker Recognition / Identification语者识别判断一段语音是谁说的。其本质就是使用多语者的语料库进行训练然后再输入一段语音通过模型输出所有语者的 Confidence可信度谁的可信度高就判断为这段信号是谁说的。这里我们不再过多介绍。 Speaker Verification语者验证输入两段语音判断这两段语音是否是同一个人说的。给定之前一段记录好的声音和一段新输入的声音模型会判断二者的相似度并输出一个表示相似度的概率图中scalar为标量的意思通过阈值来判断二者是否是同一个人说的。典型的应用如银行客服判断取钱的人是否是存钱者。 Speaker Diarization语者分段标记输入一段语音识别这段语音中谁在何时说了话。SD 系统先要把声音信号进行分割Segmentation。通常每一段是一句话或是一个段落。接下来我们再做 聚类Clustering来标记哪一段是同一个人声。如果不同说话人的数量是已知的那么只需要知道这段话是谁讲的就好比如电话场景通常是两个人。如果不知道是多少人在说话比如会议场景我们就需要把属于同一个人的声音聚成一类并给它一个编号。这里就需要用到一些前两种技术也就是语者识别和声纹识别的技术。
评价指标 Equal Error RateEER Equal Error RateEER中文名叫 等错误率 。在 Speaker Verification 模型中我们通常需要人为设置一个阈值来决定二者是否为同一个人说的。很自然的我们能知道设置不同的阈值模型的表现自然也不同。阈值选择通常会留给用户。那么我们怎么去评判两个模型孰优孰劣呢 我们会把所有的阈值都穷举出来画成一个图像计算 EER。我们先给一些简单的样例。 如果我直接把阈值设为1.0那么对于这个模型来说无论是哪两段语音输入进来模型都会判断为不是同一个人所说。 如果我把阈值设的挺高比如0.8那么这个模型来说可能使用同一个语者的两段音频被误判为不同人说的这个误判率【False Negative Rate】会比较高因为你的标准比较苛刻不过使用不同语者的两段音频被误判为同一人说的这个误判率【False Positive Rate】就比较低了。 如果之后我直接把阈值设为0那么对于这个模型来说无论是哪两段语音输入进来模型都会判断为就是同一个人所说利用刚刚的概念我们可以说FNR 0FPR 1。 最后以 FPR 数值为 x 轴以 FNR 数值为 y 轴我们将图像画出而 EER 就是当 FPR FNR 时二者的大小。 二、Speaker Embedding 讲解
模型框架 那么 SV 模型具体长什么样子呢传统的 SV 模型通常是采用了某些方法输入一段声音讯号就能输出一个向量来表示语者特征。这个语者特征也就是我们所说的 Speaker Embedding。有了这个方法我们就能将两段声音讯号都转为 Speaker Embedding然后去比较二者的相似度即可。 模型使用具体步骤 Stage 1Development即模型训练使用语料库对模型进行训练从而让模型学习到 Speaker Embedding 的编码方式。 Stage 2Enrollment即声纹录入需要说话者将自己的声音录入系统。系统会把这些声音一个个输入模型得到语者嵌入再取平均储存到数据库。 Stage 3Evaluation即声纹评估也就是验证阶段系统会把检测到的人声输入模型得到另一个语者嵌入与之前储存到的嵌入做比较得出是否是同一个人的结论。 值得一提的是刚刚所说的步骤中训练模型使用的语料库的语者并不会在后续模型使用中出现。 而 SV 模型的这一套思想其实和 Metric-based meta learning 思想近乎相同。详情可以参考(2) Meta Learning – Metric-based (1/3) - YouTube。
数据集 训练 SV 抽取 Speaker Embedding 的模型需要一个多大的数据集呢谷歌用了 18000 个语者总共 36M 个句子去训练模。实验跑不动这种数据。一般我们会用相对小一些的 Benchmark Corpus基准语料库比如 VoxCeleb 数据集来训练。
Speaker Embedding 制作方法 早期采用的方法是 i-vector不管输入的语音有多长最终都会生成一个400维的 i-vector来表示声纹信息。i 意思是 identity。i-Vector 是一个非常强的方法。在 16 年之前都没有被 DL 打败。 而最早采用 deep learning 来抽取 Speaker Embedding 的模型就是 d-vector。它是截取一小段声音讯号因为后面使用的 DNN 输入长度是固定的送到 DNN中去经过多层网络后最终输出。在训练过程中我们一直将这个模型当成 Speaker Recognition 模型来进行训练即最后输出是哪个语者讲的话。而模型训练完后其最后一个隐藏层的输出我们将它拿出来这就是我们要的 d-vector。 我们不用最后一层 output layer 的输出就是因为此时它将要决定是声音来源于哪个语者所以它的维度是和训练时语者数目有关的而我们并不想要这样的 vector所以使用的是最后一个隐藏层hidden layer的输出。 当然刚刚的方法只是看了一小段语音而已。想要看完一整段语音也很简单每一个小段都进行上述的操作最终取平均就得到最终的 d-vector了。在 2014 年d-vector 可以做到与 i-vector 相当的效果。不过这也只是让大家知道原来深度学习可以做这玩意。 到了2018 年出了 x-vector。它会把每个语音片段通过模型后的输出用一种方式聚合起来而不是像 d-vector 那样简单的取平均。这种方式是取每个维度的均值和方差向量拼接起来后再输入给一个模型做 Speaker Recognition 任务。到时取这个模型输出的隐层作为表征声纹信息的 x-vector。它与 d-vector 不同在它考虑的是一整段的语音信息。这里也可以考虑用 LSTM 来做聚合。 当然也可以用 Attention 来做啦算出每一个语音片段的注意力权重然后再做加权求和。还有从图像那边借来的方法 NetVLAD其主要思想是一段语音中并非所有的片段都是人声其中有的是环境噪音。我们可以想办法从中只取出人声的部分。具体细节这里不再赘述。 综合这些方法我们都是先按照 Speaker Recognition 任务来进行模型的训练然后再抽取输出拿到 Speaker Verification 任务中去用。 三、End-to-End 端到端学习
此前我们都是想办法得到 Speaker Embedding然后计算二者的相似度来完成任务的。这是分离的方法那我们有没有什么办法将“计算 Speaker Embedding”和“计算相似度”二者联合起来做 joint learning一起去学习训练呢
训练数据准备 首先我们需要准备我们训练的数据。在以前的任务中我们手上有的资料是一堆的语者每个语者说了一堆的话。假设我们的 Enrollment 环节要求语者要说 k 句话那么我们就这么准备资料 Positive Examples从某个语者说的话中挑出 k 句话当作注册的句子输入进模型中取同一个语者的另一句话当作测试的句子再输入进模型中最终输出的数值要越大越好。 Negative Examples从某个语者说的话中挑出 k 句话当作注册的句子输入进模型中取另一个语者的一句话当作测试的句子再输入进模型中最终输出的数值要越小越好。 当然除了这种准备数据集的方法我们还有其他各种各样的方法比如 Generalized E2EGE2E[Wan, et al., ICASSP’18]等等这里不再赘述。
模型设计 端到端模型它内部的构造是完全仿造传统的 SV 的模型。有 K 个注册的句子每一个句子都会进入一个网络中并产生一个 vector 来充当 Speaker Embedding用来测试的句子也是一样经过一个网络生成一个 vector。 接下来我们取注册句子生成的 vector 做个平均得到一个 vector然后再将其与刚刚测试句子生成的 vector 计算相似度这里也可以使用一个网络来计算相似度最终得到一个分数。怎样端对端训练不同人讲的语音我们就希望分数能小点同一个人讲的声音我们就希望分数大点。 常用的相似度计算是先计算二者的余弦相似度然后再做一些小变换如乘上一个权重然后再加一个偏置。 这种端对端的模型可以分成 Text-dependent 和 Text-independent。若注册和评估说的都是相同文字内容就是 Text-dependent比如必须要说同样的暗语“芝麻开门”。若可以是不同的文字内容就是Text-independent。 如果想做 Text-independent那么我们在抽取 Speaker Embedding 类似物的时候就需要尽可能只抽取语者信息而不去抽取内容信息。在这里我们可以引入 GAN 的思想来对抗训练。我们可以在 生成的 Speaker Embedding 后面接上一个 Discriminator判别器来识别文字内容有点像 ASR。而我们训练的目标又多了一个输出 Speaker Embedding 的网络要想办法去骗过这个判别器尽可能让它无法从声纹嵌入中识别出文字内容。 四、一些补充的问题与回答 EER 的意义是什么 因为此模型的错误有两种一种是明明是同一个人说的你说是不同人还有一种是话是不同人说的你却判断是同一个人说的。那么这就要涉及到两种错误率的 trade-off权衡折衷那么 EER 就是看当这两种错误的错误率相同时大小为多少以此来评判模型优劣。 这里还可以参考知乎上的回答如何理解等错误率(EER, Equal Error Rate)请不要只给定义 - 知乎 (zhihu.com)其实大差不差啦。