定义
文本转语音,又称语音合成(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 等
![](https://img-blog.csdnimg.cn/img_convert/8b52489e0e8162a35f268dddbd5dbace.jpeg)
![](https://img-blog.csdnimg.cn/img_convert/d5396da8c4bcefeb1397f9895563bc2a.png)
语音合成分类
语音合成分为非流式合成和流式合成,两者在实时性上有所不同。非流式语音合成,一次性输入文字,一次性输出语音,注重语音合成系统的整体运算速度,适合语音输出,不适合做语音交互;流式语音合成,可以对输入文本进行分词断句、声学模型和声码器局部合成语音特征和音频,分段传回合成的音频,这种语音合成方式主要关注首包响应时间,首包响应时间越短,用户就会越快收到响应,用户等待时间减少,就不会因为等待回应而失去耐心,因此整体体验感更好,更适合作为语音交互场景的语音合成方案。
流式合成的核心思路: 将 整条音频输出 转换成以 chunk 的方式进行输出。能否进行流式合成,取决于模型的结构,一般文本前端、声学模型和声码器都可以做流式处理。
流式语音合成要求语音合成系统的实时率(Real Time Factor) RTF < 1,即合成 1s 的音频所需的时间要小于 1s,否则无法达到实时地流式合成。推荐使用FastSpeech2 和 HiFiGAN非自回归模型。
云端语音合成VS离线语音合成
目前,语音合成系统分为云端语音合成和离线语音合成。云端语音合成主要配套端到端或多层神经网络算法,语音输出质量高、算力强,但实时性更差,不适于语音交互;近年来,离线语音合成算法和算力得到逐步更新,一些参数化的合成方案质量也可达到一定的水平,适合于合成语音的交互类场景。
文字转语音模型
声学模型
语音编码器
语音克隆
模型类型 | 数据集 | 示例链接 | 预训练模型 |
---|---|---|---|
GE2E | AISHELL-3, etc. | ge2e | ge2e_ckpt_0.3.zip |
GE2E + Tacotron2 | AISHELL-3 | ge2e-Tacotron2-aishell3 | tacotron2_aishell3_ckpt_vc0_0.2.0.zip |
GE2E + FastSpeech2 | AISHELL-3 | ge2e-fastspeech2-aishell3 | fastspeech2_nosil_aishell3_vc1_ckpt_0.5.zip |