gzncpcc

人生如逆旅,我亦是行人

0%

语音合成技术

一个自己想实现的功能:定制个性化的语音(TTS)服务

语音合成技术原理

语音合成(text to speech),简称TTS。将文字转化为语音的一种技术,类似于人类的嘴巴,通过不同的音色说出想表达的内容。将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的汉语口语输出的技术。

TTS的基本组成:

(1)文本分析

对输入文本进行语言学分析(主要模拟人对自然语言的理解过程),逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。使计算机对输入的文本能完全理解,并给出后两部分所需要的各种发音提示。

(2)韵律建模

为合成语音规划出音段特征,如音高、音长和音强等,使合成语音能正确表达语意,听起来更加自然。

(3)语音合成(核心模块)

根据韵律建模的结果,把处理好的文本所对应的单字或短语的语音基元从语音合成库中提取,利用特定的语音合成技术对语音基元进行韵律特性的调整和修改,最终合成出符合要求的语音。

TTS的工作原理如下:

例如:你输入了:“今天吃饭了没有啊?”,想让电脑读出来。那么我们会怎么做呢?

(1)最简单的TTS:

就是电脑把每一个字分开,对于“我”字,就通过查询把“我”字对应的语音基元读出来,这样同样方式处理剩余的字,那么这句话就读出来了。但是很明显,这样读出来的语音肯定不够自然。

另外,每个字对应的语音基元哪里来呢?人工苦力活,就是请人把每个汉字读出来,然后录下来。你会问,岂不要录制6千多个汉字的语音?幸运的是,汉语的音节很少,很多同音字。所以我们最多只是需要录制: 声母数×韵母数×4,(其实不是每个读音都有4声),这样算来,最多只需要录制几百个语音就可以了。当然,也有非人工的方法,如eSpeak使用共振峰合成方法,这可以使提供的语言文件非常小,但是缺点是不如采用基于人录音的语料库的声音平滑自然。另外,在合成的时候需要一张汉字对应拼音的对照表(实际上就是字典),汉字拼音输入法也依赖这张表。

上面单字朗读做出来的TTS效果也还可以,特别是朗读一些没有特别含义的如姓名,家庭住址,股票代码等汉语句子,听起来足够清晰。这要归功于我们伟大的母语通常都是单音节,从古代的时候开始,每个汉字就有一个词,表达一个意思。而且汉字不同于英语,英语里面很多连读,音调节奏变化很大,汉字就简单多了。

当然,你仍然要处理一些细节,比如多音字,把“银行”读成“yin xing”就不对了;再比如,标点符号的处理,数字、字母的处理。

(2)稍微复杂点的TTS:

如果要把TTS的效果弄好一点,再来点力气活,把基本的词录制成语音,如常见的两字词,四字成语等,再做个词库和语音库的对照表,每次需要合成时到词库里面找。这样以词为单位,比以字为单位,效果自然是好多了。当然,这就涉及到分词的技术,要把复杂的句子断成合理的词序列。另外,为了追求更好的效果,还有进化到以常用句子为单位来录音了。当然,这就得需要更大的工作量了,因为你需要读单字、词、成语、句子等等。而且语音数据也会庞大起来。

再来说说文本的标识,对于复杂文本,某些内容程序没有办法处理,需要标识出来。比如,单纯的数字“128”,是应该念成“一百二十八”还是“一二八”?解决办法通常是加入XML标注,如微软的TTS:”128“念成“一百二十八”,”128“将念成“一二八”。TTS引擎可以去解释这些标注。遗憾的是,语音XML标注并没有形成大家都完全认可的标准,基本上是各自一套。

一些开源项目框架和应用

用于 Text2Speech 任务的高性能深度学习模型
coqui TTS
WaveRNN
微软开放API

其中微软的xiaoxiao晓晓、F201表现是真滴好。。。

坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道