课程主页:http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html

视频地址:https://www.bilibili.com/video/BV1RE411g7rQ?p=1

参考资料:https://blog.csdn.net/qq_44574333/category_10304412_2.html

备注:图片均来自于课件。

这次回顾P16,这部分介绍了语者验证问题。

语者验证(Speaker Verification)

语者验证是指输入语言,输出类别的问题:

类似的问题有:

  • 情绪识别。
  • 声音事件检测。
  • 自闭症识别。
  • 关键字发现。

这些问题和语者验证类似,所以这讲主要讨论语者验证,这一讲的内容如下:

  • 任务介绍。
  • 语者验证框架介绍。
  • 语者嵌入(Speaker Embedding)。
  • 端到端。

任务介绍

语者识别(Speaker Recognition / Identification)

语者识别的任务是判断一段语音是谁说的,该任务为多类别分类:

语者验证(Speaker Verification)

语者验证的任务是判断两段语音是否为同一人所说,模型如下:

由于涉及到阈值设定,所以评估两个系统好坏的方式为Equal Error Rate (EER):

  • 首先画出不同阈值时,同一语者被判断成不同语者比例(FN)和不同语者被判定成同一语者(FP)的关系:

  • 该曲线和$y=x$的交点即为EER。

语者验证是本讲的重点。

语者分段标记(Speaker Diarization)

语者分段标记的任务是:在一段语音中,谁在何时说话。

具体来说,我们得到的是一段语音,例如会议记录,电话记录等等,任务有如下两步:

  1. 分割。
  2. 聚类。(语者的数量可能未知)

语者验证框架介绍

语者验证的主要方式是抽取语者的信息(Speaker Embedding),然后比较两者是否相同:

框架

模型主要分为三个部分:

  • 抽取语者信息(Development)。
  • 让语者说话,注册其信息(Enrollment)。
  • 根据新的语者所说的话,判断其是否和之前语者相同(Evaluation)。

注意阶段2,3的语者在阶段1中并不会出现。

具体架构如下:

语者嵌入(Speaker Embedding)

这部分介绍最关键的一步,语者嵌入。

i-vector

这部分老师并没有详细介绍,可以参考如下资料:

https://www.slideshare.net/xavigiro/speaker-id-d3l3-deep-learning-for-speech-and-language-upc-2017

整体的过程如下:

d-vector

d-vector的思路如下:

  • 抽取一段声音信号。
  • 输入到DNN,得到DNN的输出。
  • 讲DNN的输出喂给output layer,由此判断声音信号的语者是谁。
  • 训练后,DNN的输出即为d-vector。

模式如下:

注意到之前的方法只考虑了一小段声音信号,为了解决这点,利用滑动窗口的方式计算多段d-vector,然后将其平均即可得到最终的d-vector:

x-vector

x-vector的思路如下:

  • 抽取一段声音信号。
  • 输入到DNN,得到DNN的输出。
  • 利用滑动窗口的方式得到多个输出。
  • 将多个输出做statistical pooling,得到mean和variance,拼接起来输入到DNN,得到一个向量$v$,将该向量输入给output layer,由此判断声音信号的语者是谁。
  • 训练后,向量$v$即为x-vector。

图示如下:

进阶方法

  • Attention Mechanism [Chowdhury, et al., ICASSP’18]
  • NetVLAD [Xie, et al., ICASSP’19]

端到端

之前的方法是分为两阶段训练,第一阶段训练抽特征的模型,第二阶段训练判别模型;端到端的思路是将两者结合:

数据集构建:

  • 让语者说多个句子。
  • 正样本:
    • $K$个语言者$i$的句子 + $1$个语者$i$的句子。
  • 负样本:
    • $K$个语言者$i$的句子 + $1$个语者$j$的句子。

模型架构与训练:

模型分为Text-dependent和Text-independent:

  • Text-dependent:Enrollment和Evaluation说的内容相同。

  • Text-independent:Enrollment和Evaluation说的内容不同。

    • 这一步要训练一个Discriminator,Discriminator判断声音信号的文字内容是否相同。所以训练完成后,Networ可以“骗过”Discriminator,即产生和内容无关的声音信号。