英文

VoxLingua107 ECAPA-TDNN Spoken Language Identification Model

模型描述

这是一个使用ECAPA-TDNN架构在VoxLingua107数据集上训练的口语语言识别模型,使用了SpeechBrain进行训练。该模型在嵌入层后使用了更多的全连接隐藏层,并使用交叉熵损失进行训练。我们观察到,这样可以提高下游任务中提取的话语嵌入的性能。

系统使用16kHz(单声道)采样的录音进行训练。在调用classify_file时,代码会自动对音频进行归一化(即重新采样+选择单声道)。

该模型可以根据所说语言对语音话语进行分类。它涵盖了107种不同的语言(阿布哈兹语、南非语、阿姆哈拉语、阿拉伯语、阿萨姆语、阿塞拜疆语、巴什基尔语、白俄罗斯语、保加利亚语、孟加拉语、藏语、布列塔尼语、波斯尼亚语、加泰罗尼亚语、宿务语、捷克语、威尔士语、丹麦语、德语、希腊语、英语、世界语、西班牙语、爱沙尼亚语、巴斯克语、波斯语、芬兰语、法罗语、法语、加利西亚语、瓜拉尼语、古吉拉特语、曼岛语、豪萨语、夏威夷语、印地语、克罗地亚语、海地语、匈牙利语、亚美尼亚语、国际辅助语、印度尼西亚语、冰岛语、意大利语、希伯来语、日语、爪哇语、格鲁吉亚语、哈萨克语、中央高棉语、卡纳达语、韩语、拉丁语、卢森堡语、林加拉语、老挝语、立陶宛语、拉脱维亚语、马达加斯加语、毛利语、马其顿语、马拉雅拉姆语、蒙古语、马拉地语、马来语、马耳他语、缅甸语、尼泊尔语、荷兰语、挪威尼诺斯克语、挪威语、奥休语、旁遮普语、波兰语、普什图语、葡萄牙语、罗马尼亚语、俄语、梵语、苏格兰语、信德语、僧伽罗语、斯洛伐克语、斯洛文尼亚语、绍纳语、索马里语、阿尔巴尼亚语、塞尔维亚语、苏丹语、瑞典语、斯瓦希里语、泰米尔语、泰卢固语、塔吉克语、泰语、土库曼语、塔加洛语、土耳其语、鞑靼语、乌克兰语、乌尔都语、乌兹别克语、越南语、瓦拉伊语、意第绪语、约鲁巴语、普通话)。

预期用途和限制

该模型有两种用途:

  • 直接用于口语语言识别
  • 作为话语级特征(嵌入)提取器,用于在自己的数据上创建专用的语言识别模型

该模型是在自动收集的YouTube数据上进行培训的。有关数据集的更多信息,请参见 here

如何使用
import torchaudio
from speechbrain.pretrained import EncoderClassifier
language_id = EncoderClassifier.from_hparams(source="speechbrain/lang-id-voxlingua107-ecapa", savedir="tmp")
# Download Thai language sample from Omniglot and cvert to suitable form
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'])
# The scores in the prediction[0] tensor can be interpreted as log-likelihoods that
# the given utterance belongs to the given language (i.e., the larger the better)
# The linear-scale likelihood can be retrieved using the following:
print(prediction[1].exp())
#  tensor([0.9850])
# The identified language ISO code is given in prediction[3]
print(prediction[3])
#  ['th: Thai']
  
# Alternatively, use the utterance embedding extractor:
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个语音段,由至少两位志愿者验证确实包含了给定的语言。

训练过程

请参见 SpeechBrain recipe

评估结果

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