文章目录

引言

  语音转换Voice Conversion (VC),是希望转换音色,在神经网络中描述就是输入一段声音讯号,输出一段声音讯号,但是音色已经发生了改变(内容一样)。

Unsupervised Singing Voice Conversion

PitchNet

  VCDeep Fake 上可以用合成的语言欺骗人类,也可以骗过用声纹验证身份的系统。声音泄露实际上是会透露很多风险的。如果有陌生人敲门,而家中只有小孩在。门铃可以用 VC 的技术把小孩的声音转换成他们父母的声音。这样陌生人就会觉得是有大人在家的。

Evaluating Voice Conversion-based Privacy Protection against Informed Attackers

  除此以外,我们还可以做 对话风格 Speaking Style 的转换。 比如,我们可以改变一个人说话的情绪。还可以把正常的说话,转化为大声说话的声音。这个不仅仅是音量上的变化,还有细微的,来自发声器官上的音色上的改变。或者把小声说的悄悄话声转换成正常的说话方式。比如在图书馆说电话,不能大声说话,但是我们希望另外一边,听到我们讲话的声音是正常的。此外,还可以用 VC 来转换歌唱技巧,比如弹唇和颤音等。

  • Emotion

Nonparallel Emotional Speech Conversion

  • Normal-to-Lombard

Cycle-consistent Adversarial Networks for Non-parallel Vocal Effort Based Speaking Style Conversion

  • 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

Singing Voice Conversion with Disentangled Representations of Singer and Vocal Technique Using Variational Autoencoders

  我们还可以用 VC 来增强一段语音的可理解性。比如有些因先天或后天因素发声器官有损伤,发出的声音一般人不是那么容易听清楚。但如果我们用 VC 的技术,就有可能把那些一般人不是容易理解的声音,转换成容易理解的声音。类似的,有一些本地人,他们说话发音是带有口音的,这个也可以用来做口音矫正转换。另外它也可以用在语言学习上。我们听别人的声音来学习口语,可能没有听自己的声音学口语来得直接,来得快。

  我们还可以用 VC 来增强一段语音的可理解性。比如有些因先天或后天因素发声器官有损伤,发出的声音一般人不是那么容易听清楚。但如果我们用 VC 的技术,就有可能把那些一般人不是容易理解的声音,转换成容易理解的声音。类似的,有一些本地人,他们说话发音是带有口音的,这个也可以用来做口音矫正转换。另外它也可以用在语言学习上。我们听别人的声音来学习口语,可能没有听自己的声音学口语来得直接,来得快。

  1. 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
  2. Li-Wei Chen, Hung-Yi Lee, Yu Tsao, Generative adversarial networks for unpaired voice transformation on impaired speech, INTERSPEECH, 2019
  3. Guanlong Zhao, Shaojin Ding, Ricardo GutierrezOsuna, Foreign Accent Conversion by Synthesizing Speech from Phonetic Posteriorgrams, INTERSPEECH, 2019

  VC 还可以用来做数据增广。比如把男女声互相转换,来让语音识别的训练集变得多样化。但这种技术不一定会用在实际业务中。也有人把干净的声音来转换成有噪音的声音,来增强语音识别系统的鲁棒性。

  1. 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
  2. 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,喂给它这两个向量,就可以生成语音。这样一来,音色迁移任务就变得非常直观和容易。比如我们想把李宏毅的声音转换为新垣结衣的声音,但保持说话的内容不变。我们只需要把李宏毅的声音丢给内容编码器,提取出内容向量,再把新垣结衣的声音丢给音色编码器,提取出音色向量。最后把这两个向量接起来丢给解码器,就能得到说李宏毅内容的新垣结衣的声音。

  我们要如何训练出能专门编码内容和专门编码音色的编码器呢?答案是用自编码器。让输入语音序列分别输入两个编码器,再把它们的输出拼接起来喂给解码器,目标让解码器输出的声学特征向量与输入语音越接近越好。重构损失计算可以用L1L2距离。

Feature Disentangle

  那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 把音色编码器的输出加在解码器的后面。这样一来,解码器就只能根据音色编码器的输出去改变内容嵌入的信息。

Adaptive Instance Normalization

  在解码器中,我们也会有一个IN,来把解码器输出的每个 row 做归一化来去除说话者特质的信息。对于要输出哪一个其他人的音色特质,需要结合音色编码器那边的信息才能知道。音色编码器会输出 γ \gamma γ β \beta β 两个向量。加入做完 IN 之后的隐层嵌入为 Z 1 − Z 4 Z_{1}-Z_{4} Z1Z4,我们就把这些隐层嵌入乘上 γ \gamma γ再 加上 β \beta β 得到 Z Z Z。它们会依次把所有的 Z Z Z 做一个 scaling 尺度变换,再做一个位移。这步操作叫作 Add Global。这样一来, γ \gamma γ β \beta β 对解码器的输出是全局的。INAdd Global 整个合起来叫作 AdaIN。我们端对端地训了下去,就结束了。

  上述这种自编码的方式会遇到一个质量不高的问题,因为在训练时,输入的声音编码的内容和音色都来自同一个人。但是在测试的时候,模型的输入是一个人人声的内容,另一个人的人声的音色。这样训练和测试就存在不一致的状况。

  为了解决上述问题,我们能不能说在训练时,我们给内容编码器和音色编码器不同的人声,再让解码器对它们的输出解码呢?但是这样做会遇到一个学习目标未定义的问题,就是标签怎么定呢?为了解决标签难以定义这个问题,我们引入GAN,来鉴别输出的声音信号是来自真实的样本还是生成的样本。

2nd Stage Training

  实际实验中,如果你直接去更新生成器的参数来骗过判别器,训练会很不稳定。解决方法是加一个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

我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐