ICASSP2023论文代码开源|TOLD能对混叠语音建模的说话人日志框架

简介: ICASSP2023论文代码开源|TOLD能对混叠语音建模的说话人日志框架

a38b80679aa4f3b51d04e5731458304e.png


说话人日志(Speaker Diarization, SD)任务的目标是检测不同说话人的语音活动时间段,即回答“谁在什么时间说话了”这一问题。


传统的说话人日志系统,往往基于聚类算法实现,一般包括成如下步骤:(1)使用语音端点检测将原始音频切分成语音片段;(2)使用说话人嵌入码提取模型;(3)使用聚类方法,例如K-means等将属于同个说话人的音频片段分组到一起。然而,这些聚类方法往往是无监督的,无法直接最小化说话人日志错误,从而导致次优结果。尽管之后也有一些有监督的聚类方法被提出,但是,不管是无监督还是有监督的聚类方法,它们都假设了每个语音片段只会对应单个说话人,因此无法解决混叠语音问题。


为了处理混叠语音,基于神经网络的端到端说话人日志方法(end-to-end neural diariza- tion ,EEND)将说话人日志重新定义成一个多标签分类问题,从而能直接优化说话人日志错误,并且拥有处理混叠语音的能力。进一步地,基于编解码结构的吸引子模型(encoder-decoder based attractor,EDA)被引入到EEND中,用于适配说话人数量不固定的情况。在此基础之上,也有一些二阶段的方法别提出,用于进一步提升说话人日志性能。


近期,阿里巴巴达摩院语音实验室的论文“TOLD: A NOVEL TWO-STAGE OVERLAP-AWARE FRAMEWORK FOR SPEAKER DIARIZATION”被ICASSP 2023 接收。该论文是达摩院语音实验室在说话人日志方向的最新成果,是对“如何显式建模混叠语音”这一问题的研究探索。


论文相关代码,已在达摩院语音实验室的代码仓库 FunASR 进行开源。


论文题目:TOLD: A NOVEL TWO-STAGE OVERLAP-AWARE FRAMEWORK FOR SPEAKER DIARIZATION


作者:王嘉明,杜志浩,张仕良


论文地址:https://arxiv.org/abs/2303.05397


代码仓库:https://github.com/alibaba-damo-academy/FunASR/tree/main/egs/callhome/TOLD


在本论文中,我们首先提出了对于重叠语音进行显式建模的端到端模型overlap-aware EEND(EEND-OLA),利用幂集编码(power set encoding,PSE)将说话人日志从多标签分类问题转化为单标签分类问题,同时显式建模了说话人之间的依赖和重叠。在此基础之上,我们又引入了说话人重叠后处理模型SOAP(speaker overlap-aware post-processing, SOAP),来进一步改进EEND-OLA的结果,从而提出了一种二阶段的、能对混叠语音建模的说话人日志框架 TOLD(Two-stage OverLap-aware Diarization framework)。


具体而言,在第一阶段,使用EDA来提取说话人嵌入码,同时通过最小化置换不变损失(permutation-invariant,PIT)来确定说话人顺序,并基于此用单一标签来代替多维0/1标签,更好地建模混叠语音。在第二阶段,根据第一阶段得到的说话人日志结果,从非混叠语音片段中提取说话人嵌入码,并和声学特征一起送入后处理模型 SOAP 来得到更精准的说话人日志结果。


两阶段重叠敏感的说话人日志模型 TOLD



(图示:TOLD整体框架图,左边为第一阶段的EEND-OLA,右边为第二阶段的SOAP) 


>>>第一阶段:说话人重叠敏感的端到端模型 EEND-OLA


在TOLD的第一阶段(如图 2左半部分所示),输入特征首先通过 Transformer 编码器得到声学特征,再送到由两层 LSTM 组成的 EDA 模块,预测得到该输入音频对应的说话人数量和每个说话人对应的说话人嵌入码(EDA论文中称为吸引子),然后,计算每个说话人嵌入和声学特征之间的相似度,并通过最小化 PIT 损失函数来确定说话人顺序(具体见论文)。在确定说话人的顺序后,我们就可以通过幂集编码 PSE 将原来的多维0/1标签转成单一类别标签:


009f95bcb2115fe626b684e591ce57f6.png

为了预测 PSE 标签,我们额外使用了一层 LSTM 来更好地利用上下文信息。由于LSTM要求输入序列的特征维度是固定的,因此,我们会先用零向量来将 EDA 得到的说话人嵌入的数量填充到固定数值,再逐帧逐说话人地将他们拼接在一起,即得到的结果即为 LSTM 的输入,再通过一个线性层来得到最终的 PSE 分类结果。我们通过最小化PSE标签的真实值和预测值之间的交叉熵损失来优化 EEND-OLA 模型。


>>>第二阶段:说话人重叠敏感的后处理模型 SOAP


如图示右半部分所示,首先根据第一阶段的结果挑选出没有重叠的语音来提取说话人的声纹嵌入码。我们使用一个在Switchboard和Callhome1上预训练好的ResNet34说话人识别模型作为声纹提取器,同时也用它来初始化SOAP的Encoder部分网络参数。虽然SOAP Encoder和声纹提取器的网络结构一样,但其输入为窗长1.6s、窗移0.8秒的一小段语音而非整段语音,从而得到每个时刻更细粒度的说话人声学特征。


给定每一时刻的声学表示和说话人的声纹特征,上下文有关(Context-dependent, CD)和上下文独立(Context-independent, CI)的打分器 Scorers 分别用来建模局部和全局的说话人特点,并以此来预测不同时刻的说话人活动。我们使用一个三层的全连接网络DNN来作为上下文独立打分器CI Scorer。对于上下文有关打分器 CD Scorer,我们使用多头自注意力机制 (Multi-Head Self Attention, MHSA) 来进行建模每个时刻的上下文有关的说话人发声概率。根据俩个打分器预测出的说话人发声概率,我们采用一个 LSTM 网络来建模说话人之间的依赖和重叠关系,并以此来预测幂集编码 (PSE) 标签的后验概率。


我们采用一种多任务学习的训练策略来更好的训练 SOAP 模型。主要的学习目标是最小化网络预测出的后验概率和真实PSE标签之间的交叉熵损失;次要学习目标是 CI 和 CD 打分器的分数应当尽量准确地预测出不同说话人的独立发声活动,即 CI 和 CD 得分与多维 0/1 标签之间的二值交叉熵。两个学习目标之间的平衡因子设置为0.1。


实验结果


>>>EEND-OLA与其他端到端说话人日志模型的对比


我们在常用的公开数据集 CALLHOME 上验证了TOLD的有效性。首先,为了验证 PSE 的作用,我们将第一阶段对应的 EEND-OLA 模型和其它的端到端模型进行了对比,具体结果如表1。在2个说话人的情况下,EEND-OLA 和 CB-EEND 这种只能处理固定说话人数的模型的结果相近;而在考虑所有说话人数的情况下,相比于 EEND-EDA ,EEND-OLA 能够在 DER 指标上取得13.49%的相对提升,证明了混叠语音建模的有效性。


表 1 不同的一阶段模型在CALLHOME测试集上的性能对比


>>>TOLD与其他两阶段说话人日志模型的对比


表 2给出了 TOLD 和其它二阶段模型在 CALLHOME 数据集上的性能比较。其中,除了 TOLD 之外,剩余的几个二阶段模型都是 EEND 模型和聚类方法的结合。不同的是,TOLD 的两个阶段的模型都是基于神经网络的,这为后续统一成端到端系统提供了潜力。总的来讲,TOLD 在 CALLHOME 测试集上取得了10.14%的DER。这是在该测试数据集上的一个新的最优结果。


表 2 不同的二阶段模型在CALLHOME测试集上的性能对比


>>>两个阶段不同模型搭配的性能对比


为了进一步探索不同阶段使用不同模型对性能的影响,我们设计了消融实验,具体结果如表3所示。对于第一阶段,我们比较了 VBx、EEND-EDA和EEND-OLA。对于第二阶段,我们则比较了TSVAD 和 SOAP。根据表 1和表 3的结果,我们发现,在使用相同的第二阶段模型情况下,第一阶段模型的DER越低,整个系统的性能就越好。同时,我们发现无论使用哪种第二阶段模型,所提出的EEND-OLA 总是比 VBx 和 EEND-EDA 提供更好的性能。此外,我们还发现无论使用哪种模型作为第一阶段,SOAP 提供的 DER 都比 TSVAD 低,这表明 SOAP 可能更适合用于后处理。


表3 不同阶段使用不同方法在CALLHOME测试集上的性能比较


Future Work


在本论文中,我们首先提出了EEND-OLA,利用幂集编码,将说话者日志问题,从原来的多标签预测重新定义为单标签分类问题,实现了对于说话者依赖关系和混叠语音的显式建模。受最近被提出的二阶段混合系统的启发,我们进一步提出了 TOLD 框架,将 EEND-OLA 得到的初始说话人日志结果,通过重叠感知后处理 SOAP 进行迭代提升,并在 CALLHOME 测试集上实现了新的最优结果。同时,通过比较不同阶段使用不同方法的性能差异,我们证明了 EEND-OLA 和 SOAP 相比其它模型的优越性。未来,我们会尝试对 TOLD 进一步改进,增加自适应粒度的建模方式,使其能够处理不同时长的语音。


‍▎联系我们


TOLD的代码已在FunASR开源欢迎对识别模型开源和应用感兴趣的研究人员和开发人员加入Fun-ASR开源社区交流群,共同探讨精进!



References:

[1]Zhihao Du, Shiliang Zhang, Siqi Zheng, and Zhijie Yan, “Speaker overlap-aware neural diarization for multi-party meeting analysis,” in EMNLP, 2022.

[2]Yusuke Fujita, Naoyuki Kanda, Shota Horiguchi, Kenji Nagamatsu, and Shinji Watanabe, “End-to-end neural speaker diarization with permutation-free objectives,” INTERSPEECH,  pp. 4300– 4304, 2019.

[3]ShotaHoriguchi, YusukeFujita, ShinjiWatanabe, YawenXue, and Kenji Nagamatsu, “End-to-end speaker diarization for an unknown number of speakers with encoder-decoder based at- tractors,” in INTERSPEECH, 2020, pp. 269–273.

[4]Chunlei Zhang, Jiatong Shi, Chao Weng, Meng Yu, and Dong Yu, “Towards end-to-end speaker diarization with generalized neural speaker clustering,” in ICASSP, 2022, pp. 8372–8376.

[5]Shota Horiguchi, Shinji Watanabe, Paola Garc ́ıa, Yawen Xue, Yuki Takashima, and Yohei Kawaguchi, “Towards neural diarization for unlimited numbers of speakers using global and local attractors,” in ASRU, 2021, pp. 98–105.


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
XML Java Maven
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
这篇文章是Spring5框架的入门到实战教程,介绍了Spring5的新功能——整合日志框架Log4j2,包括Spring5对日志框架的通用封装、如何在项目中引入Log4j2、编写Log4j2的XML配置文件,并通过测试类展示了如何使用Log4j2进行日志记录。
Spring5入门到实战------16、Spring5新功能 --整合日志框架(Log4j2)
|
5天前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
9天前
|
存储 缓存 监控
【嵌入式SD NAND】基于FATFS/Littlefs文件系统的日志框架实现
综上所述,构建一个基于FATFS/Littlefs文件系统的日志框架需要对文件系统的操作有深入理解,并以此为基础设计一套完整的日志处理机制。这样的框架不仅能够确保日志数据的完整性和系统的鲁棒性,同时还能够满足嵌入式系统对于性能和资源使用的严格要求。
29 4
|
19天前
|
开发框架 缓存 前端开发
基于SqlSugar的开发框架循序渐进介绍(8)-- 在基类函数封装实现用户操作日志记录
基于SqlSugar的开发框架循序渐进介绍(8)-- 在基类函数封装实现用户操作日志记录
47 12
|
4天前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
1月前
|
存储 Web App开发 Java
《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
【7月更文挑战第13天】这篇文章介绍了如何在Java中创建一个简单的自定义日志系统,以替代Log4j或logback。
133 5
|
29天前
|
Java 程序员 Linux
浅析JAVA日志中的性能实践与原理解释问题之使用日志框架记录日志问题如何解决
浅析JAVA日志中的性能实践与原理解释问题之使用日志框架记录日志问题如何解决
|
1月前
|
Unix Python
Python代码示例:使用`syslog`模块进行日志记录
Python代码示例:使用`syslog`模块进行日志记录
|
4天前
|
数据采集 监控 数据安全/隐私保护
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
在Selenium Web数据采集时,日志管理至关重要。通过调整`–log-level`参数可优化日志详细度,如设置为`INFO`记录一般操作信息。结合代理IP、Cookie及user-agent配置,不仅能提高采集成功率,还能规避反爬机制。合理选择日志级别有助于调试与性能平衡,在复杂的数据采集任务中保持程序稳定与可控。
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
|
6天前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
192 65

热门文章

最新文章