今天给大家带来一篇看起来很无聊的文章。其实真的很无聊。TTS:在TEXT上谈论演讲。
只是今天师傅聊了一会之后,Chris却从来都不是一个只想一知半解的童鞋,所以,研究了一会,想要把这个看上去跟技术关联比较紧密的概念用最通俗的语言给大家说说,万一今后碰到了呢。
其实,最早接触,或者说就应该知道TTS应该是两年前。
那时候Chris去了家喻户晓的一家公司,那个步步高点读机哪里不会点哪里工作了一段时间,当时,接触到了内容制作方面的知识,而且亲自制作了几本英文教材书的内容。当时没有现在这样喜欢总结,所以,流于做事而做事,没有太多自己搭起来的知识框架,比较乱(虽然现在也没有知识框架也很乱,哈哈哈)
第一次听到TTS应该是在今年4月份的时候。
去了去哪儿,公司的交易平台TTS(Total solution)就是这个名字。说这个名字,估计大家还是蒙圈,整体解决方案?是什么意思?
了解过的童鞋都知道,去哪儿是最大的中文旅游搜索平台,顾名思义,要为用户提供价格比较,让用户选择最便宜、最便捷、最安全的服务和产品。那么一个重要的问题来了,全国各地有那么多酒店、机票、旅游产品代理商、官方旗舰店,如果都跟去哪儿合作的话,用户在去哪儿上面比较了价格,点击购买,一定要保证用户体验达到最佳,优化购买流程,保障其中的安全性和便捷性。于是,交易平台TTS(Total solution)整体解决方案这个系统就出来了,统一了所有第三方平台的管理,这个平台也加强了去哪儿对各大代理商的控制权。
说去哪儿这段,只是想告诉大家一个事实:很多事情,我们都知道,但是,没有上升到理论层次,或者说没有搭建自己的知识框架,所以,当说出tts的时候,就懵逼了,其实背后的事情,你是知道的。(其实,我也是后来才知道,所以,努力吧,骚年们~)
言归正传。
今天说的TTS是text to speech,从文本到语言,文本转语音,文本朗读,差不多是一个意思。在语音系统开发中经常要用到。
记得有一次,我打了一辆Uber,在车里,相信大家都听到过一句:“百度地图将持续为您导航”。当时,我就傻叉似的问了同行的伙伴,这个说话的女声,是专门找人录制的吗?(作为在百度待过的,感觉羞辱万分)。
先说tts的用途,让大家有点概念。
这里,又要涉及两个个概念:CTI和IVR。
CTI技术从计算机通信集成(Computer Telephony Integration)发展而来,最初是想将计算机技术应用到电话系统中,能够自动地对电话中的信令信息进行识别处理,并通过建立有关的话路连接,而向用户传送预定的录音文件、转接来话等。而到现在,CTI技术已经发展成“计算机电信集成”技术(Computer Telecommunication Integration),即其中的“T”已经发展成“Telecommunication”,这意味着目前的CTI技术不仅要处理传统的电话语音,而且要处理包括传真、电子邮件等其它形式的信息媒体。
在CTI技术中扮演重要角色的就是IVR技术。
IVR(Interactive Voice Response),互动式语音应答。这个概念会让大家对tts豁然开朗。
IVR:只须用电话即可进入服务中心,可以根据操作提示收听手机娱乐产品,也可以根据用户输入的内容播放有关的信息。最常见的业务有:语音点歌、语音聊天交友、客服中心。IVR另一重要应用是在呼叫中心中,分为前置和后置,前置IVR是语音先进入IVR处理,在无法解决客户问题的情况下才转入人工座席。后置IVR是指IVR与人工座席处在平衡的位置,人工无法满足客户入话时转IVR,主要是为了拖延时间或增值服务。
刚刚说的IVR也就是tts的一个代表性用途。
目前市场上的TTS很多,实现方式也各式各样,有的很昂贵,如科大讯飞,据说当初得到863计划的资助,有很高的技术;有的相对便宜,如捷通华声, InfoTalk;也有免费的,如微软的TTS产品。
这里贴一张TTS技术路线图:
图中划分出了三个部分:数据支持、TTS内核、外部应用。
数据支持部分包括:语法知识库、语音语料库、语法词典。这里,今天我跟师傅沟通了一下,然后看了我们公司的语料库后台,明白了,数据支持部分就是通过自然抓取和人工录入的方式,将需要发音的文字准备好。
外部使用自然就是用户客户端请求之后的响应了。
重点是TTS内核的三个部分:
文本分析:对输入文本进行语言学分析,逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。
语音合成:把处理好的文本所对应的单字或短语从语音合成库中提取,把语言学描述转化成言语波形。
韵律生成:是指语音合成系统所输出的语音的质量,一般从清晰度(或可懂度)、自然度和连贯性等方面进行主观评价。清晰度是正确听辨有意义词语的百分率;自然度用来评价合成语音音质是否接近人说话的声音,合成词语的语调是否自然; 连贯性用来评价合成语句是否流畅。
要合成出高质量的语音,所采用的算法是极为复杂的,因此对机器的要求也非常高。算法的复杂度决定了目前微机并发进行多通道TTS的系统容量。这一部分也是最难的。
相对于ASR(Automatic Speech Recognition,自动语音识别)来说,实现一个TTS产品所需要的技术难度不算大,在我看来也就是个力气活。
要是让我们来做一个能够把汉语句子朗读出来的TTS,我们会怎么做呢?
有一种最简单的TTS,就是把每个字都念出来,你会问,岂不要录制6千多个汉字的语音?幸运的是,汉语的音节很少,很多同音字。我们最多只是需要录制: 声母数×韵母数×4,(其实不是每个读音都有4声),这样算来,最多只需要录制几百个语音就可以了。
在合成的时候需要一张汉字对应拼音的对照表,汉字拼音输入法也依赖这张表,可以在网上找到,不过通常没有4声音调,大不了自己加上,呵呵,要不怎么说是力气活呢。
这样做出来的TTS效果也还可以,特别是朗读一些没有特别含义的如姓名,家庭住址,股票代码等汉语句子,听起来足够清晰。这要归功于我们伟大的母语通常都是单音节,从古代的时候开始,每个汉字就有一个词,表达一个意思。而且汉字不同于英语,英语里面很多连读,音调节奏变化很大,汉字就简单多了。
当然,你仍然要处理一些细节,比如多音字,把“银行”读成“yin xing”就不对了;再比如,标点符号的处理,数字、字母的处理,这些问题对于写过很多程序的你,当然不难了。
国内的一些语音板卡带的TTS,不管是卖钱的还是免费的,大体都是这样做出来的,也就是这样的效果。
如果要把TTS的效果弄好一点,再来点力气活,把基本的词录制成语音,如常见的两字词,四字成语等,再做个词库和语音库的对照表,每次需要合成时到词库里面找。这样以词为单位,比以字为单位,效果自然是好多了。当然,这里面还是有个技术,就是分词的技术,要把复杂的句子断成合理的词序列,也有点技术。这也要怪新文化那些先驱们,当初倡导白话文,引进西文的横排格式、标点符号的时候,没有引进西文中的空格分词。不过即使分词算法那么不高效,不那么准确,也问题不大,如前面所说,汉字是单音节词,把声音合起来,大体上不会有错。
当然,科大讯飞的力气活又干的多了些,据说已经进化到以常用句子为单位来录音了,大家可以想像,这要耗费更多的力气,换来更好的效果。
至于增加一些衔接处的“词料”,弄一些修饰性的音调,我认为是无关紧要的,对整体的效果改进不是太大。
市面上商品化TTS一般还支持粤语,请个粤语播音员录音,把上面的力气活重做一遍就是了。
再说句题外话,很多人觉得录音最好找电台、电视台的播音员,其实找个你周围的女同事来录制,只要吐字清晰就可以了。在某种情况下,寻常声音比字正腔圆的新闻联播来得可爱。
再来说说文本的标识,对于复杂文本,某些内容程序没有办法处理,需要标识出来。比如,单纯的数字“128”,是应该念成“一百二十八”还是“一二八”?解决办法通常是加入XML标注,如微软的TTS:"<context ID = "number_cardinal">128</context>"念成“一百二十八”,"<context ID = "number_digit">128</context>"将念成“一二八”。TTS引擎可以去解释这些标注。遗憾的是,语音XML标注并没有形成大家都完全认可的标准,基本上是各自一套。
再说说TTS应用编程,微软的TTS编程接口叫SAPI,是COM接口,开发起来还是有点麻烦,还好MSDN的网站上资料很全面。微软的TTS虽然免费,但其中文角色目前是个男声,声音略嫌混浊,感觉不爽。
国内一般的厂家提供API调用接口,相对比较简单,可以方便地嵌入应用程序中去。
商品化的TTS还有个并发许可限制,就是限制同时合成的并发线程数,我觉得这个限制用处不大。无论哪种TTS,都可以将文本文件转换成语音文件,供语音卡播放。大部分应用句子比较短小,一般不会超过100个汉字,合成的时间是非常短的,弄个线程专门负责合成,其它应用向该线程请求就是了,万一句子很长,把它分解成多个短句子就是了,播放的速度总是比合成的速度慢。
也很多应用是脱机合成,没有实时性要求,就更不必买多个许可了。
更多情况下,我们甚至没有必要购买TTS,比如语音开发中常见的费用催缴,拨通后播放:“尊敬的客户,您本月的费用是:212元”,前面部分对所有客户都一样,录一个语音文件就是了,而数字的合成是很简单的,你只要录制好10个数字语音,再加上十,百,千,万,再加上金钱的单位“元”。
虽然本文貌似跟产品运营没有什么关系(其实确实没有什么关系),但是,作为一名运营人员,作为一个年轻人,多学习,是好的,虽然可能明天就忘了。欢迎交流。