【云驻共创】基于 d-vector 的说话人变化点检测模型
前言
华为云 AI 论文精读会 2021 邀请了很多计算机视觉、迁移学习、自然语言处理等领域的专家学者,基于华为云的 ModelArts 解读经典论文算法,让更多人来低门槛使用经典的算法。参赛者将有机会获得相应的奖品和证书,同时邀请同学和朋友参赛也能获得相应的奖品。 华为云 AI 论文精读会 是一个非常不错的活动,既能学到知识,又能结交到朋友,非常鼓励大家多多参与。
正文
本文主要介绍来自 华为云 AI 论文精读会 中的一篇论文,题目是基于 d-vector 的说话人变化点检测模型,分享团队的成员分别是来自哈尔滨工业大学的 蒋士强 同学和来自北京理工大学的 李朝阳 同学。接下来,我们开始详细介绍基于 d-vector 的说话人变化点检测模型的算法原理和实现过程。
一、论文概要
论文题目是 Speaker Segmentation Using Deep Speaker Vectors For Fast Speaker Change Scenarios ,本文在 2017 年发布在 IEEE 上。了解 IEEE 的小伙伴都知道, IEEE 全称 是 Institute of Electrical and Electronics Engineers ,中文名 称是 电气与电子工程师协会,是 目 前世界上最大的非营利性专业技术学会,会员人数超过 40 万人,遍布全球 160 多个国家。在电气、电子、计算机工程和科学有关的开发和研究,制定了 900 多 的行业标准,现在已经是国际影响力巨大的学术组织,目前国内也有多地 50 多所高校成立了 IEEE 学生分会。 能够发表在 IEEE 上,足以说明这篇论文的含金量。接下来说一下论文的研究背景,说话人分割主要是用来在一段音频流中检测说话人的变化点,并且将音频流拆分成同质的段,每一段理想情况下,只有一个说话人。这项技术经常用来在音频信号处理应用的预处理阶段,例如说话人跟踪、多说话人检测和演讲转录等应用场景。
目前,主要的用于说话人分割的方法有三种:基于度量的方法、基于模型的方法、混合方法。其中,涉及的相关工作有哪些哪些难点呢?首先,基于度量的分割方法的难点在于如何设置分析窗口的大小,如果窗口太大两个邻接窗口中可能包含不止一个说话人,并且可能降低分割结果准确度。太小的分析窗口不足以更准确提取说话人的特征。为了能够更有效的在一个短的时间窗内分辨出两个说话人,作者研究了一种更加有效的提取说话人的特征点的方式。
深度学习提供了一种新的特征学习的方法,在深度神经网络( DNN )网络中,以任务为导向的特征可以通过输入特征一层一层学习得到,较传统的特征提取方法有了很大程度上的提高。借鉴 梅尔频谱倒谱系数 ( MFCCs : Mel - Frequency Cepstral Coefficient s )方法,作者希望通过语音空间到说话人空间到非线性映射能够更加高效准确的提取说话人语音特征。
作者研究了最短的语音片段长度,并可以通过帧级 d- 矢量更有效的提取说话人的特征向量,即使是 10 帧的长度也具备分辨能力。将 d- 矢量应用在快速说话人变更场景中说话人分割任务中, FAR 降低了 26% 以上, MDR 降低了 21% 以上。
二、模型分析
说话人识别算法的目的是从音频 数据信息 中确认说话人的身份 ,这个过程需要 两个常用的任务,第一个是说话人验证( speaker vertification ) ,就是 确认一个说话人的身份是对的还是错的;第二个是说话人鉴定 , 在一组说话人中,对未知的音频进行鉴定是哪一个说话人。验证和鉴定算法可能需要说话人说出一个特定的词语(文本相关)或者随便说出一段语音(文本无关) ,但是本模型将是这一切内容的前提,在识别之前,我们需要先检测出对应的个体音频信息,尽可能划分出每个个体特有的音频段信息,便于后续特征提取过程得到更加准确的音频特征数据,这个过程中就用到 d-vector 算法模型 。 其实, d-vector 算法模型是谷歌公司提出来的,谷歌提出的 d-vector 的模型结构是什么样的呢?接下来,我们深入分析一下。
1. Deep Speaker Vectors
一个训练完成的 深度神经网络 ( DNN 网络)可以将一层一层的将输入特征转化成任务为导向的特征。下图是用来进行说话人特征学习的 深度神经网络 模型。算法的输入一个窗口中的 40 维能量特征( Fbanks ),隐藏层有 4 层,每层包含了 200 个神经元。算法的输出就是对应训练数据中的说话人。
2. 基于 d-vector 的总体模型设计
首先,训练好对应的算法,提取预处理后的音频 Fbank 特征,然后输入每一帧的 Fbank 特征到 DNN 中,进而得到 d-vector 向量,再计算每个相邻分析窗的度量距离。最后,滑动分析窗口,计算得分。
分数的得出基于两个假设,其一、如果两个分析窗口中的说话人一样,那么 d-vector 的距离分差大。其二、如果两个分析窗口中的说话人不一样,那么 d-vector 的距离分差小。判断规则就是定义一个阈值,超过这个阈值的很大可能就是分割点。
3. 实现结果
根据下表的实验结果,可以得出一下结论:如果说话人语音在不同的长度下, d-vector 方法都能表现出更好的性能,该方法尤其适合在说话人快速切换的场景下。综合对比 BIC 、 GLR 、 KL2 、 d-vector 四种方法,在相同条件下, d-vector 方法表现都优于其他方法。
三、代码复现
接下来,通过代码复现来具体分析音频数据。编码过程大概有两个步骤,分别是模型构建和模型部署。
1. d-vector 部分
首先,以 Tensorflow 作为框架,然后按照论文中的要求搭建 DNN 网络,选择 VoxCeleb dataset 的 100 个 speaker 数据作为 DNN 的数据集。最后,训练调参得到 DNN 模型。
2. 分割部分
加载训练完成的 DNN 模型,提取每个窗口中的 d-vector ,计算窗口得分,根据阈值得到分割点。
3. 代码解读
( 1 )数据预处理
对音频增加滤波,获取音频数据的 Fbank 特征和标签数据并存储。
( 2 )搭建 DNN 网络
构建 DNN 网络结构,其中,
输入层: 40 个神经元;
隐含层:四层,每层 200 个神经元;
输出层:神经元个数和 speaker 个数相同;
使用 maxout 作为激活函数,同时使用 dropout 防止过拟合。选择优化器,设置批处理操作,以及训练结果评估。设置迭代轮数进行训练,在得到较理想的效果时,保存模型。
( 3 )使用 d-vector
在分割说话人时,使用的是 DNN 网络的最后一层隐含层的特征量。
计算两个时间窗口中 d-vector 的相似程度,使用 cosine 值作为两个时间窗的相似度。
获取通过模型得到的分割时间点,输入是一段音频信号,输出是说话人变化的分割点,当然可以设置窗口 d-vector 的相似程度阈值。
最后
上述算法之所以可以实现,首先需要感谢华为云 ModelArts 强大的硬件支持, ModelArts 是面向开发者的一站式 AI 开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式 Training 、自动化模型生成,及端 - 边 - 云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期 AI 工作流。 最后,还要感谢 华为云 AI 论文精读会 ,提供了这样的机会可以让 计算机视觉、自然语言处理等领域的学者 ,特别是学生有机会和条件去学习优秀的论文,帮助自己成长,提高自己的学科专业知识和研究能力。
本文整理自【内容共创系列】华为云签约作者征集令,认证签约作者赢取专属权益!
- 点赞
- 收藏
- 关注作者
评论(0)