
深度学习系列(三)【人类语言处理--语音转换】
文章目录引言算法引言 语音转换Voice Conversion (VC),是希望转换音色,在神经网络中描述就是输入一段声音讯号,输出一段声音讯号,但是音色已经发生了改变(内容一样)。Samples for “Unsupervised Singing Voice Conversion”https://enk100.github.io/Unsupervised_Singing_Voice_Conve
引言
语音转换Voice Conversion
(VC),是希望转换音色,在神经网络中描述就是输入一段声音讯号,输出一段声音讯号,但是音色已经发生了改变(内容一样)。
VC
在 Deep Fake
上可以用合成的语言欺骗人类,也可以骗过用声纹验证身份的系统。声音泄露实际上是会透露很多风险的。如果有陌生人敲门,而家中只有小孩在。门铃可以用 VC
的技术把小孩的声音转换成他们父母的声音。这样陌生人就会觉得是有大人在家的。
除此以外,我们还可以做 对话风格 Speaking Style
的转换。 比如,我们可以改变一个人说话的情绪。还可以把正常的说话,转化为大声说话的声音。这个不仅仅是音量上的变化,还有细微的,来自发声器官上的音色上的改变。或者把小声说的悄悄话声转换成正常的说话方式。比如在图书馆说电话,不能大声说话,但是我们希望另外一边,听到我们讲话的声音是正常的。此外,还可以用 VC
来转换歌唱技巧,比如弹唇和颤音等。
- Emotion
- Normal-to-Lombard
- Whisper-to-Normal
Maitreya Patel, Mihir Parmar, Savan Doshi, Nirmesh Shah and Hemant A. Patil, Novel Inception-GAN for Whisper-to-Normal Speech Conversion, ISCA Speech Synthesis Workshop, 2019
- Singers vocal technique conversion
我们还可以用 VC
来增强一段语音的可理解性。比如有些因先天或后天因素发声器官有损伤,发出的声音一般人不是那么容易听清楚。但如果我们用 VC
的技术,就有可能把那些一般人不是容易理解的声音,转换成容易理解的声音。类似的,有一些本地人,他们说话发音是带有口音的,这个也可以用来做口音矫正转换。另外它也可以用在语言学习上。我们听别人的声音来学习口语,可能没有听自己的声音学口语来得直接,来得快。
我们还可以用 VC
来增强一段语音的可理解性。比如有些因先天或后天因素发声器官有损伤,发出的声音一般人不是那么容易听清楚。但如果我们用 VC
的技术,就有可能把那些一般人不是容易理解的声音,转换成容易理解的声音。类似的,有一些本地人,他们说话发音是带有口音的,这个也可以用来做口音矫正转换。另外它也可以用在语言学习上。我们听别人的声音来学习口语,可能没有听自己的声音学口语来得直接,来得快。
- Fadi Biadsy, Ron J. Weiss, Pedro J. Moreno, Dimitri Kanevsky, Ye Jia, Parrotron: An End-to-End Speech-to-Speech Conversion Model and its Applications to Hearing-Impaired Speech and Speech Separation, INTERSPEECH, 2019
- Li-Wei Chen, Hung-Yi Lee, Yu Tsao, Generative adversarial networks for unpaired voice transformation on impaired speech, INTERSPEECH, 2019
- Guanlong Zhao, Shaojin Ding, Ricardo GutierrezOsuna, Foreign Accent Conversion by Synthesizing Speech from Phonetic Posteriorgrams, INTERSPEECH, 2019
VC
还可以用来做数据增广。比如把男女声互相转换,来让语音识别的训练集变得多样化。但这种技术不一定会用在实际业务中。也有人把干净的声音来转换成有噪音的声音,来增强语音识别系统的鲁棒性。
- Gokce Keskin, Tyler Lee, Cory Stephenson, Oguz H. Elibol, Measuring the Effectiveness of Voice Conversion on Speaker Identification and Automatic Speech Recognition Systems, ICML workshop, 2019
- Masato Mimura, Shinsuke Sakai, and Tatsuya Kawahara, Cross-domain Speech Recognition Using Nonparallel Corpora with
Cycle-consistent Adversarial Networks, ASRU, 2017
算法
现在的这些文献很多都假设输入输出的长度是一样的,这就允许一些简单的模型去做,比如编解码。输入是一个向量(声学特征),输出也是一段向量,输出的这段向量要转换成声音讯号还差了一个相位,所以我们需要Vocoder
的模块,来做这件事。传统的方法是Griffin-Lim
算法,深度学习的方法是 WaveNet
。
根据我们的训练集,可以分成两大类。一类是我们有成对的训练数据。我们有说某段话的声音A
,和另一段说同样话的声音B
。二者是匹配的。但现实中,我们很难收集到海量的成对数据。我们可以用一个比较好的预训练模型, 来减少对成对标注数据的依赖。
- Wen-Chin Huang,Tomoki Hayashi,Yi-Chiao Wu,Hirokazu Kameoka,Tomoki Toda, Voice Transformer Network: Sequence-to-Sequence Voice Conversion Using Transformer with Text-to-Speech Pretraining, arXiv, 2019
还有一个神奇的做法是,用语音合成的数据。比如有一大堆人说的句子,还有这个句子的文本对应关系。利用谷歌小姐将这些数据说一遍,就得到了另一个风格的语音数据了。
- Fadi Biadsy, Ron J. Weiss, Pedro J. Moreno, Dimitri Kanevsky, Ye Jia, Parrotron: An End-to-End Speech-to-Speech Conversion Model and its Applications to Hearing-Impaired Speech and Speech Separation, INTERSPEECH, 2019
对于非成对句子,比如输入声音说的内容和输出声音说的内容是不一样的。把说中文的声音,转化为翻译成英文的声音。这些都是风格迁移任务。技巧都是从图像风格迁移那边借鉴过来的。
对于非成对数据,我们有两种方法可以做。一种是做特征分离,另一种是直接的转换。特征分离的思路是把一段人声的内容特征和音色部分特征分离开来。如果我们有办法把口音的信息提取出来,再把它替换掉,就可以做到口音的转换。我们有两个 Encoder 能分别把声音编码出包含内容信息的向量和包含音色信息的向量。我们有一个 Decoder,喂给它这两个向量,就可以生成语音。这样一来,音色迁移任务就变得非常直观和容易。比如我们想把李宏毅的声音转换为新垣结衣的声音,但保持说话的内容不变。我们只需要把李宏毅的声音丢给内容编码器,提取出内容向量,再把新垣结衣的声音丢给音色编码器,提取出音色向量。最后把这两个向量接起来丢给解码器,就能得到说李宏毅内容的新垣结衣的声音。
我们要如何训练出能专门编码内容和专门编码音色的编码器呢?答案是用自编码器。让输入语音序列分别输入两个编码器,再把它们的输出拼接起来喂给解码器,目标让解码器输出的声学特征向量与输入语音越接近越好。重构损失计算可以用L1
或L2
距离。
那Speaker Encoder
如何准确找到语者信息呢?一种简单的方法就是直接用one-hot
编码来做。每一个语者表示一个one-hot
编码。假设有10
个说话者,我们就开10
个向量。每个Speaker
用一个独热编码标识。但如果有第11
个说话者进来。模型就不能完成音色转换。
- Chin-Cheng Hsu, Hsin-Te Hwang, Yi-Chiao Wu, Yu Tsao, Hsin-Min Wang, Voice Conversion from Non-parallel Corpora Using
Variational Auto-encoder, APSIPA, 2016
为了解决上述这个问题,还有一些其他的方法来做这个Speaker Encoder
,输入语者的声音讯号,输出语者的特征向量。(这些预训练模型可以在网络上直接下载下来用)。
- Kaizhi Qian, Yang Zhang, Shiyu Chang, Xuesong Yang, Mark Hasegawa-Johnson, AUTOVC: Zero-Shot Voice Style Transfer with Only Autoencoder Loss, ICML, 2019
- Songxiang Liu, Jinghua Zhong, Lifa Sun, Xixin Wu, Xunying Liu, Helen Meng, Voice Conversion Across Arbitrary Speakers Based on a Single Target-Speaker Utterance, INTERSPEECH, 2018
对于内容编码器(Content Encoder
)有没有预训练模型呢,也是有的,常见的做法是用语音识别来做Encoder
。因为一个好的语音识别系统,必然要忽略说话者的音色、背景噪音等信息,关注其内容把文字解出来。这里也可以用现有的表现较好的LAS
模型来做编码器。
此外,我们还有一些其它的想法。你可以加上一个判别器来做对抗训练。判别器是一个分类器。它吃一个内容编码器的内容嵌入,输出是判断这段话是哪个人说的。内容编码器要做的是尽可能地骗过这个判别器。这样就会使得它编码出的信息要尽可能地不包含音色信息。判别器和内容编码器交替地训练。
- Ju-chieh Chou, Cheng-chieh Yeh, Hung-yi Lee, Lin-shan Lee, “Multi-target Voice Conversion without Parallel Data by Adversarially Learning Disentangled Audio Representations”, INTERSPEECH, 2018
除了上述的方法也可以采用直接设计网络架构来达到这件事情。比如在内容编码器后面加一个 Instance normalization
模块(计算每个通道上的均值和方差来进行归一化,通过这个归一化的方法,让所有的输出的均值都是0,方差是1。这就相当于是把人声的特质给去掉了。因为被归一化后,没有输出值会特别大,就彰显不出说话者的特质信息。) 它可以去除说话者的音色信息。
接下来,我们要怎么去编码音色的信息呢? 当我们的内容嵌入喂给解码器的时候,我们希望音色编码器对解码器的影响是在音色信息层面上。我们会用一个 Adaptive Instance Normalization
把音色编码器的输出加在解码器的后面。这样一来,解码器就只能根据音色编码器的输出去改变内容嵌入的信息。
在解码器中,我们也会有一个IN
,来把解码器输出的每个 row
做归一化来去除说话者特质的信息。对于要输出哪一个其他人的音色特质,需要结合音色编码器那边的信息才能知道。音色编码器会输出
γ
\gamma
γ和
β
\beta
β 两个向量。加入做完 IN
之后的隐层嵌入为
Z
1
−
Z
4
Z_{1}-Z_{4}
Z1−Z4,我们就把这些隐层嵌入乘上
γ
\gamma
γ再 加上
β
\beta
β 得到
Z
Z
Z。它们会依次把所有的
Z
Z
Z 做一个 scaling
尺度变换,再做一个位移。这步操作叫作 Add Global
。这样一来,
γ
\gamma
γ 和
β
\beta
β 对解码器的输出是全局的。IN
和 Add Global
整个合起来叫作 AdaIN
。我们端对端地训了下去,就结束了。
上述这种自编码的方式会遇到一个质量不高的问题,因为在训练时,输入的声音编码的内容和音色都来自同一个人。但是在测试的时候,模型的输入是一个人人声的内容,另一个人的人声的音色。这样训练和测试就存在不一致的状况。
为了解决上述问题,我们能不能说在训练时,我们给内容编码器和音色编码器不同的人声,再让解码器对它们的输出解码呢?但是这样做会遇到一个学习目标未定义的问题,就是标签怎么定呢?为了解决标签难以定义这个问题,我们引入GAN
,来鉴别输出的声音信号是来自真实的样本还是生成的样本。
实际实验中,如果你直接去更新生成器的参数来骗过判别器,训练会很不稳定。解决方法是加一个Patcher
。它也是一个类似于解码器的模型,输入和解码器是一样的。但它的输出会加到解码器的输出上,再去给判别器鉴别。这就好比是,怕解码器输出的结果不太好,所以Patcher
把一些补丁钉到解码器的输出上,期待这些补丁能帮助解码器骗过鉴别器。实验结果发现,不直接训练解码器,而改训练另一个额外的模型,会让训练结果比较稳定。
- Ju-chieh Chou, Cheng-chieh Yeh, Hung-yi Lee, Lin-shan Lee, “Multi-target Voice Conversion without Parallel Data by Adversarially Learning Disentangled Audio Representations”, INTERSPEECH, 2018
- Andy T. Liu, Po-chun Hsu and Hung-yi Lee, “Unsupervised End-to-End Learning of Discrete Linguistic Units for Voice
Conversion”, INTERSPEECH, 2019
还可以基于GAN
的方法直接train
一波:
- Takuhiro Kaneko, Hirokazu Kameoka, Kou Tanaka, and Nobukatsu Hojo, CycleGAN-VC2: Improved CycleGAN-based Non-parallel Voice Conversion, ICASSP 2019
- Takuhiro Kaneko, Hirokazu Kameoka, Kou Tanaka, and Nobukatsu Hojo, StarGAN-VC2: Rethinking Conditional Methods for
StarGAN-Based Voice Conversion, INTERSPEECH 2019
我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!
更多推荐
所有评论(0)