您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何分析DuerOS中的SSML應用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在對話式AI系統中,語音交互是主要的輸入輸出方式。對語音輸出而言,有兩種主要的方法,一種是事先制作好音頻,然后根據用戶的請求,播放音頻;另一種是通過語音合成中的TTS技術,將文本轉化為語音。在很多情況下,制作的音頻往往要比語音合成的用戶體驗要好,因為人的聲音中有更多的“色彩”,語音語調中可以有更多的情緒。
但是,預先制作的工作量往往較大,而且由于預制的確定性,導致輸出內容的動態性較弱。按需定制,動態輸出正是TTS的強大之處。那么,如何讓TTS的表達更加生動呢?在對話式AI系統DuerOS中, 內容的生動化表達是通過SSML 實現的。
SSML是一種標準的,基于XML的標記語言,使用這些標識來命令語音合成器/服務把文本(輸入)轉化成可讀的輸出結果。簡單來說,就是把帶有一定文字標識格式的文本語言轉化語音輸出結果。
SSML設計的最初目的就是為了幫助開發人員提高合成結果的內容,通過格式化和標準化的標記方式來控制語音輸出的各種屬性,例如發音,音量等參數設置。因此,SSML設計的幾個關鍵要素如下:
一致性:提供可預測的語音輸出控制,支持不同的語音合成服務部署
兼容性:支持W3C的標準,包括但不僅限于VoiceXML,ACSS和 SMIL
通用性:支持各種語音內容
國際化:支持各種語言的語音輸出
自動化和可讀性:支持自動化生成和手寫文本格式,支持良好的可讀性
可部署性:能夠支持目前現有的技術,盡量減少可選功能數量。
支持SSML的TTS系統(語音合成處理器)將負責將文檔呈現為語音輸出,并使用標記中包含的信息按照預期以音頻形式呈現文檔,主要原理如下:
1)XML解析:XML解析器用于從傳入的文本文檔中提取文檔樹和內容。此步驟中獲得的結構、標記和屬性會影響以下每個步驟。
2)結構分析:文檔的結構會影響文檔的閱讀方式。例如,有一些常見的與段落和句子相關的口語模式。
3)文本規范化:所有書面語言都有特殊的結構,需要將書面形式轉換為口語形式。文本規范化是執行此轉換的合成處理器的自動過程。例如,當文檔中出現“$200”時,可以將其稱為“200美元”。到這一步結束時,要說的文本已經完全轉換為token,token的具體構成細節是特定于語言的。標記通常用空格分隔,通常是單詞。 一般地,SSML中的標記不能跨越其他的標記。
4)文本到音位的轉換: 一旦語音合成處理器確定了要說的token集合,就必須為每個token派生發音。發音可以很方便地描述為音素序列,它是語言中用來區分一個詞和另一個詞的聲音單位。每種語言都有一個特定的音位集。
5)韻律分析:韻律是語音輸出的一組特征,包括音調(也稱為語調或旋律)、時間(或節奏)、停頓、說話速度、對單詞的強調和許多其他特征。韻律分析,對于使語言聽起來自然,正確傳達語音中的意義是非常重要的。
6)波形生成: 語音合成處理器利用音位和韻律信息生成音頻波形。此處理步驟有許多方法,因此可能存在相當大的特定于處理器的變化。
SSML是一種標記語言,所以必須具備一定的文件結構。所有的SSML文件都需要的Speak元素標簽入口,更多關于SSML的語法格式,可以參考W3C官方文檔,以下是關于SSML主要標簽的說明。
SSML具有非常強大的功能支持,比較典型的功能就是錄音文件播放功能。其具體的實現方式是通過一個<audio>元素標簽提供的URL路徑對語音文件進行播放。
下面是W3C規范中給出的一個示例:
<?xml version="1.0"?>
<speak version="1.1" xmlns="http://www.w3.org/2001/10/synthesis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
http://www.w3.org/TR/speech-synthesis11/synthesis.xsd"
xml:lang="en-US">
<!-- Empty element -->
Please say your name after the tone. <audio src="beep.wav"/>
<!-- Container element with alternative text -->
<audio src="prompt.au">What city do you want to fly from?</audio>
<audio src="welcome.wav">
<emphasis>Welcome</emphasis> to the Voice Portal.
</audio>
</speak>
在DuerOS的技能開發中,DuerOS會將技能返回的response消息里面的文本信息按照一定的規則轉化成語音信息進行播放(可以參考面向接口/協議?看DuerOS的技能開發,用JavaScript打造AI應用-從Nodejs SDK 看DuerOS的技能開發以及從Java SDK看DuerOS的技能開發)。轉化后的語音有著與預期相同的特征,如語調、語速、停頓等都相同。
DuerOS支持基礎標簽和擴展標簽兩種。基礎標簽里的所有標簽都是SSML標準標簽,相當于SSML標簽的子集。擴展標簽指DuerOS使用標準SSML語言定制的標簽。
基礎標簽目前包括6種:
speak:根標簽
audio:根據url合成已有音頻
say-as:設置數字、符號等的讀法
sub:替換目標單詞
silence:設置靜音,在文本播報的開頭或者結尾增加靜音片段,最大10s
phoneme:多音字注音
對于audio標簽而言,音頻以服務器可以訪問的的地址給出,目前支持16K采樣和24K采樣,16bit,單聲道,44字節頭的wave格式文件。出于性能的約束,要求必須將相應的音頻文件上傳到百度云bos平臺,使用bos提供的地址。單個請求最大限制3個并列的audio資源,單個audio資源大小限制為3M。
使用前需要前把音頻轉換為支持的格式,推薦使用ffmpeg。命令參考如下:
ffmpeg -i <input-file> -acodec pcm_s16le -b:a 16k -ar 16000 -ac 1 -flags bitexact <output-file.wav>
audio標簽支持單標簽和雙標簽,如果是雙標簽的話,當音頻無法訪問時,將合成嵌套文本。
擴展標簽目前包括4種:
background:設置背景聲
say-as: 在屬性interpret-as加入兩個新值,僅對英文有效
poem:設置詩詞,屬性值 “wuyan”代表五言詩;“qiyan”代表七言詩;“songci”代表宋詞
space: 在所包含文本的空格處生成停頓
其中background標簽與audio 標簽具有類似的性質,要求必須將相應的音頻文件上傳到百度云bos平臺,使用bos提供的資源url地址。
DuerOS 中的SSML實現是W3C規范的一個子集,是應用過程中有著如下的約束:
audio標簽不支持嵌套audio/background(內層標簽不生效);
background/標簽不支持嵌套自身,內層標簽不生效;
sub/say-as標簽不支持嵌套其他任何標簽,會引發解析錯誤,導致標簽按字母朗讀;
非漢字文本內部出現標簽影響語義轉換,建議使用漢字形式請求;
&和<符號在XML中為非法字符,使用前需進行轉義操作,分別為&和<,另外,>(>)、”(")、’(')也建議使用前進行轉義
請求文本總長度(不包含SSML標簽)應少于1024字節
需要注意的是,文本的長度是按照GBK編碼計算的,文本的內容是UTF8編碼,在不使用SSML 的時候,文本長度可達4k。
關于如何分析DuerOS中的SSML應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。