雜談TTS(Text to speech):文本轉(zhuǎn)語(yǔ)音
![](http://image.woshipm.com/wp-files/img/84.jpg)
其實(shí),最早接觸,或者說(shuō)就應(yīng)該知道TTS應(yīng)該是兩年前。
那時(shí)候Chris去了家喻戶曉的一家公司,那個(gè)步步高點(diǎn)讀機(jī)哪里不會(huì)點(diǎn)哪里工作了一段時(shí)間,當(dāng)時(shí),接觸到了內(nèi)容制作方面的知識(shí),而且親自制作了幾本英文教材書的內(nèi)容。當(dāng)時(shí)沒(méi)有現(xiàn)在這樣喜歡總結(jié),所以,流于做事而做事,沒(méi)有太多自己搭起來(lái)的知識(shí)框架,比較亂(雖然現(xiàn)在也沒(méi)有知識(shí)框架也很亂,哈哈哈)
第一次聽(tīng)到TTS應(yīng)該是在今年4月份的時(shí)候。
去了去哪兒,公司的交易平臺(tái)TTS(Total solution)就是這個(gè)名字。說(shuō)這個(gè)名字,估計(jì)大家還是蒙圈,整體解決方案?是什么意思?
了解過(guò)的童鞋都知道,去哪兒是最大的中文旅游搜索平臺(tái),顧名思義,要為用戶提供價(jià)格比較,讓用戶選擇最便宜、最便捷、最安全的服務(wù)和產(chǎn)品。那么一個(gè)重要的問(wèn)題來(lái)了,全國(guó)各地有那么多酒店、機(jī)票、旅游產(chǎn)品代理商、官方旗艦店,如果都跟去哪兒合作的話,用戶在去哪兒上面比較了價(jià)格,點(diǎn)擊購(gòu)買,一定要保證用戶體驗(yàn)達(dá)到最佳,優(yōu)化購(gòu)買流程,保障其中的安全性和便捷性。于是,交易平臺(tái)TTS(Total solution)整體解決方案這個(gè)系統(tǒng)就出來(lái)了,統(tǒng)一了所有第三方平臺(tái)的管理,這個(gè)平臺(tái)也加強(qiáng)了去哪兒對(duì)各大代理商的控制權(quán)。
說(shuō)去哪兒這段,只是想告訴大家一個(gè)事實(shí):很多事情,我們都知道,但是,沒(méi)有上升到理論層次,或者說(shuō)沒(méi)有搭建自己的知識(shí)框架,所以,當(dāng)說(shuō)出tts的時(shí)候,就懵逼了,其實(shí)背后的事情,你是知道的。(其實(shí),我也是后來(lái)才知道,所以,努力吧,騷年們~)
言歸正傳。
今天說(shuō)的TTS是text to speech,從文本到語(yǔ)言,文本轉(zhuǎn)語(yǔ)音,文本朗讀,差不多是一個(gè)意思。在語(yǔ)音系統(tǒng)開(kāi)發(fā)中經(jīng)常要用到。
記得有一次,我打了一輛Uber,在車?yán)铮嘈糯蠹叶悸?tīng)到過(guò)一句:“百度地圖將持續(xù)為您導(dǎo)航”。當(dāng)時(shí),我就問(wèn)了同行的伙伴,這個(gè)說(shuō)話的女聲,是專門找人錄制的嗎?(作為在百度待過(guò)的,感覺(jué)羞辱萬(wàn)分)。
先說(shuō)tts的用途,讓大家有點(diǎn)概念。
這里,又要涉及兩個(gè)個(gè)概念:CTI和IVR。
CTI技術(shù)從計(jì)算機(jī)通信集成(Computer Telephony Integration)發(fā)展而來(lái),最初是想將計(jì)算機(jī)技術(shù)應(yīng)用到電話系統(tǒng)中,能夠自動(dòng)地對(duì)電話中的信令信息進(jìn)行識(shí)別處理,并通過(guò)建立有關(guān)的話路連接,而向用戶傳送預(yù)定的錄音文件、轉(zhuǎn)接來(lái)話等。而到現(xiàn)在,CTI技術(shù)已經(jīng)發(fā)展成“計(jì)算機(jī)電信集成”技術(shù)(Computer Telecommunication Integration),即其中的“T”已經(jīng)發(fā)展成“Telecommunication”,這意味著目前的CTI技術(shù)不僅要處理傳統(tǒng)的電話語(yǔ)音,而且要處理包括傳真、電子郵件等其它形式的信息媒體。
在CTI技術(shù)中扮演重要角色的就是IVR技術(shù)。
IVR(Interactive Voice Response),互動(dòng)式語(yǔ)音應(yīng)答。這個(gè)概念會(huì)讓大家對(duì)tts豁然開(kāi)朗。
IVR:只須用電話即可進(jìn)入服務(wù)中心,可以根據(jù)操作提示收聽(tīng)手機(jī)娛樂(lè)產(chǎn)品,也可以根據(jù)用戶輸入的內(nèi)容播放有關(guān)的信息。最常見(jiàn)的業(yè)務(wù)有:語(yǔ)音點(diǎn)歌、語(yǔ)音聊天交友、客服中心。IVR另一重要應(yīng)用是在呼叫中心中,分為前置和后置,前置IVR是語(yǔ)音先進(jìn)入IVR處理,在無(wú)法解決客戶問(wèn)題的情況下才轉(zhuǎn)入人工座席。后置IVR是指IVR與人工座席處在平衡的位置,人工無(wú)法滿足客戶入話時(shí)轉(zhuǎn)IVR,主要是為了拖延時(shí)間或增值服務(wù)。
剛剛說(shuō)的IVR也就是tts的一個(gè)代表性用途。
目前市場(chǎng)上的TTS很多,實(shí)現(xiàn)方式也各式各樣,有的很昂貴,如科大訊飛,據(jù)說(shuō)當(dāng)初得到863計(jì)劃的資助,有很高的技術(shù);有的相對(duì)便宜,如捷通華聲, InfoTalk;也有免費(fèi)的,如微軟的TTS產(chǎn)品。
這里貼一張TTS技術(shù)路線圖:
圖中劃分出了三個(gè)部分:數(shù)據(jù)支持、TTS內(nèi)核、外部應(yīng)用。
數(shù)據(jù)支持部分包括:語(yǔ)法知識(shí)庫(kù)、語(yǔ)音語(yǔ)料庫(kù)、語(yǔ)法詞典。這里,今天我跟師傅溝通了一下,然后看了我們公司的語(yǔ)料庫(kù)后臺(tái),明白了,數(shù)據(jù)支持部分就是通過(guò)自然抓取和人工錄入的方式,將需要發(fā)音的文字準(zhǔn)備好。
外部使用自然就是用戶客戶端請(qǐng)求之后的響應(yīng)了。
重點(diǎn)是TTS內(nèi)核的三個(gè)部分:
文本分析:對(duì)輸入文本進(jìn)行語(yǔ)言學(xué)分析,逐句進(jìn)行詞匯的、語(yǔ)法的和語(yǔ)義的分析,以確定句子的低層結(jié)構(gòu)和每個(gè)字的音素的組成,包括文本的斷句、字詞切分、多音字的處理、數(shù)字的處理、縮略語(yǔ)的處理等。
語(yǔ)音合成:把處理好的文本所對(duì)應(yīng)的單字或短語(yǔ)從語(yǔ)音合成庫(kù)中提取,把語(yǔ)言學(xué)描述轉(zhuǎn)化成言語(yǔ)波形。
韻律生成:是指語(yǔ)音合成系統(tǒng)所輸出的語(yǔ)音的質(zhì)量,一般從清晰度(或可懂度)、自然度和連貫性等方面進(jìn)行主觀評(píng)價(jià)。清晰度是正確聽(tīng)辨有意義詞語(yǔ)的百分率;自然度用來(lái)評(píng)價(jià)合成語(yǔ)音音質(zhì)是否接近人說(shuō)話的聲音,合成詞語(yǔ)的語(yǔ)調(diào)是否自然; 連貫性用來(lái)評(píng)價(jià)合成語(yǔ)句是否流暢。
要合成出高質(zhì)量的語(yǔ)音,所采用的算法是極為復(fù)雜的,因此對(duì)機(jī)器的要求也非常高。算法的復(fù)雜度決定了目前微機(jī)并發(fā)進(jìn)行多通道TTS的系統(tǒng)容量。這一部分也是最難的。
相對(duì)于ASR(Automatic Speech Recognition,自動(dòng)語(yǔ)音識(shí)別)來(lái)說(shuō),實(shí)現(xiàn)一個(gè)TTS產(chǎn)品所需要的技術(shù)難度不算大,在我看來(lái)也就是個(gè)力氣活。
要是讓我們來(lái)做一個(gè)能夠把漢語(yǔ)句子朗讀出來(lái)的TTS,我們會(huì)怎么做呢?
有一種最簡(jiǎn)單的TTS,就是把每個(gè)字都念出來(lái),你會(huì)問(wèn),豈不要錄制6千多個(gè)漢字的語(yǔ)音?幸運(yùn)的是,漢語(yǔ)的音節(jié)很少,很多同音字。我們最多只是需要錄制: 聲母數(shù)×韻母數(shù)×4,(其實(shí)不是每個(gè)讀音都有4聲),這樣算來(lái),最多只需要錄制幾百個(gè)語(yǔ)音就可以了。
在合成的時(shí)候需要一張漢字對(duì)應(yīng)拼音的對(duì)照表,漢字拼音輸入法也依賴這張表,可以在網(wǎng)上找到,不過(guò)通常沒(méi)有4聲音調(diào),大不了自己加上,呵呵,要不怎么說(shuō)是力氣活呢。
這樣做出來(lái)的TTS效果也還可以,特別是朗讀一些沒(méi)有特別含義的如姓名,家庭住址,股票代碼等漢語(yǔ)句子,聽(tīng)起來(lái)足夠清晰。這要?dú)w功于我們偉大的母語(yǔ)通常都是單音節(jié),從古代的時(shí)候開(kāi)始,每個(gè)漢字就有一個(gè)詞,表達(dá)一個(gè)意思。而且漢字不同于英語(yǔ),英語(yǔ)里面很多連讀,音調(diào)節(jié)奏變化很大,漢字就簡(jiǎn)單多了。
當(dāng)然,你仍然要處理一些細(xì)節(jié),比如多音字,把“銀行”讀成“yin xing”就不對(duì)了;再比如,標(biāo)點(diǎn)符號(hào)的處理,數(shù)字、字母的處理,這些問(wèn)題對(duì)于寫過(guò)很多程序的你,當(dāng)然不難了。
國(guó)內(nèi)的一些語(yǔ)音板卡帶的TTS,不管是賣錢的還是免費(fèi)的,大體都是這樣做出來(lái)的,也就是這樣的效果。
如果要把TTS的效果弄好一點(diǎn),再來(lái)點(diǎn)力氣活,把基本的詞錄制成語(yǔ)音,如常見(jiàn)的兩字詞,四字成語(yǔ)等,再做個(gè)詞庫(kù)和語(yǔ)音庫(kù)的對(duì)照表,每次需要合成時(shí)到詞庫(kù)里面找。這樣以詞為單位,比以字為單位,效果自然是好多了。當(dāng)然,這里面還是有個(gè)技術(shù),就是分詞的技術(shù),要把復(fù)雜的句子斷成合理的詞序列,也有點(diǎn)技術(shù)。這也要怪新文化那些先驅(qū)們,當(dāng)初倡導(dǎo)白話文,引進(jìn)西文的橫排格式、標(biāo)點(diǎn)符號(hào)的時(shí)候,沒(méi)有引進(jìn)西文中的空格分詞。不過(guò)即使分詞算法那么不高效,不那么準(zhǔn)確,也問(wèn)題不大,如前面所說(shuō),漢字是單音節(jié)詞,把聲音合起來(lái),大體上不會(huì)有錯(cuò)。
當(dāng)然,科大訊飛的力氣活又干的多了些,據(jù)說(shuō)已經(jīng)進(jìn)化到以常用句子為單位來(lái)錄音了,大家可以想像,這要耗費(fèi)更多的力氣,換來(lái)更好的效果。
至于增加一些銜接處的“詞料”,弄一些修飾性的音調(diào),我認(rèn)為是無(wú)關(guān)緊要的,對(duì)整體的效果改進(jìn)不是太大。
市面上商品化TTS一般還支持粵語(yǔ),請(qǐng)個(gè)粵語(yǔ)播音員錄音,把上面的力氣活重做一遍就是了。
再說(shuō)句題外話,很多人覺(jué)得錄音最好找電臺(tái)、電視臺(tái)的播音員,其實(shí)找個(gè)你周圍的女同事來(lái)錄制,只要吐字清晰就可以了。在某種情況下,尋常聲音比字正腔圓的新聞聯(lián)播來(lái)得可愛(ài)。
再來(lái)說(shuō)說(shuō)文本的標(biāo)識(shí),對(duì)于復(fù)雜文本,某些內(nèi)容程序沒(méi)有辦法處理,需要標(biāo)識(shí)出來(lái)。比如,單純的數(shù)字“128”,是應(yīng)該念成“一百二十八”還是“一二八”?解決辦法通常是加入XML標(biāo)注,如微軟的TTS:”<context ID = “number_cardinal”>128</context>”念成“一百二十八”,”<context ID = “number_digit”>128</context>”將念成“一二八”。TTS引擎可以去解釋這些標(biāo)注。遺憾的是,語(yǔ)音XML標(biāo)注并沒(méi)有形成大家都完全認(rèn)可的標(biāo)準(zhǔn),基本上是各自一套。
再說(shuō)說(shuō)TTS應(yīng)用編程,微軟的TTS編程接口叫SAPI,是COM接口,開(kāi)發(fā)起來(lái)還是有點(diǎn)麻煩,還好MSDN的網(wǎng)站上資料很全面。微軟的TTS雖然免費(fèi),但其中文角色目前是個(gè)男聲,聲音略嫌混濁,感覺(jué)不爽。
國(guó)內(nèi)一般的廠家提供API調(diào)用接口,相對(duì)比較簡(jiǎn)單,可以方便地嵌入應(yīng)用程序中去。
商品化的TTS還有個(gè)并發(fā)許可限制,就是限制同時(shí)合成的并發(fā)線程數(shù),我覺(jué)得這個(gè)限制用處不大。無(wú)論哪種TTS,都可以將文本文件轉(zhuǎn)換成語(yǔ)音文件,供語(yǔ)音卡播放。大部分應(yīng)用句子比較短小,一般不會(huì)超過(guò)100個(gè)漢字,合成的時(shí)間是非常短的,弄個(gè)線程專門負(fù)責(zé)合成,其它應(yīng)用向該線程請(qǐng)求就是了,萬(wàn)一句子很長(zhǎng),把它分解成多個(gè)短句子就是了,播放的速度總是比合成的速度慢。
也很多應(yīng)用是脫機(jī)合成,沒(méi)有實(shí)時(shí)性要求,就更不必買多個(gè)許可了。
更多情況下,我們甚至沒(méi)有必要購(gòu)買TTS,比如語(yǔ)音開(kāi)發(fā)中常見(jiàn)的費(fèi)用催繳,撥通后播放:“尊敬的客戶,您本月的費(fèi)用是:212元”,前面部分對(duì)所有客戶都一樣,錄一個(gè)語(yǔ)音文件就是了,而數(shù)字的合成是很簡(jiǎn)單的,你只要錄制好10個(gè)數(shù)字語(yǔ)音,再加上十,百,千,萬(wàn),再加上金錢的單位“元”。
作者:Chris,微信公眾號(hào):產(chǎn)品運(yùn)營(yíng)(pm-2020),一個(gè)產(chǎn)品運(yùn)營(yíng)菜鳥。曾在百度、美團(tuán)、去哪兒從事產(chǎn)品運(yùn)營(yíng)工作。希望將點(diǎn)滴積累記錄成文字,給需要的你作為參考。
本文由 @Chris 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理?,未經(jīng)許可,禁止轉(zhuǎn)載。
這一篇真的沒(méi)看進(jìn)去······
文章寫的太啰嗦 廢話連篇
這算是一篇科普類的文章了,今后會(huì)注意精簡(jiǎn)的。