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

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

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

三個事件消息:

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

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

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

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

hotwords 識別的定時器設置:

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

相應的消息流程如下:


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

相應的響應消息流程如下:


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


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

GET-RESULT相應的消息流程如下:



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

以下是相應的消息流程:

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

INTERPRET的消息處理流程如下:



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

以下是相應的消息流程:





第二個介紹的請求是ENROLLMENT-ROLLBACK。MRCP客戶端發(fā)起一個ENROLLMENT-ROLLBACK 請求回滾到上一個請求。此功能可以對句中不適合部分進行處理排除。這里要求丟棄上一次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ā)起,用來結束注冊會話的一個method,可以對接受的注冊短語進行確認或丟棄短語。這個method通常是識別資源返回的RECOGNITION-COMPLETE事件中包含NLSML,并且攜帶了 重復數(shù)量設置,然后MRCP客戶端發(fā)起END-PHRASE-ENROLLMENT來結束注冊會話。如果要中斷短語注冊的話,在END-PHRASE-ENROLLMENT的請求中設置Abort-Phrase-Enrollment置為true。如果在START-PHRASE-ENROLLMENT請求中出現(xiàn)了Save-Best-Waveform 頭,并且此頭設置為true,那么在返回的END-PHRASE-ENROLLMENT事件中會包含一個Waveform-URI來表示一個經過訓練的短語錄音存放路徑。這些文件可以支持MRCP客戶端選擇類型,用戶可以根據相應的個人的語法讀出短語。因為END-PHRASE-ENROLLMENT 的消息流程也比較簡單,我們這里不再做過多解釋,用戶可以參考說明的例子來學習。
修改短語是第四個請求方式。MODIFY-PHRASE用來支持對個人語法中已注冊的短語中的某些參數(shù)屬性進行修改。可修改的屬性包括:Phrase-ID,Phrase-NL,和Weight。可修改的短語通過其Phrase-ID來確認它的唯一性,通過頭域值設置修改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來表示,個人語法的設定通過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é)的內容,我們首先介紹了語音識別資源的請求處理方式,事件和headers,并且列出了它們的使用方式和屬性設置。然后,筆者重點介紹了語音識別資源的六大methods和語法注冊時使用的五個methods。因為篇幅的關系,筆者把語法注冊的methods 歸納在一個話題中,以便方便讀者能夠結合這些相關的method充分了解注冊語法的這些請求處理方式。筆者相信,通過本章節(jié)關于語音識別資源的請求處理的概念介紹結合圖例和消息流程,讀者會進一步了解語音識別的消息流程處理。
在下一個章節(jié)中,我們重點介紹語音識別資源中的事件和相關的headers參數(shù)設置。




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