前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >语音合成(TTS)技术原理简介:如何一步步将文字变成语音

语音合成(TTS)技术原理简介:如何一步步将文字变成语音

作者头像
用户7623498
发布2020-08-04 16:33:42
8.4K0
发布2020-08-04 16:33:42
举报

上一篇文章的留言中,薇薇同学提到了语音合成技术,这篇文章尝试对语音合成技术的技术原理进行介绍。

TTS技术(又称文语转换技术)隶属于语音合成,它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的口语输出的技术。本文将解释语音合成技术如何将文字一步步转化为输出的语音信号。

步骤1:语素(文本)转音素

【Motivation】

是不是可以直接用拼写作为模型的输入?如果是单词拼写与读音一致的语言(如拉丁语)这是可行的,但可惜大部分语言是不可行的,看下面的例子:

1.though (和 go 里面的 o 类似)

2.through (和 too 里面的 oo 类似)

3.cough (和 offer 里面的 off 类似)

4.rough (和 suffer 里面的的 uff 类似)

即使有相同的拼写,但发音却完全不同。如果TTS系统使用拼写作为其主要输入,会不可避免地会陷入困境。因此,需要使用稍微不同的表达方式,展示出更多的发音信息。

音素正是这样的一样东西,我们发出来的声音由不同音素单位组成,将因素组合在一起,我们几乎可以重复发出任何单词的发音。比如:

· White Room - [ W,AY1, T, ., R, UW1, M,. ]

· Crossroads - [ K,R, AO1, S, R, OW2, D, Z, . ]

上述例子源自于CMU的音素字典,其中,音素旁边的1,2等数字表示应该发重音的位置,句号表示音间停顿。

【ProblemDescription】

因此,语素转音素成为了步骤1的科学问题,具体如下:

· Input -"It was earky spring"

· Output -[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,. ]

【Solutions】

在大多数情况下,通过查询标准音素字典(比如CMU的音素字典),可以得到与输入文本一一对应的标签。

数据形式如下:

Input(X-逐字的)

[“It”, “was”,“early”, “spring”]

标签(Y)

[[IH1, T, .],[W, AA1, Z, .], [ER1, L, IY0, .], [S, P, R, IH1, NG, .]]

对于音素字典里没有包含的新词,吴恩达在百度带领团队开发的Deep Voice系统,基于神经网络建立了一个回退机制来预测音素。

步骤2:预测持续时间

【Motivation】

有了音素后,还需要估计在说话时,这些音素的发音时间。这也是一个有趣的问题,因为音素应该基于上下文来决定它们或长或短的持续时间。拿下面围绕音素“AH N”的单词举例:

·Unforgettable

· Fun

相比第二个单词,“AH N”显然需要在第一个单词里发更长的发音时间。

【ProblemDescription】

预测持续时间的问题描述如下:

· Input -[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,.]

· Output -[IH1 (0.1s), T(0.05s),. (0.01s),...]

【Solutions】

可以利用训练系统做到这一点,能够理解每个音素,并预测它们的发音时长。

一种有效的方法是使用分割模型,它将每个音素发声的场景进行匹配,从而获取其对应的音频分割片段和其在音频中的发声位置。

分割模型真正有趣的部分在于其预测的不是每个独立音素的位置,而实际是预测了每组音素对的位置。因为对独立单个的音素而言,给定语音对应某个音素的概率在语音的发声正中最大;而对成对的音素而言,概率最大值出现在两个音素交界点上,可以轻易的检测出两个音素发声的交界点,因此,使用音素对可以更简单地进行定位。

此外,这种模式是无监督的,因为我们事实上无法知道语音片段中语素对应的真正位置的标签信息。分割模型通过CTC loss模型来训练。

数据形式如下:

Input(X)

“It was early spring”的音频剪辑

对应的音素[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]

Outputs(Y)

音素对和它们在音频中的起始时间

[(IH1, T, 0:00), (T, ., 0:01), (., W,0:02), (W, AA1, 0:025), (NG, ., 0:035)]

步骤3:基频预测

【Motivation】

为了让发音尽可能地接近人声,还需要预测出每个音素的音调和语调。这一点从多方面考量,对以汉语为代表的语言尤为重要,因为这些语言中,相同的声音,读出不同的音调和重音具有完全不同的含义。预测每个音素的基频有助于发好每一个音素,因为频率会告诉系统,什么音素该发什么音高和什么音调。

此外,一些音素并不完全都发浊音,这意味着发这些音不需要每次都震动声带。例如,拿发音“ssss”和“zzzz”做例子,注意到前者是清音 (unvoiced),发音时声带没有振动,而后者是浊音 (voiced) ,发音时声带振动了。

【ProblemDescription】

基频预测的问题描述如下:

· Input -[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, ., R, Ih1, NG,.]

· Output -[IH1(140hz),T(142hz),. (Not voiced),...]

【Solutions】

基于步骤2中的分割模型不仅可以得到音素的持续时间数据对,也可以得到音素的基频数据对,将这些数据对作为训练数据,就可以通过模型训练来预测新音素的数据。

训练数据形式如下:

Input(X)

音素:[IH1, T,., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]

标签(Y)

每个音素的持续时间和基频,通过分割模型获取:[(IH, 0.05s, 140 hz), (T, 0.07s, 141 hz), … ]

步骤4:音频合成

【Motivation】

生成语音的最后一步是,合并音素、持续时间和频率,输出声音。

【ProblemDescription】

音频合成的问题描述如下:

·Input -[IH1(140hz,0.5s), T(142hz, 0.1s),. (Not voiced, 0.2s), W(140hz, 0.3s), ...]

·Output -录音

【Solutions】

直观的解决方案就是将之前的预测结果进行组合,合并音素、持续时间和频率,并转化成原始波形,输出声音。

这个过程现在也可以基于训练模型进行训练,以达到高度的声音还原,比如百度的Deep Voice和谷歌的WaveNet。

基于上述方法生成的原始波形,允许生成所有类型的声音,不同的口音、情绪、呼吸和人类语音的其他基本部分都能包含在内,这样的声音和人类的声音区别就非常小了。

【参考文章】

1、论文《Deep Voice:Real-time Neural Text-to-Speech》

2、雷锋网:吴恩达盛赞的Deep Voice详解教程,教你快速理解百度的语音合成原理(上)https://www.leiphone.com/news/201703/P1OEbKjpB0pHvHDA.html

3、雷锋网:吴恩达盛赞的Deep Voice详解教程,教你快速理解百度的语音合成原理(下)https://www.leiphone.com/news/201703/C6AxG3rt4kE9cnQN.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决策智能与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音合成
语音合成(Text To Speech,TTS)满足将文本转化成拟人化语音的需求,打通人机交互闭环。提供多场景、多语言的音色选择,支持 SSML 标记语言,支持自定义音量、语速等参数,让发音更专业、更符合场景需求。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档