模型简介
模型特点
模型能力
使用案例
语言:
- 多语言
- 阿布哈兹语
- 南非荷兰语
- 阿姆哈拉语
- 阿拉伯语
- 阿萨姆语
- 阿塞拜疆语
- 巴什基尔语
- 白俄罗斯语
- 保加利亚语
- 比哈尔语
- 藏语
- 布列塔尼语
- 波斯尼亚语
- 加泰罗尼亚语
- 宿务语
- 捷克语
- 威尔士语
- 丹麦语
- 德语
- 希腊语
- 英语
- 世界语
- 西班牙语
- 爱沙尼亚语
- 巴斯克语
- 波斯语
- 芬兰语
- 法罗语
- 法语
- 加利西亚语
- 瓜拉尼语
- 古吉拉特语
- 马恩岛语
- 豪萨语
- 夏威夷语
- 印地语
- 克罗地亚语
- 海地克里奥尔语
- 匈牙利语
- 亚美尼亚语
- 国际语
- 印尼语
- 冰岛语
- 意大利语
- 希伯来语
- 日语
- 爪哇语
- 格鲁吉亚语
- 哈萨克语
- 高棉语
- 卡纳达语
- 韩语
- 拉丁语
- 卢森堡语
- 林加拉语
- 老挝语
- 立陶宛语
- 拉脱维亚语
- 马尔加什语
- 毛利语
- 马其顿语
- 马拉雅拉姆语
- 蒙古语
- 马拉地语
- 马来语
- 马耳他语
- 缅甸语
- 尼泊尔语
- 荷兰语
- 新挪威语
- 挪威语
- 奥克语
- 旁遮普语
- 波兰语
- 普什图语
- 葡萄牙语
- 罗马尼亚语
- 俄语
- 梵语
- 苏格兰语
- 信德语
- 僧伽罗语
- 斯洛伐克语
- 斯洛文尼亚语
- 绍纳语
- 索马里语
- 阿尔巴尼亚语
- 塞尔维亚语
- 巽他语
- 瑞典语
- 斯瓦希里语
- 泰米尔语
- 泰卢固语
- 塔吉克语
- 泰语
- 土库曼语
- 他加禄语
- 土耳其语
- 鞑靼语
- 乌克兰语
- 乌尔都语
- 乌兹别克语
- 越南语
- 瓦瑞语
- 意第绪语
- 约鲁巴语
- 中文
缩略图: 标签:
- 音频分类
- 语音大脑
- 嵌入
- 语言
- 识别
- PyTorch
- ECAPA-TDNN
- TDNN
- VoxLingua107 许可证: "apache-2.0" 数据集:
- VoxLingua107 指标:
- 准确率 小部件:
- 示例标题: 英语样本 src: https://cdn-media.huggingface.co/speech_samples/LibriSpeech_61-70968-0000.flac
VoxLingua107 ECAPA-TDNN 口语识别模型
模型描述
这是一个基于VoxLingua107数据集使用SpeechBrain训练的口语识别模型。该模型采用了ECAPA-TDNN架构,该架构之前用于说话人识别。然而,它在嵌入层之后使用了更多的全连接隐藏层,并使用交叉熵损失进行训练。我们观察到这提高了提取的语音嵌入在下游任务中的性能。
该系统训练时使用16kHz采样的录音(单声道)。在调用classify_file时,如果需要,代码会自动对音频进行归一化处理(即重采样+单声道选择)。
该模型可以根据所说的语言对语音片段进行分类。它涵盖107种不同的语言(阿布哈兹语、南非荷兰语、阿姆哈拉语、阿拉伯语、阿萨姆语、阿塞拜疆语、巴什基尔语、白俄罗斯语、保加利亚语、比哈尔语、藏语、布列塔尼语、波斯尼亚语、加泰罗尼亚语、宿务语、捷克语、威尔士语、丹麦语、德语、希腊语、英语、世界语、西班牙语、爱沙尼亚语、巴斯克语、波斯语、芬兰语、法罗语、法语、加利西亚语、瓜拉尼语、古吉拉特语、马恩岛语、豪萨语、夏威夷语、印地语、克罗地亚语、海地克里奥尔语、匈牙利语、亚美尼亚语、国际语、印尼语、冰岛语、意大利语、希伯来语、日语、爪哇语、格鲁吉亚语、哈萨克语、高棉语、卡纳达语、韩语、拉丁语、卢森堡语、林加拉语、老挝语、立陶宛语、拉脱维亚语、马尔加什语、毛利语、马其顿语、马拉雅拉姆语、蒙古语、马拉地语、马来语、马耳他语、缅甸语、尼泊尔语、荷兰语、新挪威语、挪威语、奥克语、旁遮普语、波兰语、普什图语、葡萄牙语、罗马尼亚语、俄语、梵语、苏格兰语、信德语、僧伽罗语、斯洛伐克语、斯洛文尼亚语、绍纳语、索马里语、阿尔巴尼亚语、塞尔维亚语、巽他语、瑞典语、斯瓦希里语、泰米尔语、泰卢固语、塔吉克语、泰语、土库曼语、他加禄语、土耳其语、鞑靼语、乌克兰语、乌尔都语、乌兹别克语、越南语、瓦瑞语、意第绪语、约鲁巴语、中文)。
预期用途与限制
该模型有两种用途:
- 直接用于口语识别
- 作为语音片段级别的特征(嵌入)提取器,用于在自己的数据上创建专用的语言识别模型
该模型是在自动收集的YouTube数据上训练的。有关数据集的更多信息,请参见此处。
使用方法
import torchaudio
from speechbrain.pretrained import EncoderClassifier
language_id = EncoderClassifier.from_hparams(source="speechbrain/lang-id-voxlingua107-ecapa", savedir="tmp")
# 从Omniglot下载泰语样本并转换为合适的形式
signal = language_id.load_audio("https://omniglot.com/soundfiles/udhr/udhr_th.mp3")
prediction = language_id.classify_batch(signal)
print(prediction)
# (tensor([[-2.8646e+01, -3.0346e+01, -2.0748e+01, -2.9562e+01, -2.2187e+01,
# -3.2668e+01, -3.6677e+01, -3.3573e+01, -3.2545e+01, -2.4365e+01,
# -2.4688e+01, -3.1171e+01, -2.7743e+01, -2.9918e+01, -2.4770e+01,
# -3.2250e+01, -2.4727e+01, -2.6087e+01, -2.1870e+01, -3.2821e+01,
# -2.2128e+01, -2.2822e+01, -3.0888e+01, -3.3564e+01, -2.9906e+01,
# -2.2392e+01, -2.5573e+01, -2.6443e+01, -3.2429e+01, -3.2652e+01,
# -3.0030e+01, -2.4607e+01, -2.2967e+01, -2.4396e+01, -2.8578e+01,
# -2.5153e+01, -2.8475e+01, -2.6409e+01, -2.5230e+01, -2.7957e+01,
# -2.6298e+01, -2.3609e+01, -2.5863e+01, -2.8225e+01, -2.7225e+01,
# -3.0486e+01, -2.1185e+01, -2.7938e+01, -3.3155e+01, -1.9076e+01,
# -2.9181e+01, -2.2160e+01, -1.8352e+01, -2.5866e+01, -3.3636e+01,
# -4.2016e+00, -3.1581e+01, -3.1894e+01, -2.7834e+01, -2.5429e+01,
# -3.2235e+01, -3.2280e+01, -2.8786e+01, -2.3366e+01, -2.6047e+01,
# -2.2075e+01, -2.3770e+01, -2.2518e+01, -2.8101e+01, -2.5745e+01,
# -2.6441e+01, -2.9822e+01, -2.7109e+01, -3.0225e+01, -2.4566e+01,
# -2.9268e+01, -2.7651e+01, -3.4221e+01, -2.9026e+01, -2.6009e+01,
# -3.1968e+01, -3.1747e+01, -2.8156e+01, -2.9025e+01, -2.7756e+01,
# -2.8052e+01, -2.9341e+01, -2.8806e+01, -2.1636e+01, -2.3992e+01,
# -2.3794e+01, -3.3743e+01, -2.8332e+01, -2.7465e+01, -1.5085e-02,
# -2.9094e+01, -2.1444e+01, -2.9780e+01, -3.6046e+01, -3.7401e+01,
# -3.0888e+01, -3.3172e+01, -1.8931e+01, -2.2679e+01, -3.0225e+01,
# -2.4995e+01, -2.1028e+01]]), tensor([-0.0151]), tensor([94]), ['th'])
# prediction[0]张量中的分数可以解释为给定语音片段属于给定语言的对数似然(即越大越好)
# 可以通过以下方式获取线性尺度的似然:
print(prediction[1].exp())
# tensor([0.9850])
# 识别的语言ISO代码在prediction[3]中给出
print(prediction[3])
# ['th: 泰语']
# 或者,使用语音片段嵌入提取器:
emb = language_id.encode_batch(signal)
print(emb.shape)
# torch.Size([1, 1, 256])
要在GPU上执行推理,在调用from_hparams
方法时添加run_opts={"device":"cuda"}
。
该系统训练时使用16kHz采样的录音(单声道)。在调用classify_file时,如果需要,代码会自动对音频进行归一化处理(即重采样+单声道选择)。如果使用encode_batch和classify_batch,请确保输入张量符合预期的采样率。
限制与偏差
由于该模型是在VoxLingua107上训练的,它有许多限制和偏差,其中一些是:
- 可能对小语种的准确性相当有限
- 可能在女性语音上的表现不如男性语音(因为YouTube数据中男性语音更多)
- 根据主观实验,它对带有外国口音的语音效果不佳
- 可能对儿童语音和有语音障碍的人的语音效果不佳
训练数据
该模型在VoxLingua107上训练。
VoxLingua107是一个用于训练口语识别模型的语音数据集。该数据集由从YouTube视频中自动提取的短语音片段组成,并根据视频标题和描述的语言进行标记,经过一些后处理步骤以过滤掉误报。
VoxLingua107包含107种语言的数据。训练集中的总语音时长为6628小时。每种语言的平均数据量为62小时。然而,每种语言的实际数据量差异很大。还有一个单独的开发集,包含来自33种语言的1609个语音片段,由至少两名志愿者验证确实包含给定的语言。
训练过程
评估结果
错误率:在VoxLingua107开发数据集上为6.7%
引用SpeechBrain
@misc{speechbrain,
title={{SpeechBrain}: A General-Purpose Speech Toolkit},
author={Mirco Ravanelli and Titouan Parcollet and Peter Plantinga and Aku Rouhe and Samuele Cornell and Loren Lugosch and Cem Subakan and Nauman Dawalatabad and Abdelwahab Heba and Jianyuan Zhong and Ju-Chieh Chou and Sung-Lin Yeh and Szu-Wei Fu and Chien-Feng Liao and Elena Rastorgueva and François Grondin and William Aris and Hwidong Na and Yan Gao and Renato De Mori and Yoshua Bengio},
year={2021},
eprint={2106.04624},
archivePrefix={arXiv},
primaryClass={eess.AS},
note={arXiv:2106.04624}
}
引用VoxLingua107
@inproceedings{valk2021slt,
title={{VoxLingua107}: a Dataset for Spoken Language Recognition},
author={J{\"o}rgen Valk and Tanel Alum{\"a}e},
booktitle={Proc. IEEE SLT Workshop},
year={2021},
}
关于SpeechBrain
SpeechBrain是一个开源的一体化语音工具包。它设计简单、极其灵活且用户友好。在各个领域都获得了竞争性或最先进的性能。 网站:https://speechbrain.github.io/ GitHub:https://github.com/speechbrain/speechbrain









