【飞桨PaddleSpeech语音技术课程】— 语音合成

(以下内容搬运自飞桨PaddleSpeech语音技术课程,点击链接可直接运行源码)

『听』和『说』

人类通过听觉获取的信息大约占所有感知信息的 20% ~ 30%。声音存储了丰富的语义以及时序信息,由专门负责听觉的器官接收信 ,产生一系列连锁刺激后,在人类大脑的皮层听区进行处理分析,获取语义和知识。近年来,随着深度学习算法上的进步以及不断丰厚的硬件资源条件,文本转语音(Text-to-Speech, TTS) 技术在移动、虚拟娱乐等领域得到了广泛的应用。

“听”书

使用 PaddleOCR 直接获取书籍上的文字。

使用 PaddleSpeech,阅读上一步识别出来的文字。

具体实现代码详见 Story Talker

偶像开口说话

元宇宙来袭,构造你的虚拟人! 看看 PaddleGAN 怎样合成唇形,让WiFi之母——海蒂·拉玛说话。

具体实现代码请参考 Metaverse。

下面让我们来系统地学习语音方面的知识,看看怎样使用 PaddleSpeech 实现基本的语音功能,以及怎样结合光学字符识别(Optical Character Recognition,OCR)、自然语言处理(Natural Language Processing,NLP)等技术“听”书、让名人开口说话。

前言

背景知识

为了更好地了解文本转语音任务的要素,我们先简要地回顾一下文本转语音的发展历史。如果你对此已经有所了解,或希望能尽快使用代码实现,请直接跳至实践。

定义

文本转语音,又称语音合成(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 和贝尔实验室的系统,并结合自然语言处理模型。

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

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

实践

安装 paddlespeech

数据及模型准备

获取PaddlePaddle预训练模型

导入 Python 包

设置预训练模型的路径

文本前端(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 代指) 模块。

各模块输出示例:

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

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

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

PaddleSpeech Text-to-Speech的文本前端解决方案:

  • 文本正则
  • G2P
    • 多音字模块: pypinyin/g2pM
    • 变调模块: 用分词 + 规则

构造文本前端对象

传入,把相应的转换成。

调用文本前端

文本前端对输入数据进行正则化时会进行分句,若设置为,则所有分句的 构成一个 ;若设置为,则表示整句的。

用深度学习实现文本前端


FastSpeech2 络结构图

PaddleSpeech TTS 实现的 FastSpeech2 与论文不同的地方在于,我们使用的的是 phone 级别的 和 (与 FastPitch 类似),这样的合成结果可以更加稳定

【飞桨PaddleSpeech语音技术课程】— 语音合成

FastPitch 络结构图

更多关于语音合成模型的发展及改进。

初始化声学模型 FastSpeech2

with open(phones_dict, "r") as f:    phn_id = [line.strip().split() for line 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月25日
下一篇 2022年9月25日

相关推荐