---
title: speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch
canonical_url: "https://www.modelscope.cn/models/damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch"
md_url: "https://www.modelscope.cn/models/damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch.md"
repository: damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch
chinese_name: "xvector说话人确认-中文-cnceleb-16k-离线-pytorch"
last_updated: 2023-07-25
license: "Apache License 2.0"
pipeline_tag: speaker-verification
tasks:
  - speaker-verification
model_type:
  - sv
library_name:
  - pytorch
frameworks:
  - pytorch
language:
  - cn
domain:
  - audio
downloads: 62311
stars: 28
tags:
  - FunASR
  - ResNet34
  - Alibaba
  - "EMNLP 2022"
---

# speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch

> speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch - damo 在 ModelScope 开源的模型。该模型是使用CN-Celeb 1&2以及AliMeeting数据集预训练得到的说话人嵌入码（speaker embedding）提取模型。可以直接用于通用和会议场景的说话人确认和说话人日志等任务。在CN-Celeb语音测试集上EER为9.00%，在AliMeeting测试集上的EER为1.45%。

damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch 是 ModelScope 魔搭社区上的speaker-verification模型，采用 Apache License 2.0 许可。

- **Repository**: damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch
- **License**: Apache License 2.0
- **Tasks**: speaker-verification
- **Tags**: FunASR, ResNet34, Alibaba, EMNLP 2022
- **Downloads**: 62311
- **Stars**: 28
- **Last updated**: 2023-07-25

Source: https://www.modelscope.cn/models/damo/speech_xvector_sv-zh-cn-cnceleb-16k-spk3465-pytorch

---

# Highlights
说话人确认和声纹提取模型，训练数据集
- 多领域数据 CN-Celeb 1&2
- 会议场景 AliMeeting

支持功能：
- 提取一段语音的说话人嵌入码 speaker embedding
- 说话人确认：判断两段语音是否为同一说话人

## <strong>[ModelScope-FunASR](https://github.com/alibaba-damo-academy/FunASR)</strong>
<strong>[FunASR](https://github.com/alibaba-damo-academy/FunASR)</strong>希望在语音识别方面建立学术研究和工业应用之间的桥梁。通过支持在ModelScope上发布的工业级语音识别模型的训练和微调，研究人员和开发人员可以更方便地进行语音识别模型的研究和生产，并促进语音识别生态系统的发展。

[**最新动态**](https://github.com/alibaba-damo-academy/FunASR#whats-new) 
| [**环境安装**](https://github.com/alibaba-damo-academy/FunASR#installation)
| [**介绍文档**](https://alibaba-damo-academy.github.io/FunASR/en/index.html)
| [**中文教程**](https://github.com/alibaba-damo-academy/FunASR/wiki#funasr%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C)
| [**服务部署**](https://github.com/alibaba-damo-academy/FunASR/tree/main/funasr/runtime)
| [**模型库**](https://github.com/alibaba-damo-academy/FunASR/blob/main/docs/model_zoo/modelscope_models.md)
| [**联系我们**](https://github.com/alibaba-damo-academy/FunASR#contact)


# 项目介绍

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

<p align="center">
<img src="fig/struct.png" alt="Speaker Verification模型结构"  width="1102" />
</p>

# 如何使用模型

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

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

- 使用本模型提取说话人嵌入码（speaker embedding）：
```python
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文件：
```python
spk_embedding = inference_sv_pipline(audio_in='sv_example_enroll.wav')["spk_embedding"]
```
- 以及已经读取到内存中的numpy数组或者pytorch张量（Tensor）
```python
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的一个主要应用是评估两个说话人的相似程度：

```python
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）：
```python
# 两个语音为相同说话人
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开源：<a href="https://github.com/alibaba-damo-academy/FunASR">https://github.com/alibaba-damo-academy/FunASR</a>

### FunASR框架安装

- 安装FunASR和ModelScope，[详见](https://github.com/alibaba-damo-academy/FunASR/wiki)

```sh
pip3 install -U modelscope
git clone https://github.com/alibaba/FunASR.git && cd FunASR
pip3 install -e ./
```

### 基于ModelScope进行推理

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

### 基于ModelScope在CN-Celeb测试集上进行性能评估
接下以CN-Celeb数据集为例，介绍如何使用ModelScope对模型的EER、minDCF等性能指标进行评估，从Openslr上下载完整的CN-Celeb 1&2数据集：<a href="http://openslr.org/82/">http://openslr.org/82/</a>
```sh
# 进入工作目录
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%）。
- 语句的过长、过短或静音过多会对性能产生一定影响
