英文会议对话场景,端到端说话人日志模型,解决 “who spoke when” ICASSP 2023,在 Callhome 数据集上获得 SOTA 结果。
支持功能:
2023年1月(预计1月16号发布):funasr-0.1.6, modelscope-1.1.4
2022年11月:funasr-0.1.4, modelscope-1.1.3
Speaker Overlap-aware Neural Diarization(SOND)是达摩院语音团队提出的一种高效建模语音重叠的说话人日志模型。本项目提供了在 Callhome 英文开源数据集上预训练的 SOND 模型,可以被应用于智能会议分析、对话分析等相关的学术研究。
SOND模型结构如上图所示,包括对语音信息进行编码的 Speech encoder、对说话人信息进行编码的 Speaker encoder、上下文依赖的打分器 CD scorer、上下文无关的打分器 CI scorer以及预测幂集编码的说话人混合网络 SCN。其中:
更多细节详见:
在页面右侧,可以在“在线体验”栏内看到我们预先准备好的示例音频,点击播放按钮可以试听,点击“执行测试”按钮,会在下方“测试结果”栏中显示多个说话人的语音活动区间。如果您想要测试自己的音频,可点击“更换音频”按钮,选择上传或录制一段音频,完成后点击执行测试,各个说话人的语音活动区间将会在测试结果栏中显示。
对于灵活调用有需求的开发者,我们推荐您使用Notebook进行处理。首先登录ModelScope账号,点击模型页面右上角的“在Notebook中打开”按钮出现对话框,首次使用会提示您关联阿里云账号,按提示操作即可。关联账号后可进入选择启动实例界面,选择计算资源,建立实例,待实例创建完成后进入开发环境,输入api调用实例。
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import numpy as np
# 初始化推理 pipeline
# 当以原始音频作为输入时使用配置文件 sond.yaml,并设置 mode 为sond_demo
inference_diar_pipline = pipeline(
mode="sond_demo",
num_workers=0,
task=Tasks.speaker_diarization,
diar_model_config="sond.yaml",
model='damo/speech_diarization_sond-en-us-callhome-8k-n16k4-pytorch',
sv_model="damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch",
sv_model_revision="master",
)
# 以 audio_list 作为输入,其中第一个音频为待检测语音,后面的音频为不同说话人的声纹注册语音
audio_list=[[
"https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/record.wav",
"https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/spk_A.wav",
"https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/spk_B.wav",
"https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/spk_B1.wav"
]]
results = inference_diar_pipline(audio_in=audio_list)
for rst in results:
print(rst["value"])
audio_list=[[
"example/record.wav",
"example/spk_A.wav",
"example/spk_B.wav",
"example/spk_B1.wav"
]]
results = inference_diar_pipline(audio_in=audio_list)
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import numpy as np
# 初始化推理 pipeline
# 当输入为 fbank 特征时使用的配置文件 sond_fbank.yaml
# output_dir 为结果保存路径
inference_diar_pipline = pipeline(
mode="sond",
output_dir="outputs",
diar_model_config="sond_fbank.yaml",
task=Tasks.speaker_diarization,
model='speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch',
num_workers=1
)
# feats.scp 包括 fbank 特征
# utt1 path/to/feats.ark:xxx
# utt2 path/to/feats.ark:xxx
# profile.scp 包括基于 xvector 的 speaker embedding, 可使用 ModelScope 上的如下模型 speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch 进行提取
# utt1 path/to/profile.ark:xxx
# utt2 path/to/profile.ark:xxx
data_path_and_name_and_type = [
("data/test_rmsil/feats.scp", "speech", "kaldi_ark"),
("data/test_rmsil/profile.scp", "profile", "kaldi_ark")
]
pipeline(audio_in=data_path_and_name_and_type)
如果您有本地推理或定制模型的需求,可以前往下载FunASR语音处理框架,不仅涵盖语音识别、端点检测、说话人确认及日志等多种模型,还支持ModelScope开源模型的推理,使研究人员和开发者可以更加便捷的进行模型研究和生产,目前已在github开源:FunASR
# 安装 Pytorch GPU (version >= 1.7.0):
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=9.2 -c pytorch
# 对于其他版本,请参考 https://pytorch.org/get-started/locally
# 安装 ModelScope 包:
pip install "modelscope[audio_asr]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html
# 下载项目代码:
git clone https://github.com/alibaba/FunASR.git
# 安装 FunASR:
pip install --editable ./
cd egs_modelscope/speaker_diarization/speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch
python unit_test.py
接下以 Callhome 数据集为例,介绍如何使用 FunASR 对模型的 DER 性能指标进行评估:
# 进入工作目录
cd egs/callhome/diarization/sond
# 进行评估,结束后您将会得到大概 10.14% 的 DER 结果
sh ./run.sh
训练和微调功能正在开发中,敬请期待。
testset | DER(%) |
---|---|
Callhom | 10.14 |
运行范围
使用方式
使用范围与目标场景
@inproceedings{wang2023told,
title={TOLD: A Novel Two-Stage Overlap-Aware Framework for Speaker Diarization},
author={Wang, Jiaming and Du, Zhihao and Zhang, Shiliang},
booktitle={ICASSP},
year={2023}
}
@inproceedings{du2022sond,
title={Speaker Overlap-aware Neural Diarization for Multi-party Meeting Analysis},
author={Du, Zhihao and Zhang, Shiliang and Zheng, Siqi and Yan, Zhijie},
booktitle={EMNLP},
year={2022}
}