来源 阿里语音AI 公众号
一、背景
说话人日志(speaker diarization)也叫说话人分离,它是从一个连续的多人说话的语音中切分出不同说话人的片段,并且判断出每个片段是哪个说话人的过程。借助说话人日志技术可以完成对音频数据流的结构化管理,具有广泛的应用价值,例如可以利用分离结果进行说话人自适应,以提高语音识别的准确率;可以辅助会议、电话数据进行自动转写构建说话人的音频档案;也可以利用说话人分离技术,实现语料库的自动跟踪和标注。
说话人日志技术解决的是两个方面的问题:“谁在说话”和“在什么时候说话”,如图1所示。“谁在说话”通常可以由说话人识别方法来解决,“在什么时候说话”可以通过说话人分割和说话人聚类来解决。
图1
在客服质检业务中,针对单通道合录语音通话,通常需要区分哪些发音来自客户,哪些发音来自客服,因此需要在说话人分割聚类的结果上为类别打上标签。在客服质检业务中,发音人的语音很难提前获取,客服人员流动性较大,通过声纹识别的方式,提前注册客户和客服的语音不太现实。因此,“谁在说话”的问题通常根据分割聚类后的发音内容,进行关键字或话术匹配等手段解决。这个过程可以看做是文本的后处理,这里不属于语音技术范围,以下的介绍内容不针对此展开。
二、 说话人日志算法
2.1说话人日志基本框架
现有的说话人日志系统大多由多个相对独立的部分组成,如图2所示:(1)语音分割模块,去除非语音部分,将输入的语音分割为小段;(2)特征向量提取模块,从分割好的小段语音中提取出说话人的特征向量,例如d-vector、i-vector等;(3)聚类模块,通过计算说话人特征向量间的相似度,确定说话人数量,并对不同片段分配说话人身份;(4)重新分割模块,进一步细化分类结果。
图2
2.2说话人日志算法介绍
我们搭建了基于x-vector的说话人日志系统,基本框架如图3所示。主要的模块包括梅尔频率倒谱系数特征(MFCC)提取模块、语音活动点检测(SAD)模块、x-vector模块、PLDA打分模块以及凝聚分层聚类(AHC)模块。
图3
主要的模型包括SAD模型、x-vector模型和PLDA模型。SAD模块去除非语音片段,并对剩余的有效语音进行粗分类,以非语音片段作为分割点,将有效语音切分成不同的片段。在不同说话人语音间间隔较大的情况下,粗分类可以将不同的说话人语音切分开来,每个片段只包含一个说话人语音。但在很多情况下,同一个粗分类的片段还会包含不同的说话人信息,因此需要对粗分类片段做进一步处理。通过对每个粗分类片段进一步切分,使用特定窗长和窗移进行加窗处理,然后对每一个窗提取embedding特征。
Embedding特征使用x-vector框架提取,模型基本结构如图4所示。然后对每个片段进行聚类,对不同片段分配说话人身份,具体的说,对embedding特征进行两两打分,打分使用说话人识别的主流技术PLDA方法,通常来说,得分越高,相似度越高,越可能是同一个人的语音。AHC不断重复的将相似度高的类别进行合并,直到满足迭代中止条件。AHC合并后的结果即为最终的分离结果。
图4
2.3评价指标
我们采用分离错误率(DiarizationError Rate,DER)作为说话人分离效果的评价指标。计算公式如下:
其中,false alarm表示非语音错误地识别成语音的时间长度,miss detection表示语音错误识别成非语音的时间长度,confusion是混淆的说话人的时长,total是参照语音的总时长。DER值越小,分离效果越好。
三、效果及业务应用
本方法在实际电话客服数据集上可达到很好的说话人分离效果。说话人日志技术已经达到在真实客服质检业务场景中的可应用水平,为客户提供高质量的说话人分离能力。在智能语音交互公共云服务及本地部署软件中的“录音文件识别”接口进行体验。