MRCP語音識別資源針對語音數(shù)據(jù)和DTMF事件進(jìn)行分析,然后通過媒體會話來進(jìn)行傳輸,最后返回文本形式的處理結(jié)果。MRCP協(xié)議將語音識別資源的類型分成兩種:dtmfrecog和speechrecog。前者只能支持DTMF的識別,因此語法也僅限于DTMF語法的支持;后者則支持語音流數(shù)據(jù)的識別和DTMF識別,因此其語法支持語音語法和DTMF語法兩種。另外,在今天的講座中,我們會涉及其語法的使用方式(SRGS和NLSML),我們在以前的章節(jié)中對這些語法也做過一些介紹,讀者可以查閱歷史文檔掌握這些必要的知識。
1、在前面的部分我們已經(jīng)提到,dtmfrecog僅提供對DTMF事件的支持,因此它可以歸并到speechrecog中。dtmfrecog提供了speechrecog的功能所支持的一部分功能子集,支持了DTMF輸入和相應(yīng)的DTMF語法。DTMF數(shù)字值則是通過RTP事件或DTMF tone分析獲得。語音識別資源可以在以下其中一種模式下工作:
- normal mode recognition
- hotword mode recognition
normal mode recognition 顧名思義是一種正常工作模式,它支持的是一種正常工作的模式,可以匹配整個語音句子或DTMF字符,然后和語法進(jìn)行對比,返回RECOGNITION-COMPLETE,這個事件包含成功或失敗的狀態(tài)消息(,例如,001 no-match,無輸入匹配)。Hot word mode recognition工作的模式有所不同,它僅對一些熱詞感興趣,會查詢一些短語和DTMF的排序,并且忽略不匹配的部分。如果MRCP客戶端取消了識別請求,或者No-Input-Timeout或Recognition-Timeout定時器超時的話,它僅完成成功匹配的語法。因此,熱詞模式結(jié)束時從來不會返回Completion-Cause碼 001 no-match。熱詞模式可以使用在很多的場景中。簡單的例子就是電話轉(zhuǎn)接或我們在電銷場景中的價格或者地址等關(guān)鍵詞的處理。如果在監(jiān)聽時,聽到說話人需要返回主語音導(dǎo)航菜單時,我們可以立即返回主菜單。如果在電銷場景中,我們聽到客戶提到價格時,我們可以打斷然后查詢相關(guān)的價格,然后返回價格數(shù)據(jù)。另外,語音識別資源還可以支持第三種的工作模式,那就是基于文本的"interpretation" 模式。文本語句通過控制會話(不是媒體會話)發(fā)送到語音識別資源,通過語法匹配,然后返回識別結(jié)果并且攜帶語義解析。此功能可以支持很多場景,例如,它可以支持創(chuàng)建一個基于文本的工具來測試語法的覆蓋情況和修正語義解析的語法標(biāo)簽。
語音識別資源可以支持六個請求消息和三個事件消息。Voice enrolment 又進(jìn)一步增加了五個請求方法來支持創(chuàng)建和管理注冊的語法。

語音識別資源支持的methods 消息:

另外五個注冊的語音語法methods:

三個事件消息:

語音識別資源的狀態(tài)機圖例:

音識別狀態(tài)機是由MRCP客戶端來發(fā)起請求,媒體資源端則會生成返回事件消息。以上示例是一個非常簡單的狀態(tài)機使用場景,它對注冊語法進(jìn)行訓(xùn)練處理。這里的起始會話和結(jié)束會話不會改變資源的狀態(tài)。通過RECOGNIZE 觸發(fā)觸發(fā)事件后,狀態(tài)機中每個被捕捉的句子的結(jié)果狀態(tài)會從空閑狀態(tài)切換到正在識別狀態(tài),當(dāng)觸發(fā) RECOGNITION-COMPLETE事件時,則又返回到空閑狀態(tài)。
語音識別資源支持了標(biāo)準(zhǔn)的頭值和更多對語法注冊支持的頭值。標(biāo)準(zhǔn)的headers參數(shù)設(shè)置(三十三個headers):

支持語法注冊的headers(支持十二個enrollment-header ):

2、筆者在上面的部分重點概括介紹了語音識別資源的請求方法,事件和一些相關(guān)的headers,F(xiàn)在我們開始介紹語音識別資源具體的請求方式。RECOGNIZE是我們第一個介紹的請求方式。
簡單來說,RECOGNIZE請求是啟動識別流程,緊接著為輸入的語音流進(jìn)行匹配,然后設(shè)定匹配的詞語的語法。識別結(jié)果會包含在RECOGNITION-COMPLETE 的事件中。Hotword發(fā)識別模式會在Recognition-Mode頭值中進(jìn)行設(shè)置。默認(rèn)設(shè)置是normal模式。RECOGNIZE請求中可以包含一些頭值來調(diào)整相關(guān)的請求,這些可調(diào)整的請求頭包括語言,安全閥值,和定時器設(shè)置等。
語音識別資源可以支持對RECOGNIZE 請求進(jìn)行隊列管理,也可以進(jìn)行單獨運行而不進(jìn)入隊列中。具體的操作上通過Cancel-If-Queue 頭的設(shè)置來進(jìn)行設(shè)置。因為Cancel-If-Queue牽扯了多種處理狀態(tài),流程處理的響應(yīng)都完全不同,我們這里不做過多解釋。用戶可以參考RFC標(biāo)準(zhǔn)做進(jìn)一步的了解。
MRCP協(xié)議根據(jù)不同的normal或hotword識別模式的不同,定義了不同的定時器來控制識別處理。normal 識別模式的定時器設(shè)置:

hotwords 識別的定時器設(shè)置:

現(xiàn)在,讓我們看一下RECOGNIZE 請求的圖例:

相應(yīng)的消息流程如下:


3、DEFINE-GRAMMAR method是請求語音識別資源訪問消息體中語法進(jìn)行訪問,提取和編譯。MRCP客戶端不一定需要發(fā)起DEFINE-GRAMMAR 請求執(zhí)行識別,相反的,它可以給客戶端提供一個選擇來準(zhǔn)備處理比較大的語法文件。DEFINE-GRAMMAR請求的響應(yīng)消息總是攜帶COMPLETE的響應(yīng)。成功的響應(yīng)消息返回200 Success和一個頭消息000 success。如果返回錯誤的話,則會收到407 Method 或 Operation Failed,并且攜帶Completion-Cause 頭。以下是一個DEFINE-GRAMMAR 的示例:

相應(yīng)的響應(yīng)消息流程如下:


4、START-INPUT-TIMERS 是對定時器設(shè)置的請求方式。在MRCP v1的版本中這個method稱之為RECOGNITION-START-TIMERS。 默認(rèn)環(huán)境下,當(dāng)識別資源啟動以后,No-Input-Timeout 定時器就會自動啟動,如果在超時之前,沒有檢測到任何的輸入的話,識別就會結(jié)束,并且返回RECOGNITION-COMPLETE消息,消息中攜帶Completion-Cause,此值設(shè)置為002 no input-timeout。以下示例是一個START-INPUT-TIMERS的請求示例:
START-INPUT-TIMERS 具體的消息處理流程如下:


5、當(dāng)識別請求成功完成后,識別結(jié)果會通過RECOGNITION-COMPLETE事件中的消息體返回到客戶端,并且識別引擎進(jìn)入到已識別狀態(tài)。返回結(jié)果可依賴于識別參數(shù)設(shè)置,例如安全閥值和N-Best-Length-List等。這里,我們可以使用GET-RESULT method來對進(jìn)入識別狀態(tài)的結(jié)果重新計算,或通過GET-RESULT 請求,根據(jù)識別設(shè)置參數(shù)返回相應(yīng)的結(jié)果。例如,MRCP客戶端可以發(fā)起一個GET-RESULT 請求,設(shè)置了較低的安全閥值(Confidence-Threshold )和較高的N-Best-List-Length 來獲得一個假設(shè)值。以下是一個GET-RESULT的圖例:

GET-RESULT相應(yīng)的消息流程如下:



6、STOP method可以支持對IN-PROGRESS 狀態(tài)(活動的狀態(tài))或PENDING(隊列中的)請求執(zhí)行停止。如果在STOP請求中忽略了Active-Request-Id-List 頭的話,說明活動狀態(tài)的請求已經(jīng)停止,在隊列中的識別請求已經(jīng)被移除。如果STOP請求成功結(jié)束了一個或多個活動的識別請求或隊列中的識別請求,返回到客戶端的響應(yīng)消息是200 Success,并且包含一個Active-Request-Id-List 頭,這個頭值中包含了停止的請求ID列表。注意,這里服務(wù)器端也不會發(fā)送RECOGNITION-COMPLETE 事件。如果沒有結(jié)束的識別請求,同樣,客戶端也會收到200 Success,但是會忽略掉Active-Request-Id-List 頭。有時,我們可以在STOP method的Active-Request-Id-List 頭中指定一個請求ID來停止這個識別請求,這個識別請求可能是在當(dāng)前IN-PROGRESS狀態(tài)或PENDING隊列中的識別請求。如果當(dāng)前活動的識別請求被停止后,則可以處理下一個在PENDING隊列中請求。以下是一個STOP 示例圖:

以下是相應(yīng)的消息流程:

7、INTERPRET method 的使用方式和RECOGNIZE 的method 非常相似,不同之處在于,RECOGNIZE是支持語音輸入的,但是這里的輸入是完全基于文本格式的形式,通過Interpret-Text 頭來設(shè)定這個文本格式。其返回的解析結(jié)果包含在INTERPRETATION-COMPLETE的事件消息體中。這里,讀者一定要注意,不像RECONGIZE method,它的請求不能支持隊列設(shè)置。如果有一個INTERPRET在處理狀態(tài)時,再次發(fā)起另外一個INTERPRET會導(dǎo)致返回一個402 Method not valid in this state。所以,讀者一定要注意此method的使用方式。以下是一個INTERPRET的圖例:

INTERPRET的消息處理流程如下:



8、在本部分的介紹中,筆者將介紹關(guān)于Voice enrolment 的幾個method方式。
這里,我們首先介紹一下START-PHRASE-ENROLLMENT。
START-PHRASE-ENROLLMENT 的目的是支持MRCP客戶端啟動一個注冊會話(這里,翻譯成enrolment session,也可能有其他作者的翻譯名稱)。注冊會話的功能在于對每個獨立的說話人添加一個特別的短語,形成一個個人的語法。在注冊會話的生命周期內(nèi),MRCP客戶端會調(diào)用RECOGNIZE 請求,并且攜帶了Enroll-Utterance,這里,此頭值設(shè)置為true。每一次對RECOGINE調(diào)用都會捕捉單個的短語例句,并且執(zhí)行注冊流程,最后以NLSML的文件格式通過RECOGNITION-COMPLETE進(jìn)行傳輸。一般情況下,識別資源需要重復(fù)多次來訓(xùn)練短語。MRCP 客戶端通過調(diào)用END-PHRASE-ENROLLMENT來結(jié)束此注冊會話。如果要配置一個注冊會話,在START-PHRASE-ENROLLMENT的請求中需要設(shè)定多個頭域。這些頭域包括Personal-Grammar-URI(獨立說話人的個人語法設(shè)置),Phrase-ID(短語唯一的ID)和Phrase-NL(短語支持的自然語言或語義結(jié)果)。以下圖例說明了START-PHRASE-ENROLLMENT的流程:

以下是相應(yīng)的消息流程:





第二個介紹的請求是ENROLLMENT-ROLLBACK。MRCP客戶端發(fā)起一個ENROLLMENT-ROLLBACK 請求回滾到上一個請求。此功能可以對句中不適合部分進(jìn)行處理排除。這里要求丟棄上一次RECOGNIZE請求中捕獲的語音。以下是一個ENROLLMENT-ROLLBACK圖例:

具體的消息流程如下:
F1(client→speechrecog):
MRCP/2.0 83 ENROLLMENT-ROLLBACK 70000
Channel-Identifier:23af1e13@speechrecog
F2(speechrecog→client):
MRCP/2.0 76 70000 200 COMPLETE
Channel-Identifier:23af1e13@speechrecog
這里,我們繼續(xù)討論第三個請求方式。END-PHRASE-ENROLLMENT是由MRCP客戶端發(fā)起,用來結(jié)束注冊會話的一個method,可以對接受的注冊短語進(jìn)行確認(rèn)或丟棄短語。這個method通常是識別資源返回的RECOGNITION-COMPLETE事件中包含NLSML,并且攜帶了 重復(fù)數(shù)量設(shè)置,然后MRCP客戶端發(fā)起END-PHRASE-ENROLLMENT來結(jié)束注冊會話。如果要中斷短語注冊的話,在END-PHRASE-ENROLLMENT的請求中設(shè)置Abort-Phrase-Enrollment置為true。如果在START-PHRASE-ENROLLMENT請求中出現(xiàn)了Save-Best-Waveform 頭,并且此頭設(shè)置為true,那么在返回的END-PHRASE-ENROLLMENT事件中會包含一個Waveform-URI來表示一個經(jīng)過訓(xùn)練的短語錄音存放路徑。這些文件可以支持MRCP客戶端選擇類型,用戶可以根據(jù)相應(yīng)的個人的語法讀出短語。因為END-PHRASE-ENROLLMENT 的消息流程也比較簡單,我們這里不再做過多解釋,用戶可以參考說明的例子來學(xué)習(xí)。
修改短語是第四個請求方式。MODIFY-PHRASE用來支持對個人語法中已注冊的短語中的某些參數(shù)屬性進(jìn)行修改。可修改的屬性包括:Phrase-ID,Phrase-NL,和Weight?尚薷牡亩陶Z通過其Phrase-ID來確認(rèn)它的唯一性,通過頭域值設(shè)置修改Phrase-NL或Weight。如果是ID被修改的話,客戶端會生成一個新的New-Phrase-ID頭來表示這是新的短語ID。以下圖例表示了MODIFY-PHRASE 流程:

具體的MODIFY-PHRASE消息流程如下:
F1(client→speechrecog):
MRCP/2.0 133 MODIFY-PHRASE 90000
Channel-Identifier:23af1e13@speechrecog
Phrase-ID:Name01
New-Phrase-ID:Name03
Weight:0.5
F2(speechrecog→client):
MRCP/2.0 76 90000 200 COMPLETE
Channel-Identifier:23af1e13@speechrecog
刪除短語是第五個請求方式。DELETE-PHRASE method是客戶端用來從個人語法中刪除一個短語ID,通過Phrase-ID來表示,個人語法的設(shè)定通過Personal-Grammar-URI來表示。以下是一個刪除短語的圖例:

其具體的刪除短語的消息流程如下:
F1(client→speechrecog):
MRCP/2.0 162 DELETE-PHRASE100000
Channel-Identifier:23af1e13@speechrecog
Personal-Grammar-URI:http://enrolledgrammars/user01gram02.dat
Phrase-ID:Name01
F2(speechrecog→client):
MRCP/2.0 77 100000 200 COMPLETE
Channel-Identifier:23af1e13@speechrecog
回顧本章節(jié)的內(nèi)容,我們首先介紹了語音識別資源的請求處理方式,事件和headers,并且列出了它們的使用方式和屬性設(shè)置。然后,筆者重點介紹了語音識別資源的六大methods和語法注冊時使用的五個methods。因為篇幅的關(guān)系,筆者把語法注冊的methods 歸納在一個話題中,以便方便讀者能夠結(jié)合這些相關(guān)的method充分了解注冊語法的這些請求處理方式。筆者相信,通過本章節(jié)關(guān)于語音識別資源的請求處理的概念介紹結(jié)合圖例和消息流程,讀者會進(jìn)一步了解語音識別的消息流程處理。
在下一個章節(jié)中,我們重點介紹語音識別資源中的事件和相關(guān)的headers參數(shù)設(shè)置。




unimrcp-MRCP協(xié)議學(xué)習(xí)分享,QQ群號:208136295
關(guān)注微信公眾號:asterisk-cn,獲得有價值的行業(yè)分享
freepbx 技術(shù)論壇:www.ippbx.org.cn
Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
歐米(Omni)智能客服解決方案
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
參考:
https://tools.ietf.org/html/rfc6787