语音合成第一篇-入门

定义

文本转语音,又称语音合成(Speech Sysnthesis),指的是将一段文本按照一定需求转化成对应的音频,这种特性决定了的输出数据比输入长得多。文本转语音是一项包含了语义学、声学、数字信号处理以及机器学习的等多项学科的交叉任务。虽然辨识低质量音频文件的内容对人类来说很容易,但这对计算机来说并非易事。

按照不同的应用需求,更广义的语音合成研究包括:语音转换,例如说话人转换、语音到歌唱转换、语音情感转换、口音转换等;歌唱合成,例如歌词到歌唱转换、可视语音合成等。


发展历史

语音合成技术的研究距今已有两百年历史,在第二次工业革命之前,语音的合成主要以机械式的音素合成为主。1779年,德裔丹麦科学家 Christian Gottlieb Kratzenstein 建造了人类的声道模型,使其可以产生五个长元音。1791年, Wolfgang von Kempelen 添加了唇和舌的模型,使其能够发出辅音和元音。贝尔实验室于20世纪30年代发明了声码器(Vocoder),将语音自动分解为音调和共振,此项技术由 Homer Dudley 改进为键盘式合成器并于 1939年纽约世界博览会展出。

第一台基于计算机的语音合成系统起源于20世纪50年代。1961年,IBM 的 John Larry Kelly,以及 Louis Gerstman 使用 IBM 704 计算机合成语音,成为贝尔实验室最著名的成就之一。1975年,第一代语音合成系统之一 —— MUSA(MUltichannel Speaking Automation)问世,其由一个独立的硬件和配套的软件组成。1978年发行的第二个版本也可以进行无伴奏演唱。90 年代的主流是采用 MIT 和贝尔实验室的系统,并结合自然语言处理模型。


主流方法

当前的主流方法分为基于统计参数的语音合成波形拼接语音合成混合方法以及端到端神经网络语音合成。基于参数的语音合成包含隐马尔可夫模型(Hidden Markov Model,HMM)以及深度学习网络(Deep Neural Network,DNN)。端到端的方法包含声学模型+声码器以及“完全”端到端方法。

语音合成流水线包含 文本前端(Text Frontend) 、声学模型(Acoustic Model) 和 声码器(Vocoder) 三个主要模块:

  • 通过文本前端模块将原始文本转换为字符/音素。
  • 通过声学模型将字符/音素转换为声学特征,如线性频谱图、mel 频谱图、LPC 特征等。
  • 通过声码器将声学特征转换为波形。

文本前端(Text Frontend)

一个文本前端模块主要包含:

  • 分段(Text Segmentation)
  • 文本正则化(Text Normalization, TN)
  • 分词(Word Segmentation, 主要是在中文中)
  • 词性标注(Part-of-Speech, PoS)
  • 韵律预测(Prosody)
  • 字音转换(Grapheme-to-Phoneme,G2P) (Grapheme: 语言书写系统的最小有意义单位; Phoneme: 区分单词的最小语音单位)
    • 多音字(Polyphone)
    • 变调(Tone Sandhi)
      • “一”、“不”变
      • 三声变调
      • 轻声变调
      • 儿化音
      • 方言
  • ...

(输入给声学模型之前,还需要把音素序列转换为 id)

其中最重要的模块是 文本正则化 模块和 字音转换(TTS 中更常用 G2P 代指) 模块。

各模块输出示例:

• Text: 全国一共有112所211高校
• Text Normalization: 全国一共有一百一十二所二一一高校
• Word Segmentation: 全国/一共/有/一百一十二/所/二一一/高校/
• G2P(注意此句中“一”的读音):
    quan2 guo2 yi2 gong4 you3 yi4 bai3 yi1 shi2 er4 suo3 er4 yao1 yao1 gao1 xiao4
    (可以进一步把声母和韵母分开)
    q uan2 g uo2 y i2 g ong4 y ou3 y i4 b ai3 y i1 sh i2 er4 s uo3 er4 y ao1 y ao1 g ao1 x iao4
    (把音调和声韵母分开)
    q uan g uo y i g ong y ou y i b ai y i sh i er s uo er y ao y ao g ao x iao
    0 2 0 2 0 2 0 4 0 3 ...
• Prosody (prosodic words #1, prosodic phrases #2, intonation phrases #3, sentence #4):
    全国#2一共有#2一百#1一十二所#2二一一#1高校#4
    (分词的结果一般是固定的,但是不同人习惯不同,可能有不同的韵律)

文本前端模块的设计需要结合很多专业的语义学知识和经验。人类在读文本的时候可以自然而然地读出正确的发音,但是这些先验知识计算机并不知晓。 例如,对于一个句子的分词:

我也想过过过儿过过的生活
我也想/过过/过儿/过过的/生活

货拉拉拉不拉拉布拉多
货拉拉/拉不拉/拉布拉多

南京市长江大桥
南京市长/江大桥
南京市/长江大桥

或者是词的变调和儿化音:

你要不要和我们一起出去玩?
你要不(2声)要和我们一(4声)起出去玩(儿)?

不好,我要一个人出去。
不(4声)好,我要一(2声)个人出去。

(以下每个词的所有字都是三声的,请你读一读,体会一下在读的时候,是否每个字都被读成了三声?)
纸老虎、虎骨酒、展览馆、岂有此理、手表厂有五种好产品

又或是多音字,这类情况通常需要先正确分词:

人要行,干一行行一行,一行行行行行;
人要是不行,干一行不行一行,一行不行行行不行。

佟大为妻子产下一女

海水朝朝朝朝朝朝朝落
浮云长长长长长长长消

声学模型(Acoustic Model)

声学模型将字符/音素转换为声学特征,如线性频谱图、mel 频谱图、LPC 特征等,声学特征以 “帧” 为单位,一般一帧是 10ms 左右,一个音素一般对应 5~20 帧左右, 声学模型需要解决的是 “不等长序列间的映射问题”,“不等长”是指,同一个人发不同音素的持续时间不同,同一个人在不同时刻说同一句话的语速可能不同,对应各个音素的持续时间不同,不同人说话的特色不同,对应各个音素的持续时间不同。这是一个困难的“一对多”问题。

声学模型主要分为自回归模型和非自回归模型,其中自回归模型在 t 时刻的预测需要依赖 t-1 时刻的输出作为输入,预测时间长,但是音质相对较好,非自回归模型不存在预测上的依赖关系,预测时间快,音质相对较差。

主流声学模型:

  • 自回归模型: Tacotron、Tacotron2 和 Transformer TTS 等
  • 非自回归模型: FastSpeech、SpeedySpeech、FastPitch 和 FastSpeech2 等

声码器(Vocoder)

声码器将声学特征转换为波形。声码器需要解决的是 “信息缺失的补全问题”。信息缺失是指,在音频波形转换为频谱图的时候,存在相位信息的缺失,在频谱图转换为 mel 频谱图的时候,存在频域压缩导致的信息缺失;假设音频的采样率是16kHZ, 一帧的音频有 10ms,也就是说,1s 的音频有 16000 个采样点,而 1s 中包含 100 帧,每一帧有 160 个采样点,声码器的作用就是将一个频谱帧变成音频波形的 160 个采样点,所以声码器中一般会包含上采样模块。

与声学模型类似,声码器也分为自回归模型和非自回归模型, 更细致的分类如下:

  • 自回归模型:WaveNet、WaveRNN 和 LPCNet 等
  • 非自回归模型:Parallel WaveGAN、Multi Band MelGAN、Style MelGAN 和 HiFiGAN 等
语音合成基本流程图-示例

语音合成基本流程

语音合成分类

语音合成分为非流式合成和流式合成,两者在实时性上有所不同。非流式语音合成,一次性输入文字,一次性输出语音,注重语音合成系统的整体运算速度,适合语音输出,不适合做语音交互;流式语音合成,可以对输入文本进行分词断句、声学模型和声码器局部合成语音特征和音频,分段传回合成的音频,这种语音合成方式主要关注首包响应时间,首包响应时间越短,用户就会越快收到响应,用户等待时间减少,就不会因为等待回应而失去耐心,因此整体体验感更好,更适合作为语音交互场景的语音合成方案。

流式合成的核心思路: 将 整条音频输出 转换成以 chunk 的方式进行输出。能否进行流式合成,取决于模型的结构,一般文本前端、声学模型和声码器都可以做流式处理。

流式语音合成要求语音合成系统的实时率(Real Time Factor) RTF < 1,即合成 1s 的音频所需的时间要小于 1s,否则无法达到实时地流式合成。推荐使用FastSpeech2 和 HiFiGAN非自回归模型。

云端语音合成VS离线语音合成

目前,语音合成系统分为云端语音合成和离线语音合成。云端语音合成主要配套端到端或多层神经网络算法,语音输出质量高、算力强,但实时性更差,不适于语音交互;近年来,离线语音合成算法和算力得到逐步更新,一些参数化的合成方案质量也可达到一定的水平,适合于合成语音的交互类场景。


文字转语音模型

声学模型

模型类型数据集示例链接预训练模型Static / ONNX / Paddle-Lite ModelsSize (static)
Tacotron2LJSpeechtacotron2-ljspeechtacotron2_ljspeech_ckpt_0.2.0.zip
Tacotron2CSMSCtacotron2-csmsctacotron2_csmsc_ckpt_0.2.0.ziptacotron2_csmsc_static_0.2.0.zip103MB
TransformerTTSLJSpeechtransformer-ljspeechtransformer_tts_ljspeech_ckpt_0.4.zip
SpeedySpeechCSMSCspeedyspeech-csmscspeedyspeech_csmsc_ckpt_0.2.0.zipspeedyspeech_csmsc_static_0.2.0.zip </br> speedyspeech_csmsc_onnx_0.2.0.zip </br> speedyspeech_csmsc_pdlite_1.3.0.zip13MB
FastSpeech2CSMSCfastspeech2-csmscfastspeech2_nosil_baker_ckpt_0.4.zipfastspeech2_csmsc_static_0.2.0.zip </br> fastspeech2_csmsc_onnx_0.2.0.zip </br> fastspeech2_csmsc_pdlite_1.3.0.zip157MB
FastSpeech2-ConformerCSMSCfastspeech2-csmscfastspeech2_conformer_baker_ckpt_0.5.zip
FastSpeech2-CNNDecoderCSMSCfastspeech2-csmscfastspeech2_cnndecoder_csmsc_ckpt_1.0.0.zipfastspeech2_cnndecoder_csmsc_static_1.0.0.zip </br>fastspeech2_cnndecoder_csmsc_streaming_static_1.0.0.zip </br>fastspeech2_cnndecoder_csmsc_onnx_1.0.0.zip </br>fastspeech2_cnndecoder_csmsc_streaming_onnx_1.0.0.zip </br> fastspeech2_cnndecoder_csmsc_pdlite_1.3.0.zip </br> fastspeech2_cnndecoder_csmsc_streaming_pdlite_1.3.0.zip84MB
FastSpeech2AISHELL-3fastspeech2-aishell3fastspeech2_aishell3_ckpt_1.1.0.zipfastspeech2_aishell3_static_1.1.0.zip </br> fastspeech2_aishell3_onnx_1.1.0.zip </br> fastspeech2_aishell3_pdlite_1.3.0.zip147MB
FastSpeech2LJSpeechfastspeech2-ljspeechfastspeech2_nosil_ljspeech_ckpt_0.5.zipfastspeech2_ljspeech_static_1.1.0.zip </br> fastspeech2_ljspeech_onnx_1.1.0.zip </br> fastspeech2_ljspeech_pdlite_1.3.0.zip145MB
FastSpeech2VCTKfastspeech2-vctkfastspeech2_vctk_ckpt_1.2.0.zipfastspeech2_vctk_static_1.1.0.zip </br> fastspeech2_vctk_onnx_1.1.0.zip </br> fastspeech2_vctk_pdlite_1.3.0.zip145MB
FastSpeech2ZH_ENfastspeech2-zh_enfastspeech2_mix_ckpt_1.2.0.zipfastspeech2_mix_static_0.2.0.zip </br> fastspeech2_mix_onnx_0.2.0.zip145MB
FastSpeech2male-zhfastspeech2_male_zh_ckpt_1.4.0.zipfastspeech2_male_zh_static_1.4.0.zip </br> fastspeech2_male_zh_onnx_1.4.0.zip146MB
FastSpeech2male-enfastspeech2_male_en_ckpt_1.4.0.zipfastspeech2_male_en_static_1.4.0.zip </br> fastspeech2_male_en_onnx_1.4.0.zip145MB
FastSpeech2male-mixfastspeech2_male_mix_ckpt_1.4.0.zipfastspeech2_male_mix_static_1.4.0.zip </br> fastspeech2_male_mix_onnx_1.4.0.zip146MB
FastSpeech2Cantonesefastspeech2-cantonfastspeech2_canton_ckpt_1.4.0.zipfastspeech2_canton_static_1.4.0.zip</br>fastspeech2_canton_onnx_1.4.0.zip146MB

语音编码器

模型类型数据集示例链接预训练模型Static / ONNX / Paddle-Lite ModelsSize (static)
WaveFlowLJSpeechwaveflow-ljspeechwaveflow_ljspeech_ckpt_0.3.zip
Parallel WaveGANCSMSCPWGAN-csmscpwg_baker_ckpt_0.4.zippwg_baker_static_0.4.zip </br> pwgan_csmsc_onnx_0.2.0.zip </br> pwgan_csmsc_pdlite_1.3.0.zip4.8MB
Parallel WaveGANLJSpeechPWGAN-ljspeechpwg_ljspeech_ckpt_0.5.zippwgan_ljspeech_static_1.1.0.zip </br> pwgan_ljspeech_onnx_1.1.0.zip </br> pwgan_ljspeech_pdlite_1.3.0.zip4.8MB
Parallel WaveGANAISHELL-3PWGAN-aishell3pwg_aishell3_ckpt_0.5.zippwgan_aishell3_static_1.1.0.zip </br> pwgan_aishell3_onnx_1.1.0.zip </br> pwgan_aishell3_pdlite_1.3.0.zip4.8MB
Parallel WaveGANVCTKPWGAN-vctkpwg_vctk_ckpt_0.5.zippwgan_vctk_static_1.1.0.zip </br> pwgan_vctk_onnx_1.1.0.zip </br> pwgan_vctk_pdlite_1.3.0.zip4.8MB
Multi Band MelGANCSMSCMB MelGAN-csmscmb_melgan_csmsc_ckpt_0.1.1.zip mb_melgan_baker_finetune_ckpt_0.5.zipmb_melgan_csmsc_static_0.1.1.zip </br> mb_melgan_csmsc_onnx_0.2.0.zip </br> mb_melgan_csmsc_pdlite_1.3.0.zip7.6MB
Style MelGANCSMSCStyle MelGAN-csmscstyle_melgan_csmsc_ckpt_0.1.1.zip
HiFiGANCSMSCHiFiGAN-csmschifigan_csmsc_ckpt_0.1.1.ziphifigan_csmsc_static_0.1.1.zip </br> hifigan_csmsc_onnx_0.2.0.zip </br> hifigan_csmsc_pdlite_1.3.0.zip46MB
HiFiGANLJSpeechHiFiGAN-ljspeechhifigan_ljspeech_ckpt_0.2.0.ziphifigan_ljspeech_static_1.1.0.zip </br> hifigan_ljspeech_onnx_1.1.0.zip </br> hifigan_ljspeech_pdlite_1.3.0.zip49MB
HiFiGANAISHELL-3HiFiGAN-aishell3hifigan_aishell3_ckpt_0.2.0.ziphifigan_aishell3_static_1.1.0.zip </br> hifigan_aishell3_onnx_1.1.0.zip </br> hifigan_aishell3_pdlite_1.3.0.zip46MB
HiFiGANVCTKHiFiGAN-vctkhifigan_vctk_ckpt_0.2.0.ziphifigan_vctk_static_1.1.0.zip </br> hifigan_vctk_onnx_1.1.0.zip </br> hifigan_vctk_pdlite_1.3.0.zip46MB
WaveRNNCSMSCWaveRNN-csmscwavernn_csmsc_ckpt_0.2.0.zipwavernn_csmsc_static_0.2.0.zip18MB
Parallel WaveGANMalepwg_male_ckpt_1.4.0.zippwgan_male_static_1.4.0.zip </br> pwgan_male_onnx_1.4.0.zip4.8M
HiFiGANMalehifigan_male_ckpt_1.4.0.ziphifigan_male_static_1.4.0.zip </br> hifigan_male_onnx_1.4.0.zip46M

语音克隆

模型类型数据集示例链接预训练模型
GE2EAISHELL-3, etc.ge2ege2e_ckpt_0.3.zip
GE2E + Tacotron2AISHELL-3ge2e-Tacotron2-aishell3tacotron2_aishell3_ckpt_vc0_0.2.0.zip
GE2E + FastSpeech2AISHELL-3ge2e-fastspeech2-aishell3fastspeech2_nosil_aishell3_vc1_ckpt_0.5.zip

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值