SRGS是W3C定義的一種標準,在MRCP v2的規(guī)定中沒有太多具體的規(guī)定,但是在語音識別服務器的設置方面需要其相關參數(shù)。因此,筆者認為有必要做一些具體的介紹。SRGS用來支持應用開發(fā)人員通過設定的單詞或單詞模式的語法結(jié)構,這個語法結(jié)構能夠被語音識別引擎聽或者識別。SRGS支持兩種語法格式,它們分別是XML格式和ABNF格式。在我們介紹的語法格式中,我們會重點介紹XML格式,因為在MRCP協(xié)議中我們主要還是使用XML格式。關于ABNF格式,用戶可以參考相關的rfc5234做進一步了解。在本章節(jié)中,我們將會介紹SRGS的基本語法,語義說明和一些關聯(lián)處理機制。
1、語音識別的語法是通過對語言限定來支持語音識別的處理。語音識別語法通過語言限定可以減少句子內(nèi)容的不確定性,從而更好地支持語音識別。正式的語法都是由一系列規(guī)則和一些標識,象征符號通過恰當?shù)呐帕薪M成而成。
SRGS有兩種不同的語法結(jié)構。一種是遞歸狀態(tài),表示了一種語法上下文的語法結(jié)構。另外一種則不是遞歸狀態(tài),表示了一種有限狀態(tài)或規(guī)則語法結(jié)構。語音識別的核心Hidden Markov Model(HMM)本身就是一個有限狀態(tài)機(參考上圖),F(xiàn)在的語音識別引擎可以支持從由少量單詞組成的語法也可以支持復雜的上百單詞組成的語法結(jié)構。語音識別的準確率以及處理速度和語法的復雜程度和語法的困惑度相關。換句話說,如果增加了單詞或語法結(jié)構,或增加了語法的困惑度會影響語音識別引擎的執(zhí)行效率,也會降低語音識別的準確率和處理的速度。我們剛才也提到了困惑度的概念,困惑度簡單來說就是一個語法結(jié)構中平均支持的分支節(jié)點,如果結(jié)束符越多,需要判斷的點會越多。因此,如果開發(fā)人員需要完成一套高質(zhì)量的語法必須有非常大的投入,前期測試和后期維護工作,F(xiàn)在讓我們了解一些關于SRGS中主要的語法結(jié)構和其應用。
2、首先,我們介紹一下SRGS的文件結(jié)構。SRGS文件支持XML格式,通過媒體類型application/srgs+xml來定義。以下是SRGS支持的屬性:
其基本的語法格式為:
xmlns="http://www.w3.org/2001/06/grammar"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/06/grammar
http://www.w3.org/TR/speech-grammar/grammar.xsd"
mode="voice"
xml:lang="en-GB"
root="example">
yes
這里,所有的SRGS文件標簽都已開始。讀者需要注意到是mode的屬性。默認屬性是voice,也可以是DTMF,不支持兩種類型混合使用。如果是vocie表示輸入的值是語音;如果是DTMF則表示輸入的值是DTMF。但是,在一些復雜配置環(huán)境中,語音識別引擎可以同時激活兩種模式支持。在未來的講座中,我們會涉及這些兩種模式的使用方式。
3、語法包含一個或多個規(guī)則定義。每個規(guī)則定義由一個,名稱和ID構成。我們稱每個規(guī)則定義的內(nèi)容為規(guī)則擴展。一個規(guī)則擴展將匹配完整語句中的部分內(nèi)容。一個簡單的規(guī)則擴展由按序排列的標志構成。一個單詞加一個空格就是一個標志單位。
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza">
在以上的示例中,語音發(fā)音必須全部完整匹配標志的順序格式。SRGS語法同樣可以支持添加一個或者多個要素來增加語法的可閱讀性。這里,我們僅介紹了一個非常簡單,定義非常嚴格的規(guī)則擴展。事實上,SRGS可以實現(xiàn)非常強大的語法擴展,我們在后續(xù)的章節(jié)中會逐步介紹。
4、在規(guī)則擴展中可以支持多個可選項的設置。SRGS使用和- 要素來表達。每個
中可以包含多個item規(guī)則擴展。
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza">
I want a hot
pizza
以上可選項支持了非常靈活的語法結(jié)構。它可以匹配:
I want a hot pepperoni pizza
I want a hot vegetarian pizza
I want a hot cheese pizza
高級語法中可以對不同的選項設置不同的權重。權重值等于1表示無權重,小于1表示負面的偏好,大于1表示正面的偏好。在上面的語法中,我們可以添加權重來表示特定的優(yōu)先級設置,發(fā)生幾率高于其他選項設置:
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza">
I want a hot
pizza
5、SRGS的規(guī)則擴展中可以支持一個參照規(guī)則來引入其他的規(guī)則,通過要素加以說明。規(guī)則參照的主要目的是重用規(guī)則擴展。其用法規(guī)則如下:
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza">
可參照的規(guī)則通過URI屬性的值來定義。當然,它也可以通過一個完整的URL來定義:。
6、SRGS通過預留的名稱定義了三種特別的規(guī)則,它們分別是:NULL,VOID 和GARBAGE。其作用表示:
NULL,如果講話者沒有說任何語句,自動匹配為Null。
VOID,在排列順序中是一個相反的效果,它說明順序從來沒有匹配。
GARBAGE,則會一直匹配,直到下一個標志,語法擴展或結(jié)束輸入。
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza">
在以上的語法中,任何語句內(nèi)容都可以匹配此語法規(guī)則(介于hot和pizza之間的輸入內(nèi)容)。例如,“I want a hot something or other pizza”就可以匹配以上語法規(guī)則。
7、SRGS提供了一個結(jié)構支持規(guī)則擴展重復。通過一個重復的要素設置可以增加語法的緊湊性。大家可以想象一下,如果在語法中需要定義一個數(shù)值長度的話,可能需要從0到9這樣的設置,我們使用,則需要很多次重復的語句,語句就會顯得非常冗長。以下是repeat 屬性的設置語法:
repeat 表示的取值范圍如下:
0-1表示包含的規(guī)則開展內(nèi)容是可選的
0-表示至少包含零次,一次或多次規(guī)則擴展
1-表示至少發(fā)生一次匹配
以下就是一個使用repeat的示例,表示允許用戶說“very” 三次。
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza">
SRGS的語法也可以支持在語音通信領域中用戶經(jīng)常使用的DTMF按鍵。很多時候,用戶通過DTMF輸入來確認一些系統(tǒng)信息,例如密碼或其他語音選項設置。SRGS的DTMF和通信領域中的DTMF按鍵有所不同,通信領域的可以接受0-9數(shù)字,ABCD等其他字符設置,而SRGS支持0-9數(shù)字,語法結(jié)構也比較簡單,以下是一個可以接受4位數(shù)DTMF的語法格式:
xmlns="http://www.w3.org/2001/06/grammar"
mode="dtmf"
root="digits">
8、在SRGS語法提供了對語義解釋(SISR)的兩種方式,它們可以通過tag-format來獲得支持。很多情況下,我們使用不同的表達方式來解釋同一種結(jié)果。其中一種是semantics/1.0-literals的方式,這里無論用戶以哪種方式說yes/no,都會返回yes/no的結(jié)果,其數(shù)值結(jié)構是ECMAScript 的數(shù)據(jù)格式。
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="yesno"
tag-format="semantics/1.0-literals">
另外一種是使用語義腳本語言,通過tag-format-semantics/1.0獲得支持。tag中的內(nèi)容被看作是ECMAScript 代碼。ECMAScript是一種腳本語言,類似于我們現(xiàn)在通常用到的JavaScript。
xmlns="http://www.w3.org/2001/06/grammar"
mode="voice"
xml:lang="en-GB"
root="pizza"
tag-format="semantics/1.0">
I want a
pizza
這里,我們假設發(fā)音是”I want a large vegetarian pizza“,那么返回ECMAScript 腳本對象的兩個屬性是size 和 sort類型,其值分別是large和2。其取值變量遵循的是ECMAScript 標準。腳本的對象數(shù)值是:
{
size: "large",
sort: 2
}
這個標識符表示了腳本的數(shù)據(jù)結(jié)構,語音應用程序?qū)⑵鋽?shù)值存儲為數(shù)據(jù)庫的數(shù)據(jù)以便將來使用。semantics/1.0還支持了meta 數(shù)據(jù)的表達方式等靈活的處理方式,我們這里不再做更多介紹。具體的實現(xiàn)方式建議大家參考相關的SISR技術資料。另外,語義腳本語言支持的是ECMScript, 關于腳本語言的使用方式和變量取值等內(nèi)容,讀者可以參考我們的鏈接。
9、在本章節(jié)中,我們重點介紹了SRGS技術細節(jié)中幾個主要的概念和要素使用方式以及其相關的語法結(jié)構。首先,筆者對語音識別語法的背景做了簡單介紹,然后對一些關鍵語法做了細致的介紹,包括的關鍵語法為可選項設置,重復語法設置,預留的三種特殊設置,語義腳本結(jié)構(SISR),DTMF設置等設置語法。這些關鍵語法可以幫助優(yōu)化語法文件的結(jié)構,增加其靈活性和緊湊性,從而使其語法規(guī)則更接近于人類的自然語言。
在接下來的章節(jié)中,筆者會介紹自然語言語義標識語言(NLSML)的語法結(jié)構和其使用方式。
參考資料:
https://tools.ietf.org/rfc/rfc5234.txt
http://cs229.stanford.edu/section/cs229-hmm.pdf
關于SISR標準技術:https://www.w3.org/TR/semantic-interpretation/
http://www.ecma-international.org/publications/standards/Ecma-327.htm
HMM介紹-A Tutorial on Hidden Markov Models and
Selected Applications in Speech Recognition
unimrcp-MRCP協(xié)議學習分享,QQ群號:208136295
關注微信公眾號:asterisk-cn,獲得有價值的行業(yè)分享
freepbx 技術論壇:www.ippbx.org.cn
Asterisk, freepbx技術文檔: www.freepbx.org.cn
歐米(Omni)智能客服解決方案
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com