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上的论文和 论文解读。
如何使用模型
在线快速体验
在页面右侧,可以在“在线体验”栏内看到我们预先准备好的示例音频,点击播放按钮可以试听,点击“执行测试”按钮,会在下方“测试结果”栏中显示两个语音说话人之间的相似程度(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, batchsize 64, 1 gpu(Tesla V100), accgrad 1, 300000 steps, clipgradientnorm 3.0, weightl2regularizer 0.01
- Loss info: additive angular margin softmax, featurescalingfactor=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%)。
- 语句的过长、过短或静音过多会对性能产生一定影响
评论