雜談TTS(Text to speech):文本轉(zhuǎn)語音

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