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

3 評論 23848 瀏覽 82 收藏 14 分鐘

其實,最早接觸,或者說就應該知道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技術路線圖:

304171078608411611

圖中劃分出了三個部分:數據支持、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個數字語音,再加上十,百,千,萬,再加上金錢的單位“元”。

 

作者:Chris,微信公眾號:產品運營(pm-2020),一個產品運營菜鳥。曾在百度、美團、去哪兒從事產品運營工作。希望將點滴積累記錄成文字,給需要的你作為參考。

本文由 @Chris 原創發布于人人都是產品經理?,未經許可,禁止轉載。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 這一篇真的沒看進去······

    來自廣東 回復
  2. 文章寫的太啰嗦 廢話連篇

    來自天津 回復
    1. 這算是一篇科普類的文章了,今后會注意精簡的。

      來自湖南 回復