您好,欢迎访问一九零五行业门户网

找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了

wav2vec 2.0 [1],hubert [2] 和 wavlm [3] 等语音预训练模型,通过在多达上万小时的无标注语音数据(如 libri-light )上的自监督学习,显著提升了自动语音识别(automatic speech recognition, asr),语音合成(text-to-speech, tts)和语音转换(voice conversation,vc)等语音下游任务的性能。然而这些模型都没有公开的中文版本,不便于应用在中文语音研究场景。 
wenetspeech [4] 是由西工大音频、语音和语言处理研究组 (aslp@npu)、出门问问、希尔贝壳联合发布的 1 万多小时多领域语音数据集。为了弥补中文语音预训练模型的空缺,我们开源了基于 wenetspeech 1 万小时数据训练的中文版 wav2vec 2.0 和 hubert 模型。
为了验证预训练模型的性能,我们在 asr 任务进行了验证。实验结果表明,在 100 小时有监督数据 asr 任务上,预训练模型学到的语音表征相对于传统声学 fbank 特征有显著的性能提升,甚至仅用 100 小时有监督数据能够得到和 1000 小时有监督数据可比的结果。
模型链接:https://github.com/tencentgamemate/chinese_speech_pretrain
模型介绍wav2vec 2.0 模型
图 1: wav2vec 2.0 模型结构 (baevski et al., 2020)
wav2vec 2.0 [1] 是 meta 在 2020 年发表的无监督语音预训练模型。它的核心思想是通过向量量化(vector quantization,vq)构造自建监督训练目标,对输入做大量掩码后利用对比学习损失函数进行训练。模型结构如上图 1,基于卷积网络(convoluational neural network,cnn)的特征提取器将原始音频编码为帧特征序列,通过 vq 模块把每帧特征转变为离散特征 q,并作为自监督目标。同时,帧特征序列做掩码操作后进入 transformer [5] 模型得到上下文表示 c。最后通过对比学习损失函数,拉近掩码位置的上下文表示与对应的离散特征 q 的距离,即正样本对。原论文中,wav2vec 2.0 base 模型采用 12 层的 transformer 结构,用 1000 小时的 librispeech 数据进行训练,large 模型则采用 24 层 transformer 结构,用 6 万小时的 libri-light 数据训练。训练时间方面,base 模型使用 64 块 v100 显卡训练 1.6 天,large 使用 128 块 v100 显卡训练 5 天。在下游 asr 评测中,即使只用 10 分钟的有监督数据,系统仍可得到 4.8 的词错误率(word error rate, wer)结果。
hubert 模型
图 2: hubert 模型结构 (hsu et al., 2021)
hubert [2] 是 meta 在 2021 年发表的模型,模型结构类似 wav2vec 2.0,不同的是训练方法。wav2vec 2.0 是在训练时将语音特征离散化作为自监督目标,而 hubert 则通过在 mfcc 特征或 hubert 特征上做 k-means 聚类,得到训练目标。hubert 模型采用迭代训练的方式,base 模型第一次迭代在 mfcc 特征上做聚类,第二次迭代在第一次迭代得到的 hubert 模型的中间层特征上做聚类,large 和 xlarge 模型则用 base 模型的第二次迭代模型提取特征做聚类。从原始论文实验结果来看,hubert 模型效果要优于 wav2vec 2.0,特别是下游任务有监督训练数据极少的情况,如 1 小时、10 分钟。
中文预训练模型实验配置我们使用 wenetspeech [4] train_l 集的 1 万小时中文数据作为无监督预训练数据。数据主要来源于 youtube 和 podcast,覆盖了各种类型录制场景、背景噪声、说话方式等,其领域主要包括有声书、解说、纪录片、电视剧、访谈、新闻、朗读、演讲、综艺和其他等 10 大场景。我们基于 fairseq 工具包 [6] 分别训练了 wav2vec 2.0 和 hubert 模型,遵循 [1,2] 的模型配置,每个预训练模型模型包括 base 和 large 两种大小。对于 base 模型,我们使用 8 张 a100 显卡,梯度累计为 8,模拟 64 张显卡进行训练。对于 large 模型,我们使用 16 张 a100 显卡,梯度累计为 8,模拟 128 张显卡进行训练。
下游语音识别任务验证为了验证预训练模型在下游 asr 任务的效果,我们遵循 espnet [7,8,9] 工具包中的 conformer [10] 模型实验配置,即将预训练模型作为特征提取器,对于输入语音提取预训练模型各隐层表征进行加权求和,得到的语音表征将替换传统 fbank 特征作为 conformer asr 模型的输入。
aishell 数据集我们使用 aishell 178 小时训练集作为有监督数据进行训练,分别对比了使用 fbank 特征、wav2vec 2.0 base/large 模型特征和 hubert base/large 模型特征的字错误率 (character error rate, cer) 结果。同时,我们额外对比了使用 wenetspeech train_l 集 1 万小时中文数据进行训练时,其在 aishell 测试集上的效果。训练数据使用了变速(0.9、1.0、1.1 倍)和 specaugment 数据增广技术,解码方式为 beam search,使用了基于 transformer 的语言模型进行 rescoring。
表 1:不同模型在 aishell 测试集上的字错误率(cer%)结果
根据表 1 结果可以看到,通过结合上万小时无监督数据训练的预训练模型,下游 asr 任务效果均有显著提升。尤其是使用 hubert large 模型时,在 test 集上得到约 30% 的 cer 相对提升,实现了目前在 178h 有监督训练数据下业界最好结果。
wenetspeech 数据集我们使用 wenetspeech train_s 集 100 小时中文数据作为有监督数据进行训练,分别对比了使用 fbank 特征、wav2vec 2.0 base/large 模型特征和 hubert base/large 模型特征的字错误率 (character error rate, cer) 结果。同时,我们额外对比了使用 wenetspeech train_m 集 1000 小时和 train_l 集 1 万小时中文数据 fbank 特征训练的模型结果。训练数据没有使用变速或 specaugment 数据增广技术,解码方式为 beam search,没有使用语言模型 rescoring。
表 2:不同模型在 wenetspeech 测试集上的字错误率(cer%)结果
根据表 2 结果可以看到,通过结合上万小时无监督数据训练的预训练模型,下游 asr 结果得到了巨大提升。尤其当使用 hubert large 作为语音表征提取器时,使用 100 小时有监督数据训练的 asr 模型要比 1000 小时基于 fbank 特征训练的模型效果要好,甚至接近 1 万小时数据训练的模型。
更多语音下游任务实验结果请关注 github 链接(https://github.com/tencentgamemate/chinese_speech_pretrain)。欢迎大家使用我们提供的中文语音预训练模型开展研究工作,一起探索语音预训练模型在中文和相关众多场景下的应用。
以上就是找不到中文语音预训练模型?中文版 wav2vec 2.0和hubert来了的详细内容。
其它类似信息

推荐信息