SpeechT5: Unified-Modal Encoder-Decoder Pre-training for Spoken Language Processing
code
本文提出了一种基于encoder-decoder结构的speech/text pre-training的方法,SpeechT5。SpeechT5包括一个共享的encoder-decoder结构,以及六种模态相关的prenet/postnet。为了align text和speech的表示,本文提出了一个交叉模态向量量化(cross-modal vector quantization method)的方法。大量的评测任务说明了SpeechT5的优越性,如语音转换,自动语音识别,语音合成,说话人识别。
pre-trained models在很多人任务上能够带来显著的性能提升,如自然语言处理,图像识别,语音处理等任务。通过自监督预训练得到通用的表示,再用于下游任务似乎成为了新的范式。“Text-To-Text Transfer Transformer”(T5)利用了一个通用的text-to-text架构实现了多个NLP任务的最好效果,包括机器翻译,问答,情感分类等。T5的基本想法是将每个NLP任务描述为text-to-text问题,然后应用迁移学习,提升下游任务的性能。
在同一时期,自监督的语音表示学习也获得了很好的进展,如wav2vec2, APC, Hubert。另一类任务试图应用语音和语言的联合与训练提升口语的理解。然而大部分的工作与BERT相似,只有encoder结构,以及特定下游任务的模块。如何设计一个encoder-decoder结构的模型从而利用未标注的speech和text预训练帮助提取语音/文本的表示还没有人探索过。受启发于T5,语言处理任务可以刻画成speech/text to speech/text的任务,因此可以用相同的pre-trained模型支持很丰富的任务。如下图所示:
为了将文本和音频信息映射到统一的语义空间,SpeechT5将text和speech表示映射到一个共享的量化向量空间,随机地混合量化的隐式表达,使得显式地使得量化器学到交叉模态的信息。在不同的下游任务上得到了state-of-the-art效果。贡献:
SpeechT5包含一个共享的encoder-decoder模块,和6个特定模态的pre/postnet,把不同的信号映射到一个统一的空间,共享的encoder-decoder建模了sequence-to-sequence的转换。
语音作为输入时,输入为80-dim的mel,作为输出时,直接输出是mel,外接一个声码器,得到音频。
文本应用unigram语言模型split成tokens序列。
与transformer的原始paper结构一致,在self-attention应用了relative position embedding。
speech-encoder pre-net与speechdecoder pre-net有些不同。speech-encoder pre-net应用了两层卷积,下采样。speech-decoder pre-net则是3层全连接。为了支持多说话人的TTS和VC,说话人向量concat到speech-decoder pre-net。speech-decoder post network应用两层线性层预测log-mel 和stop token,接着5层一维卷积学习log-mel的卷积。
text encoder pre-net和decoder pre/post networks共享参数,pre-net将token index映射到embedding vector,post-net将隐状态映射到token分布的后验概率。
应用大量的未标注的音频和文本语料可以先单模态训练,然后应用文本和音频的成对的数据进行联合训练。
语音学习的目标是利用无标记的语音数据来学习一般的语音表示,用于语音理解和生成任务。因此SpeechT5训练encoder-decoder结构应用两个task:bidirectional masked prediction and sequence-to-sequence generation。
语言模块旨在提供上下文理解和生成。对于没有标注的文本,SpeechT5用masked span给文本加噪声,尝试恢复mask的文本以及原始的文本。两种style: BART-style,尝试恢复原始的文本,T5-style,尝试恢复mask掉的文本。
L m l e t = ∑ t = 1 m log p f ( y t ∣ y 1 : t − 1 , X ) \mathcal{L}_{m l e}^t=\sum_{t=1}^m \log p_f\left(y_t \mid y_{1: t-1}, X\right) Lmlet=∑t=1mlogpf(yt∣y1:t−1,X)
上述方法都只用了单模态的数据,但是一些任务是跨模态的,如ASR/TTS。因此预训练中学得text和音频的对齐,将对下游任务有利。本文用量化的vector,即codebook作为speech representations 与 text representations的桥梁。
L d = 1 K ∑ k = 1 K p k log p k \mathcal{L}_d=\frac{1}{K} \sum_{k=1}^K p_k \log p_k Ld=K1∑k=1Kpklogpk
L = L m l m s + L 1 s + L bce s + L m l e t + L d \mathcal{L}=\mathcal{L}_{m l m}^s+\mathcal{L}_1^s+\mathcal{L}_{\text {bce }}^s+\mathcal{L}_{m l e}^t+\mathcal{L}_d L=Lmlms+L1s+Lbce s+Lmlet+Ld
用下游任务的loss fine-tuning。
无监督预训练用librispeech数据集。下游任务:ASR->Librispeech->WER, TTS->LibriTTS->WER, VC->CMU Arctic->MCD+WER, SID->VoxCeleb1->Accuracy
具体见paper。
1.49% WER and 3.65 MOS; relative reduction of 13.37% in WER and an gain of 0.2 in MOS
achieves the state-of-the-art performance of 90.97% accuracy