Highlights
说话人确认和声纹提取模型,训练数据集
- 英文数据集 Switchboard, Callhome
支持功能:
- 提取一段语音的说话人嵌入码 speaker embedding
- 说话人确认:判断两段语音是否为同一说话人
ModelScope-FunASR
FunASR希望在语音识别方面建立学术研究和工业应用之间的桥梁。通过支持在ModelScope上发布的工业级语音识别模型的训练和微调,研究人员和开发人员可以更方便地进行语音识别模型的研究和生产,并促进语音识别生态系统的发展。
最新动态 | 环境安装 | 介绍文档 | 中文教程 | 服务部署 | 模型库 | 联系我们
项目介绍
ResNet34是说话人确认(Speaker Verification)中常用的模型结构。 模型包括帧级说话人特征提取主干网络ResNet34、全局统计池化global statistic pooling以及多个全连接层fully-connected layer。 该模型是达摩院语音团队在常用开源数据集 Switchboard 和多轮对话数据集 Callhome 上训练得到的, 可以用于通用任务的说话人嵌入码(speaker embedding)提取,或进行说话人确认任务。 该模型还可以用于说话人日志(speaker diarization)任务,并取得了良好的识别效果。 具体可以参考我们发表于ICASSP 2023上的论文和 论文解读。
如何使用模型
在线快速体验
在页面右侧,可以在“在线体验”栏内看到我们预先准备好的示例音频,点击播放按钮可以试听,点击“执行测试”按钮,会在下方“测试结果”栏中显示两个语音说话人之间的相似程度(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-en-us-callhome-8k-spk6135-pytorch'
)
# 对于单个url我们使用"spk_embedding"作为key
spk_embedding = inference_sv_pipline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/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_data/sv_example_enroll.wav')["spk_embedding"]
same = inference_sv_pipline(audio_in='https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/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_data/sv_example_enroll.wav','https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/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_data/sv_example_enroll.wav','https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_data/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-en-us-callhome-8k-spk6135-pytorch
python infer.py
- 或测试说话人确认功能:
python infer_sv.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
使用方式以及适用范围
运行范围
- 支持Linux-x86_64,Mac和Windows运行。
使用方式
- 直接推理:可以提取语音的说话人 embedding,或者判断两句话的说话人是否相同。
- 微调:正在开发中。
使用范围与目标场景
- 适合于学术研究,在Callhome数据集上进行说话人日志、识别等任务。
模型局限性以及可能的偏差
- 特征提取流程和工具差异,会对打分的数值带来一定的差异(<1%)。
- 语句的过长、过短或静音过多会对性能产生一定影响
评论