xvector说话人确认-中文-cnceleb-16k-离线-pytorch
该模型是使用CN-Celeb 1&2以及AliMeeting数据集预训练得到的说话人嵌入码(speaker embedding)提取模型。可以直接用于通用和会议场景的说话人确认和说话人日志等任务。在CN-Celeb语音测试集上EER为9.00%,在AliMeeting测试集上的EER为1.45%。
  • 模型资讯
  • 模型资料

Highlights

说话人确认和声纹提取模型,训练数据集

  • 多领域数据 CN-Celeb 1&2
  • 会议场景 AliMeeting

支持功能:

  • 提取一段语音的说话人嵌入码 speaker embedding
  • 说话人确认:判断两段语音是否为同一说话人

ModelScope-FunASR

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

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

项目介绍

ResNet34是说话人确认(Speaker Verification)中常用的模型结构。
模型包括帧级说话人特征提取主干网络ResNet34、全局统计池化global statistic pooling以及多个全连接层fully-connected layer。
该模型是达摩院语音团队在常用开源数据集CN-Celeb 1&2和会议场景数据集AliMeeting上预训练得到的,
可以用于通用任务的说话人嵌入码(speaker embedding)提取,或进行说话人确认任务。
该模型还可以用于说话人日志(speaker diarization)任务,并取得了良好的识别效果。
具体可以参考我们发表于EMNLP 2022上的论文
论文解读

Speaker Verification模型结构

如何使用模型

在线快速体验

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

在Notebook中推理

对于灵活调用有需求的开发者,我们推荐您使用Notebook进行处理。首先登录ModelScope账号,点击模型页面右上角的“在Notebook中打开”按钮出现对话框,首次使用会提示您关联阿里云账号,按提示操作即可。关联账号后可进入选择启动实例界面,选择计算资源,建立实例,待实例创建完成后进入开发环境,输入api调用实例。

  • 使用本模型提取说话人嵌入码(speaker embedding):
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import numpy as np

inference_sv_pipline = pipeline(
    task=Tasks.speaker_verification,
    model='damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch'
)

# 对于单个url我们使用"spk_embedding"作为key
spk_embedding = inference_sv_pipline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav')["spk_embedding"]
  • 除了url表示的网络wav文件,还可使用本地磁盘上的wav文件:
spk_embedding = inference_sv_pipline(audio_in='sv_example_enroll.wav')["spk_embedding"]
  • 以及已经读取到内存中的numpy数组或者pytorch张量(Tensor)
import soundfile
wav = soundfile.read('sv_example_enroll.wav', dtype="int16")[0]
# 对于内存中的数组或者张量我们使用"spk_embedding"作为key
spk_embedding = inference_sv_pipline(audio_in=wav)["spk_embedding"]
  • speaker embedding的一个主要应用是评估两个说话人的相似程度:
enroll = inference_sv_pipline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav')["spk_embedding"]

same = inference_sv_pipline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_same.wav')["spk_embedding"]

import numpy as np
# 对相同的说话人计算余弦相似度
sv_threshold=0.9465
same_cos=np.sum(enroll*same)/(np.linalg.norm(enroll)*np.linalg.norm(same))
same_cos=max(same_cos - sv_threshold, 0.0) / (1.0 - sv_threshold) * 100.0
print(same_cos)
  • 为了方便使用,本模型也支持直接进行说话人确认(speaker verification):
# 两个语音为相同说话人
rec_result = inference_sv_pipline(audio_in=('https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav','https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_same.wav'))
print(rec_result["scores"][0])

# 两个语音为不同说话人
rec_result = inference_sv_pipline(audio_in=('https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_enroll.wav','https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/sv_example_different.wav'))

print(rec_result["scores"][0])

在本地机器中推理

如果您有本地推理或定制模型的需求,可以前往下载FunASR语音处理框架,不仅涵盖语音识别、端点检测和说话人确认等多种模型,还支持ModelScope开源模型的推理,使研究人员和开发者可以更加便捷的进行模型研究和生产,目前已在github开源:https://github.com/alibaba-damo-academy/FunASR

FunASR框架安装

  • 安装FunASR和ModelScope,详见
pip3 install -U modelscope
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./

基于ModelScope进行推理

  • 在上面的安装完成后,就可以在使用ModelScope进行推理了,可运行如下命令提取speaker embedding:
cd egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch
python infer.py 
  • 或测试说话人确认功能:
python infer_sv.py

基于ModelScope在CN-Celeb测试集上进行性能评估

接下以CN-Celeb数据集为例,介绍如何使用ModelScope对模型的EER、minDCF等性能指标进行评估,从Openslr上下载完整的CN-Celeb 1&2数据集:http://openslr.org/82/

# 进入工作目录
cd egs_modelscope/speaker_verification/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch

# 获取评估用的数据
wget https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/cnceleb-eval.tar.gz
tar zxf cnceleb-eval.tar.gz

# 进行评估
python ./eval_eer.py

基于ModelScope进行模型微调

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

Benchmark

训练配置

  • Feature info: using 80 dims fbank, no cmvn, speed perturb(0.9, 1.0, 1.1)
  • Train info: lr 1e-4, batch_size 64, 1 gpu(Tesla V100), acc_grad 1, 300000 steps, clip_gradient_norm 3.0, weight_l2_regularizer 0.01
  • Loss info: additive angular margin softmax, feature_scaling_factor=8, margin 0.25
  • Model info: ResNet34, global statistics pooling, Dense
  • Train config: sv.yaml
  • Model size: 5.60 M parameters

实验结果 (EER & minDCF)

  • Test set: Alimeeting-test, CN-Celeb-eval-speech
testset EER(%) minDCF Threshold
Alimeeting-test 1.45 0.0849 0.9666
CN-Celeb-eval-speech 9.00 0.2936 0.9465

使用方式以及适用范围

运行范围

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

使用方式

  • 直接推理:可以提取语音的说话人 embedding,或者判断两句话的说话人是否相同。
  • 微调:正在开发中。

使用范围与目标场景

  • 适合于学术研究,在CN-Celeb、AliMeeting等数据集上进行说话人日志、识别等任务。

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

  • 特征提取流程和工具差异,会对EER的数值带来一定的差异(<0.1%)。
  • 语句的过长、过短或静音过多会对性能产生一定影响