文章目录
abstract
在少量无监督数据,做语音合成。
intro
对于特殊语种的TTS,需要低资源合成。经常需要半监督或者无监督的方式训练。
- 半监督:使用少量的标签数据初始化模型参数,然后使用back-translation利用无标签的数据。仍然需要录制&标注专业的TTS数据。
- 无监督:之前使用ASR提供speech数据的伪标签,然后训练。但是会受限于ASR模型的性能,而且对于没有字典或者G2P工具的小语种,没办法做。
- 小语种数据是从各种特定国家网站上爬取的,所以可以用一个其他语种的大量监督数据做一个前期工作。但是要说明的是:监督数据的语种和目标小语种应该共享同样的声韵母单元,比如法语和印度尼西亚语,都是拉丁语系(字母表一样)。
存在的问题 | 解决方案 |
---|---|
低质量多说话人数据 | 多语种VC模型with flow-based enhanced prior,将多说话人的数据转化为一个说话人&增强 |
Back-translation stability:半监督的方法用到无标注数据,性能有限且很难收敛 | curriculum learning, length augmentation and auxiliary supervised loss |
鲁邦性:自回归模型对齐的问题 | 非自回归模型,ASR模型中的对齐引入back-translation过程 |
method
architecture
stage1 :voice conversion:语音合成的难点,在于speech和text之间建立跨模态的对齐。如果能让这两个模态之间的gap小一些,小数据的TTS就成为可能。对于同样的文本,录音的噪音,说话人的音色、韵律都会不一样,这些在常规TTS中是情感/风格建模,但是对于小数据TTS都是干扰,要做的实际是尽量消除这些干扰。采用语音转换的方法,
S
r
i
c
h
S_rich
Srich(大规模监督语种数据)和
S
l
o
w
S_low
Slow(少量无监督目标语种数据)都用于训练,
S
r
e
f
S_ref
Sref作为参考音色指导,所以变声模型的输出会将输入语音中的变量都进行规整。
stage 2 :Supervised warm-up training:使用监督数据预训练一个ASR,TTS的模型,给模型一个好的初始化;
Stage 3:Unsupervised back-translation training:音频序列 s s s输入ASR,得到文本序列 t p s e u d o t_{pseudo} tpseudo,然后用 ( s , t p s e u d o ) (s, t_{pseudo}) (s,tpseudo)训练TTS模型,N step=20k以后,再用 s p s e u d o , t s_{pseudo},t spseudo,t训练ASR模型,如此往复。实验表明两个模块的性能提升如上图。
voice conversion model
- 对VC模型的要求:(1)跨语言变声的能力,基于rich data训练,然后输入low data进行变声;(2)生成高质量的结果,因为VC生成的结果会被用于TTS。(3)VC模型对噪声鲁棒,因为输入的low data可能是带噪的。
- 对此,模型在设计中针对性的采取以下措施:
- 支持跨语言的能力:使用Multilingual HuBERT,提取帧级别自监督学习的离散内容表征,在VC模型的decoder加language id,指示模型去关注一些不同语言的发音细节区别。
- Variational encoder with flow-based enhanced prior:同PortaSpeech以及VITS的方法一样,encoder建模后验概率 D q D_q Dq,学习到一些时间尺度细微的区别,使用normalizing flow,对 D q D_q Dq的分布进行约束。与encoder表征结果求KL距离,基本是在高斯空间约束,限制了分布的多样性,同时也给decoder更多的先验知识。此外,也能给随机采样的变量时间相关性。
- Information bottleneck:对HuBERT的token通过linear进行约束,以保证尽可能少的有说话人的身份信息泄漏。dimension过大信息泄漏,太小会引入发音错误。
λ 1 = λ 2 = λ 3 = 1 \lambda_1=\lambda_2=\lambda_3=1 λ1=λ2=λ3=1
MAE-mel loss
HuBERT
- Multilingual HuBERT是基于英语、法语、西班牙语训练的。(VoxPopuli dataset的子集,本身有23种语言),共计13.5k 小时数据。
- 从HuBERT的第三个iteration模型的第11层提取frame-level representation ,使用预训练的K-means模型获得离散的表征 H i n g H_{ing} Hing
- fair开源的模型
Posterior Encoder
- arch:conv1d(stride=4)+LN+non casual wavenet (k=8/192/5)
- 预测均值方差,重采样得到z,dim=32
Volume-Preserving (VP) Normalizing Flow
-
θ \theta θ是normalize flow的参数
-
将简单的高斯分布通过一系列可逆变换转换成复杂的分布,然后将这个复杂的分布作为decoder输入的先验,
TTS and ASR models
- TTS模型设计思路:主要参照了PortaSpeech的做法,非自回归,而且将对齐的任务交给上游ASR完成。
- TTS模型细节:decoder输入端有语言id的指导。postnet的模块删除,加入multi-length GAN的模块,为了简便,text-encoder使用的和fastspeech一样,没有用mix-linguistic encoder。
- ASR模型设计思路:基于LSTM-based encoder and decoder,使用location sensitive attention做对齐,然后将attention矩阵通过维特比解码得到。该ASR模型是对所有语言通用的,更适用于新的目标语种加入训练。
- ASR模型细节:使用tacotron2的模型作为ASR训练,输入语音,decoder输出端是多分类问题,预测character seq。训练一个Transformer-based语言模型+beam search,以最大化 l o g p A S R ( X ∣ S ) + 0.2 ∗ l o g p L M ( X ) log p_{ASR}(X|S)+0.2*log p_{LM}(X) logpASR(X∣S)+0.2∗logpLM(X),其中 S S S是输入语音, X X X是ASR识别结果,beam search size=5
tricks in back translation
- Curriculum learning:
- (1)首先用
(
S
r
i
c
h
,
t
r
i
c
h
)
(S_{rich},t_{rich})
(Srich,trich)训练ASR模型,在基于
S
l
o
w
S_{low}
Slow更新的时候,为了保证得到的
t
l
o
w
t_{low}
tlow的置信度更高,计算focus rate
F
F
F。
F
F
F数值越高,说明在单向对齐路径上的概率更大,说明转录的文本可信度更高。每一轮选择一个最好的ASR结果,如果
F
>
F
t
h
r
e
s
h
o
l
d
F>F_{threshold}
F>Fthreshold,在下一轮back translation中,替换
t
p
s
e
u
d
o
t_{pseudo}
tpseudo。
- (2)因为ASR的结果会影响后端TTS,因此挑选一些和base中发音相近的句子及其转录用于TTS训练,那些不好的case直接丢掉。
- (1)首先用
(
S
r
i
c
h
,
t
r
i
c
h
)
(S_{rich},t_{rich})
(Srich,trich)训练ASR模型,在基于
S
l
o
w
S_{low}
Slow更新的时候,为了保证得到的
t
l
o
w
t_{low}
tlow的置信度更高,计算focus rate
F
F
F。
F
F
F数值越高,说明在单向对齐路径上的概率更大,说明转录的文本可信度更高。每一轮选择一个最好的ASR结果,如果
F
>
F
t
h
r
e
s
h
o
l
d
F>F_{threshold}
F>Fthreshold,在下一轮back translation中,替换
t
p
s
e
u
d
o
t_{pseudo}
tpseudo。
- Length augmentation
- 背景:TTS和ASR模型对于短句子 都会更快的收敛而且表现更好,按照上述提到的丢弃表现不好的句子的策略,最终模型会在长句子上性能明显变差。
- 方案:按照一定比例/概率,拼接一些短句子及其转录文本加入训练,这样的结果和对齐误差都是比较小的。20%比例
- Auxiliary supervised losses
- 问题:如果只使用back translation,那么对齐效果差,合成效果也很差;
- 方案:将监督数据训练TTS和ASR的步骤,按照一定比例插入到back translation的训练过程中。 20%比例
experiment
- train set:CommonVoice dataset中选取法语作为rich data,英语和印尼语作为目标小语种。目标语言分成两份,一份取音频,训练ASR,一份取文本训练TTS,保证两个不重合。LJSpeech中选语音作为ref。
- 网站上可以查到,印尼语一共65h,英文一共3205h,有明显背景噪声
- val set:LJSpeech中选100个audio/text pair作为evaluation,Indonesian从CommonVoice中选100个
- 1张A100的卡,训练3天,包括VC/TTS/ASR,HiFi-GAN-vocoder 在LJSpeech上预训练好;
- MOS:20句话20个人;CER/WER,英文的用wenet的模型测试,印尼语用微软的接口测试