声音转换

声音转换(voice conversion, 简称 VC),定义:输入是一段人声 A (源说话人),输出是另外一段人声 B(目标说话人),A 和 B 说话内容相同,但是某些方面不一致。不一致的地方包含几个方面:音色不一致,情绪不一致,说话风格不一致等。每种不一致的地方都是一个声音转换的研究方向。





声音转换和传统的变声是有区别的,使用技术也不一样。想必大家用过 QQ 变声或者看过直播里面使用的变声器效果,包括大叔音、御姐音、萝莉音等。

  • 传统变声方法是基于语音信号处理技术,无需训练模型,可变声音比较单一,不易扩展,并且声音比较机械。
  • 而声音转换技术在拥有数据的前提下,可以转换为任意现实生活中的人的声音,也可变为一个混合出来的不存在的人的声音,不同风格的萝莉、御姐、大叔应有尽有,并且可扩展性强,声音相似度高,音质好。




声音转换的应用


1. 说话人转换

  • 直播场景:比如主播生病,可以代替主播进行直播

  • 隐藏身份:利用在安全领域,可以有效的隐藏自己的身份,相比传统变声,不易被发现

  • 欺骗人或者电脑(声纹):比如唤醒带有声纹验证的SIRI或者声纹解锁, 但是随之而来的会让不法分子使用这项技术进行诈骗,所以就有了对应 Anti-Spoofing 技术(反欺骗), Speaker Verification


2.说话风格转换

  • 韵律/情绪转换:每一个素人都可以说出带有抑扬顿挫、喜怒哀乐、收放自如的类似标准播音员的声音

  • Whisper-to-Normal / Normal-to-Lombard:即悄悄话转成正常人说话,正常人说话转为嘈杂环境下的说话。主要是音量变化,说话强度不同的转换。

3.重塑声音

  • 口音转换:增加口音/去除口音,比如普通话转天津话/东北话,天津话/东北话转普通话

  • 助力说话障碍人士获得新声:把残缺的不完美的话语转为正常的声音

  • 外语转化:比如让不会说英文的人说英文,并且是标准的英语腔


4.混血(Mixed-Character)

  • 通过声音转换技术,混合转换TTS的各类声音,可以让不同的发音人拥有不同的风格,比如魔音工坊上的影视解说风格、温柔风格、霸道风格等等。


5.其他

  • 通过声音转换技术,可以做 Data Augmentation(数据增强)

  • 歌唱合成:也可以通过声音转换技术,实现 Speech-to-Sing 功能



技术架构

声音转换的方法,根据数据我们可以分为两大类,一类是 Parallel Data,另一类是  Unparallel Data;也可以根据 Speaker Mapping,分为 one-to-one, many-to-one, many-to-many 以及 one-to-many。下文我们只根据数据的方法,归类一些技术方案。

Parallel Data技术方案

Parallel Data,即数据中源说话人和目标说话人需要说相同内容的话语。这种方案通过学习源说话人和目标说话人的对应关系来进行声音转换。在训练过程中先进行帧对齐,然后再使用统计模型或者深度学习来学习源说话人和目标说话人之间帧级别声学谱的 Mapping 关系。



Figure from:Sisman B ,  Yamagishi J ,  King S , et al. An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning[J].  2020.

  • Statistical Modeling: NMF, GMM, DKPLS, Frequency Wraping

  • Deep Learning: DNN, LSTM etc.

  • Encoder-decoder with attention: SCENT, AttS2S-VC, Parrotron etc.



在生成时,提取源说话人的声学谱特征,通过学习到的Mapping关系得到目标说话人的声学谱特征,最后将谱特征转化为目标说话人的声音。




Figure from: Sisman B ,  Yamagishi J ,  King S , et al. An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning[J].  2020.

Unparallel Data技术方案

在实际应用中,很少有对应的 Parallel Data 数据可供训练声音转换。以此衍生出了针对 Unparallel Data 的技术方案,下面仅归类 Deep Learning 的方案。



1.采用GAN,硬train一发


  • 采用对抗学习的方法,无需使用 paired data

  • CycleGAN-VC / CycleGAN-VC2 / CycleGAN-V3

    借用图像 CyclGAN 方法,把正常的马,变为斑马,与VC任务一致。如图所示:






不好意思拿错了,重新来:





具体可参考:

http://www.kecl.ntt.co.jp/people/kaneko.takuhiro/projects/cyclegan-vc3/index.html

同时也有StarGAN-VC / StarGAN-VC2



2.借助TTS系统辅助VC


  • Cotatron: 借助 TTS multi-speaker tacotron 模型, 与 TTS 模型共享 attention,实现 one-to-many VC

  • 其他

    • Voice transformer network: Sequence- to-sequence voice conversion using transformer with text-to-speech pretraining
    • Improving sequence-to-sequence voice conversion by adding text-supervision
    • Bootstrapping non-parallel voice conversion from speaker-adaptive text-to-speech
    • Nautilus



3.借助ASR系统辅助VC


Voice Conversion 需要大量的数据去学习 content 信息,ASR 一般是基于上万小时训练的模型,我们依赖神经网络 ASR 模型获取与说话人无关的信息 PPG(phonetic posteriogram)(音素后验), 通过 PPG 映射到语音的特征,最后合成对应的声音。



Figure from:Sisman B ,  Yamagishi J ,  King S , et al. An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning[J].  2020.

  • Phonetic posteriorgrams for many-to-one voice conversion without parallel data training
  • PPG for cross-lingual VC: 跨语种转换
  • PPG for emotional VC: 跨情感转换
  • PPG for limited data: 小数据量平均模型 fine tune



4.将语言内容与说话者分开


VoiceConversion 终极目标是将语言内容与说话人信息解耦,借助 ASR 也是属于类似的目标。如图



Figure from:Sisman B ,  Yamagishi J ,  King S , et al. An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning[J].  2020.

  • One-shot voice conversion by separating speaker and content representations withinstance normalization
  • One-shot voice conversion byvector quantization
  • Vqvc+: One-shot voice conversion by vector quantization and u-net architecture
  • Group latent embed- ding forvector quantized variational autoencoderin non-parallel voice conversion
  • CDVAE-VC



5.Others


  • 解决噪声/混响环境下的VC问题 Voicy: Zero-Shot Non-Parallel Voice Conversion in Noisy Reverberant Environments


VC评测指标

  • 客观指标
    评测谱参数(mgc / lsp)的距离,以及 F0(基频的) RMSE 等。
  • 主观指标
    我们使用 MOS 指标评测 VC 系统的好坏,主要在自然度、音质以及相似性上评测 MOS(1-5分)。


MeetVC技术架构

我们使用基于 PPG 的多说话人 VC 模型进行声音转换,具体过程如下。


1. 训练过程中,对目标说话人的语音,进行内容提取,得到内容特征(Content Feature),该特征与语音的发音人无相关性。


同时,通过声码器提取语音的声学特征。最后训练变声模型,得到内容特征和声学特征之间的关系。在声学模型中我们也支持发音人指定,因此可以同时训练多个目标发音人。




2. 在生成过程中,提取源说话人语音中的内容特征,并输入到变声模型中。变声模型可以指定目标发音人,将内容特征转换为目标发音人对应的声学特征,最后通过声码器即可得到目标发音人的语音。



内容提取方案

1.Kaldi 如何提取 PPG

PPG在 Kaldi 对应的网络中指的是 TDNN 输出的前一层 Bottleneck Feature (具体的网络可以不同,选一个能够取得相对比较小的 WER 的模型即可)


  • 先使用 Kaldi 工具提取声学特征,这里我们使用 mfcc 特征,具体过程如下:

# mfcc 特征提取
mkdir-p exp/make_mfcc/test/
paste-feats\
--length-tolerance=2 \
"ark:compute-fbank-feats \
--write-utt2dur=ark,t:exp/make_mfcc/test/utt2dur.1 \
--verbose=2 \
-config=conf/fbank.conf \
scp,p:data/wav.scp ark:-  |" \
"ark:compute-kaldi-pitch-feats \
--verbose=2 \
--config=conf/pitch.conf \
scp,p:data/wav.scp ark:- | \
process-kaldi-pitch-feats  ark:- ark:- |" \
ark:- | \
copy-feats \
--compress=true \
--write-num-frames=ark,t:exp/make_mfcc/test/utt2num_frames.1 \
ark:- \
ark,scp:`pwd`/exp/make_mfcc/test/feat.ark,`pwd`/exp/make_mfcc/test/feat.scp


  • 接着使用已训练好的 TDNN 模型,对模型进行剪枝,把 PPG 对应的网络层作为输出,使用该模型得到最终 PPG 结果,具体过程如下:

# TDNN模型ppg特征提取
nnet3-compute\
--use-gpu=no \
--frame-subsampling-factor=1 \
--frames-per-chunk=50 \
--extra-left-context=0 \
--extra-right-context=0 \
--extra-left-context-initial=-1 \
--extra-right-context-final=-1 \
final.raw.bn.mdl \
scp:exp/make_mfcc/test/feat.scp \
ark,scp:post.ark,post.scp



Tips:

  • 训练 ASR 模型的数据量越大,VC 效果越好,越鲁棒

  • 特征是否引入 pitch 对最后的 VC 结果影响不是很大


2.WeNet 如何提取 PPG

近日,出门问问联合西北工业大学音频语音与语言处理研究组推出面向产品和工业界的端到端语音识别开源工具。

WeNet 致力于消除从端到端模型研究到产品落地中的鸿沟,探索更适合工业级产品的端到端解决方案。

WeNet

出门问问,公众号:WeNet步行街出门问问联合西北工业大学推出端到端语音识别工具WeNet


为什么我们要使用 WeNet?从 WER 到 runtime 性能上,相比上面使用的kaldi都略胜一筹。基于此,我们考虑使用 WeNet 提取 PPG, 期望能够获取更好的解耦的内容特征,辅助 VC 得到更好的结果。


我们所用到的是WeNet中的 U2 模型,使用了 Joint CTC/AED 的结构,WeNet具体介绍可以关注公众号 WeNet 步行街或者阅读对应文章,这里我们介绍如何使用 WeNet 提取ppg。


  • WeNet 的输入也是声学特征,通过 Kaldi 提取特征,在这里我们使用了 fbank + pitch 特征(鉴于历史原因,我们使用了比较早的 pipeline 跑的 WeNet 模型)。

  • PPG 在该模型中对应的是 encoder 的 output,我们直接拿到该输出返回,其中我们修改了asr_model.py,具体如下:


# WeNet提取ppg特征
# https://github.com/wenet-e2e/wenet/blob/main/wenet/transformer/asr_model.py
def ctc_greedy_search(...):
...
encoder_out, encoder_mask = self._forward_encoder(
speech, speech_lengths, decoding_chunk_size,
num_decoding_left_chunks,
simulate_streaming)# (B, maxlen, encoder_dim)
maxlen = encoder_out.size(1)
encoder_out_lens = encoder_mask.squeeze(1).sum(1)
ctc_probs = self.ctc.log_softmax(
encoder_out)# (B, maxlen, vocab_size)
topk_prob, topk_index = ctc_probs.topk(1, dim=2)# (B, maxlen, 1)
topk_index = topk_index.view(batch_size, maxlen)# (B, maxlen)
mask = make_pad_mask(encoder_out_lens)# (B, maxlen)
topk_index = topk_index.masked_fill_(mask, self.eos)# (B, maxlen)
hyps = [hyp.tolist() for hyp in topk_index]
hyps = [remove_duplicates_and_blank(hyp) for hyp in hyps]
return hyps, encoder_out


我们使用encoder_out 作为变声模型的 PPG 输入。


在 WeNet 模型中,我们使用了 subsample 为4的模型。理由是,如果我们将 subsample 设为1的话,runtime 性能太差;如果我们设为更高的值,可能会造成一定的 WER 损失,从而使得 PPG 不够准确。


Tips:

  • WeNet 相比 Kaldi 有更低的 WER,生成 PPG 可以更准确。


  • Subsample(即下采样)为8时,实验得到某些转换后的声音会产生明显停顿的感觉。


变声模型

我们使用了多发音人的变声模型。变声模型的设计上,使用 Encoder-Decoder 结构,整体网络架构类似于 Tacotron,想借此更好地学习输入特征和输出特征的映射关系。


在模型中,我们引入了 spk embedding,使用 FC + softsign 对 embedding 进行处理,以此来获得更好的说话人表示,我们将该表示加入 decoder 的输入来引入说话人信息。


此外,我们使用的 PPGs 和 Mel Spectrums 是帧对齐的,在 decoder 中将对应帧的 encoder outputs 输入到 decoder 中,以此来完成推理过程。




声码器

我们使用了 MeetVoice 所使用的神经网络声码器 Meet-Vocoder,来保证我们得到高音质的转换声音。在此基础上,我们使用了24kHZ 的采样率进行声码器的学习,用来提高声音的清晰度和音质。

MeetVoice

出门问问,公众号:出门问问Mobvoi出门问问上线 MeetVoice, 让合成声音以假乱真


总结与展望

我们都知道,颜值经济早已经到来。人们未来变得好看,购买各种化妆品、保养、美容,大家都愿意为美付费。而声音和视觉一样,都有着天然的魅力。人们喜欢看好看的帅哥美女,也喜欢听好听的声音。如果某个人拥有惊人的外貌,却天生一把公鸭子嗓,不免会让人心生感叹。因此,我们认为,未来,声音的美容也会成为爱美人士的新需求。如果希望天然的,那就是接受声音的培训,就如同音乐苗子经过培训成长为专业歌手,不好听的声音,经过配音,也会变得更加悦耳。


魔音的声音转换只是用到了现有技术的冰山一角。那么如何让声音更悦耳?这是给技术人员最大的难题。我们一直在思考几个问题,拿出来与大家共享,欢迎一起讨论

  • 通过 TTS + Voice Conversion,如何去除或者增加用户的口音或者方言

  • 通过TTS  + 情感合成+ Voice Conversion,如何让普通用户可以收放自如的控制情绪以及韵律

  • 如何通过后处理方法(模型建模),使得女生声音更甜美,男生声音更有磁性(源数据无需专业的录音设备)

  • 上述问题其实也适用于歌唱合成以及 Avatar

  • ......


随着技术的发展,相信上述问题都可以一一解决。而我们的目标需要放的更长远,通过我们自研的 Meet 家族,让大家都可以享受到 AI 的便利:

  • 让每一个人都可以低成本的拥有自己真实的 TTS, 包括语气词、重读等

  • 让每一个人都可以低成本的拥有不可能的 TTS,情绪变换,标准播音,韵律控制等。


Sisman B ,  Yamagishi J ,  King S , et al. An Overview of Voice Conversion and its Challenges: From Statistical Modeling to Deep Learning[J].  2020.
Cao Y, Wu X, Liu S, et al. End-to-end code-switched tts with mix of monolingual recordings[C]//ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019: 6935-6939.

Wang Y, Skerry-Ryan R J, Stanton D, et al. Tacotron: Towards end-to-end speech synthesis[J]. arXiv preprint arXiv:1703.10135, 2017.