SOND说话人日志-英文-Callhome-8k-离线-pytorch
使用Callhome、Switchboard训练的说话人日志模型SOND,在Callhome上获得SOTA结果,可用于相关学术研究
  • 模型资讯
  • 模型资料

Highlights

英文会议对话场景,端到端说话人日志模型,解决 “who spoke when” ICASSP 2023,在 Callhome 数据集上获得 SOTA 结果。

支持功能:

  • 给定若干说话人的声纹信息,识别并追踪语音段中的这些说话人
  • 给定若干说话人的原始语音,识别并追踪语音段中的这些说话人

ModelScope-FunASR

FunASR希望在语音识别方面建立学术研究和工业应用之间的桥梁。通过支持在ModelScope上发布的工业级语音识别模型的训练和微调,研究人员和开发人员可以更方便地进行语音识别模型的研究和生产,并促进语音识别生态系统的发展。

最新动态
| 环境安装
| 介绍文档
| 中文教程
| 服务部署
| 模型库
| 联系我们

项目介绍

Speaker Overlap-aware Neural Diarization(SOND)是达摩院语音团队提出的一种高效建模语音重叠的说话人日志模型。本项目提供了在 Callhome 英文开源数据集上预训练的 SOND 模型,可以被应用于智能会议分析、对话分析等相关的学术研究。

SOND模型结构

SOND模型结构如上图所示,包括对语音信息进行编码的 Speech encoder、对说话人信息进行编码的 Speaker encoder、上下文依赖的打分器 CD scorer、上下文无关的打分器 CI scorer以及预测幂集编码的说话人混合网络 SCN。其中:

  • Speech encoder 采用说话人识别任务中常用的 ResNet34网络结构,并采用 windowed statistic pooling 来得到每个时刻的语音特征
  • Speaker encoder 采用 3 层全连接网络来对说话人的声纹信息进行映射,使其与语音特征在同一个特征空间
  • 上下文无关的打分器 CI scorer 通过对比目标说话人与训练集中其他说话人的不同来学习全局的说话人区分性
  • 上下文依赖的打分器 CD scorer 通过对比目标说话人与上下文中其他说话人的不同来学习局部的说话人区分性
  • 说话人混合网络 SCN 以 CI 和 CD 打分为输入,来对不同的说话人组合进行建模。
  • 预测网络为多层FFN,并采用Softmax作为激活函数来对幂集标签 PSE 进行预测

幂集(PSE)标签示例

更多细节详见:

如何使用模型

在线快速体验(集成中)

在页面右侧,可以在“在线体验”栏内看到我们预先准备好的示例音频,点击播放按钮可以试听,点击“执行测试”按钮,会在下方“测试结果”栏中显示多个说话人的语音活动区间。如果您想要测试自己的音频,可点击“更换音频”按钮,选择上传或录制一段音频,完成后点击执行测试,各个说话人的语音活动区间将会在测试结果栏中显示。

在Notebook中推理

对于灵活调用有需求的开发者,我们推荐您使用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',
    model_revision="v1.0.3",
    sv_model="damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch",
    sv_model_revision="v1.0.0",
)

# 以 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)
print(results)
  • 除了url表示的网络wav文件,还可使用本地磁盘上的wav文件:
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='damo/speech_diarization_sond-en-us-callhome-8k-n16k4-pytorch',
    model_revision="v1.0.3",
    sv_model="damo/speech_xvector_sv-en-us-callhome-8k-spk6135-pytorch",
    sv_model_revision="v1.0.0",
    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

FunASR框架安装

  • 安装FunASR和ModelScope
# 安装 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 ./

基于ModelScope进行推理

  • 在上面的安装完成后,就可以在使用ModelScope进行推理了,可运行如下命令测试各种用法:
cd egs_modelscope/speaker_diarization/speech_diarization_sond-zh-cn-alimeeting-16k-n16k4-pytorch
python unit_test.py 

使用 FunASR 在 Callhome 测试集上进行性能评估(working)

接下以 Callhome 数据集为例,介绍如何使用 FunASR 对模型的 DER 性能指标进行评估:

# 进入工作目录
cd egs/callhome/diarization/sond

# 进行评估,结束后您将会得到大概 10.14% 的 DER 结果
sh ./run.sh

基于ModelScope进行模型微调

训练和微调功能正在开发中,敬请期待。

Benchmark

训练配置

  • Feature info: using 80 dims fbank, no cmvn
  • Train info: noam, lr 1.0, batch_size 32, 2 gpu(Tesla V100), acc_grad 1, 200000 steps, clip_gradient_norm 5.0
  • Loss info: cross entropy softmax, speaker discriminative loss
  • Model info: ResNet34, FFN, SAN, FSMN, windowed statistics pooling
  • Train config: sond.yaml
  • Model size: 19.09 M parameters

实验结果 (DER)

  • Test set: Alimeeting-test
testset DER(%)
Callhom 10.14

使用方式以及适用范围

运行范围

  • 支持Linux-x86_64、Mac和Windows运行。

使用方式

  • 直接推理:可以直接使用原始语音和说话人注册语音作为输入,识别输出各个说话人的活动区间。
  • 微调:正在开发中。

使用范围与目标场景

  • 适用于相关学术研究,在 Callhome 数据集上进行说话人日志、识别等任务。

模型局限性以及可能的偏差

  • 特征提取流程和工具差异,会对 DER 的数值带来一定的差异( < 0.1% )
  • 识别语音输入应接为近 16 秒的无静音数据,注册语音长度应大于 2 秒

相关论文以及引用信息

@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}
}