配置 MRCPv2 語音辨識器服務
除了使用 IBM® Speech to Text,另一種替代作法是配置 Voice Gateway部署,以便透過 MRCPv2 連線來連接協力廠商的語音辨識器服務。
連接至 MRCPv2 辨識器
-
在您的機器上,移至您所複製之
sample.voice.gateway儲存庫所在的目錄,並開啟mrcp/目錄,其中含有下列檔案:docker-compose.yml- 具有 MRCPv2 之 Voice Gateway 的基本配置tenantConfiguration.json- JSON 配置檔
-
開啟
unimrcpConfig/unimrcpclient.xml配置檔。在<server-ip>欄位中,指定 MRCPv2 伺服器的 IP 位址。在<ext-ip>欄位中,指定 Media Relay 儲存器執行所在之機器的外部 IP 位址。- 如需可以配置的完整欄位清單,請參閱 UniMRCP 配置檔。
-
在
docker-compose.yml檔中,將unimrcpclient.xml檔裝載到 Media Relay 儲存器。 -
在
tenantConfiguration.json檔中,您可以指定將 MRCPv2 提供者用於語音辨識,作法是將stt配置providerType參數值設為mrcpv2。您可以包含更多的配置欄位(例如:辨識器文法、MRCPv2 訊息標頭欄位),以進一步自訂您的部署。請參閱 MRCPv2 辨識器配置和程式設計模型。"stt": { ... "providerType": "mrcpv2" ... }請謹記:如果您沒有指定
providerType,依預設,Voice Gateway 會使用watson參數。 -
若要快速著手進行,可以從您複製的
sample.voice.gatewayGitHub 儲存庫,匯入mrcp/sample-mrcp-conversation.json檔。匯入之後,在tenantConfiguration.json檔中,指定您的 Watson Assistant 認證和工作區 ID。若想進一步瞭解如何匯入 JSON 檔案,請參閱配置 {{site.data.keyword.conversation}} 工作區。 -
在您完成配置之後,請執行下列指令,以建立並啟動儲存器。
docker-compose up
範例:使用 MRCPv2 的單一提供者配置
在下列範例中,配置了單一提供者,以使用 MRCPv2 連線來連接語音辨識器,而不使用 Speech to Text 服務實例。同樣地,會將單一和多重提供者配置的配置內容格式化,但是它們會使用不同的根層次內容。例如,單租戶提供者格式只需要 providerType,而多重提供者配置在根層次還包含了 providerSelectionPolicy 和 providers。
{
"stt": {
"providerType": "mrcpv2",
"config": {
"mrcpv2ProfileID": "MRCP #1",
"recognizeHeaders": {
"Speech-Language": "en-US",
"Confidence-Threshold": 0.9
},
"recognizeBody": {
"contentType": "text/uri",
"body": "builtin:grammar/digits?language=en-us\nbuiltin:grammar/boolean?language=en-us"
}
},
"bargeInResume": true
}
}
範例:使用 MRCPv2 的多重提供者配置
在下列範例中,多重提供者的格式化 JSON 配置檔中顯示了一個提供者。不像單一提供者配置,多重提供者配置在根層次還有 providerSelectionPolicy 和 providers。
{
"stt": {
"providerSelectionPolicy" : "sequential",
"providers": [
{
"name" : "mrcp-primary",
"providerType": "mrcpv2",
"config": {
"mrcpv2ProfileID": "MRCP #1",
"recognizeHeaders": {
"Speech-Language": "en-US",
"Confidence-Threshold": 0.9,
},
"recognizeBody": {
"contentType": "text/uri",
"body": "builtin:grammar/digits?language=en-us\nbuiltin:grammar/boolean?language=en-us"
}
},
"bargeInResume": true
}
]
}
}
|
使用 MRCPv2 辨識器配置和文法來設計程式
您可以在 Voice Gateway 配置中使用配置變數和參數,來充分控制 MRCPv2 RECOGNIZE 要求的標頭和內文。
Speech to Text MRCPv2 配置變數的變更
在您配置 MRCPv2 語音辨識器時,Voice Gateway 最上層的 Speech to Text 配置會具有同等的值。
| 參數 | 值 | 說明 |
|---|---|---|
providerType |
字串 | 定義語音提供者的類型,可以是 mrcpv2 或 watson。預設值為 watson。 |
credentials |
認證 | 如果您使用 Speech to Text,且混合使用數個提供者,就必須指定。若為 MRCPv2 辨識器服務,則不需指定。 |
config |
WatsonSpeechToTextConfig/MrcpRecognizerConfig |
必要。針對指定的文字轉語音提供者,定義配置。 |
connectionTimeout |
浮點 | 選用。Voice Gateway 在與 Speech to Text 或辨識器服務建立 Socket 連線時,要等待的秒數。如果超過時間,Voice Gateway 會重新嘗試連接 Speech to Text 或辨識器服務。如果仍無法連到服務,則通話失敗。1.0.0.5 版及更新版本。 |
requestTimeout |
浮點 | 選用。Voice Gateway 在與 Speech to Text 或辨識器服務建立語音辨識階段作業時,要等待的秒數。如果超過時間,Voice Gateway 會重新嘗試連接 Speech to Text 或辨識器服務。如果仍無法連到服務,則通話失敗。1.0.0.5 版及更新版本。 |
providers[] |
字串 | 選用。語音提供者清單。 |
MRCPv2 辨識器的配置參數
以下是 mrcpv2 提供者配置專用的配置參數。
| 參數 | 值 | 說明 |
|---|---|---|
mrcpv2ProfileID |
字串 | MRCPv2 用戶端的設定檔 ID。原始 XML 配置文件可在 MRCPv2 用戶端配置手冊中找到。 |
recognizeHeaders |
JSON 物件 | 作為 MRCPv2 RECOGNIZE 要求標頭的名稱/值配對集合。 |
recognizeBody |
JSON 物件 | 指定辨識要求的內容內文。
|
文法
針對 MRCPv2 進行程式設計時,通常意味著會使用文法。MRCPv2 語音辨識器會使用文法,來指定它要接聽的單字和型樣。一般而言,您可以使用行內文法、外部文法和內建文法,來指定用於語音辨識的文法。
行內文法
行內文法會明確定義在 Voice Gateway 的 vgwActSetSTTConfig 動作標籤中。若為發話端的簡短回應,就適合使用這些文法。例如,從 Watson Assistant 對話中,您可以透過 vgwActSetSTTConfig 動作標籤,來指定行內文法。
下列範例顯示一個方法,以使用 XML 格式(而非 JSON 格式)來指定文法。body 參數的值以單行出現,引號 " 則用來跳出,以符合配置的 JSON 格式。此外,在這個範例中,會指定 mergeOnce,以指示 Voice Gateway 使用指定給某一回交談的配置。
{
"vgwAction": {
"command": "vgwActSetSTTConfig",
"parameters": {
"updateMethod": "mergeOnce",
"config": {
"recognizeHeaders": {
"No-Input-Timeout": 10000
},
"recognizeBody": {
"contentType": "application/srgs+xml",
"body": "<grammar version=\"1.0\" xml:lang=\"en-US\" root=\"digits\"> <rule id=\"confirmations\"> <one-of> <item> affirmative </item> <item> nah </item> <item> no </item> <item> nope </item> <item> yeah </item> <item> yep </item> <item> yes </item> <item> yup </item> <item> fine </item> <item> negative </item> <item> OK </item> <item> sure </item> </one-of> </rule> </grammar>"
}
}
}
}
}
外部文法
外部文法是指指定於外部檔案中的文法,並可利用外部 URI 參照來參照。您可以採清單形式將外部文法包含在 Watson Assistant 對話中。
在下列範例中,recognizeBody 將內容類型指定為 text/uri-list。此內容類型會指示MRCPv2 辨識器從所提供的 URI 清單(定義於 body 欄位中)提取文法。
{
"vgwAction": {
"command": "vgwActSetSTTConfig",
"parameters": {
"updateMethod": "mergeOnce",
"config": {
"recognizeBody": {
"body": ["http://example-grammar-server.com/grammars/basic_grammar.xml", "file://grammars/example_file_system_grammar.xml"],
"contentType": "text/uri-list"
}
}
}
}
}
內建文法
有些 MRCPv2 辨識器支援 built-in 文法,通常是指支援各種一般使用者輸入(例如:確認或數字)的文法。如果要使用 built-in 文法,您可以指定它們(如同外部文法一樣)。例如,您可以指定 MRCPv2 辨識器對於數字,是否要有內建文法。
在下列範例中,指定的文法 builtin:grammar/digits?language=en-US;length=9 指出發話端輸入了數字,且口述數字的長度必須符合 9。
{
"vgwAction": {
"command": "vgwActSetSTTConfig",
"parameters": {
"updateMethod": "mergeOnce",
"config": {
"recognizeBody": {
"body": ["builtin:grammar/digits?language=en-US;length=9"],
"contentType": "text/uri-list"
}
}
}
}
}
處理辨識器結果
如果辨識順利完成,會以信任度最高的結果作為 Watson Assistant 各回交談的輸入。此外,會將 Voice Gateway 的 vgwSTTResponse 狀態變數設為產生的 JSON,這會包含其他替代方案清單,以及來自伺服器的原始回應。下列範例顯示,將 MRCPv2 辨識器的原始回應設為 vgwSTTResponse 環境定義狀態變數的 mrcpv2RecognizerResult 欄位。
{
"vgwSTTResponse": {
"warnings": "",
"error": "",
"mrcpv2RecognizerResult": "<?xml version='1.0'?><result><interpretation grammar=\"https:\/\/raw.githubusercontent.com\/WASdev\/sample.voice.gateway\/54e662f18e67c6935e8c8b815b89b57014a37494\/mrcp\/grammar-samples\/store-hours_query.xml\" confidence=\"0.76\"><input mode=\"speech\">Are you open on Sunday<\/input><instance><SWI_literal>Are you open on Sunday<\/SWI_literal><SWI_grammarName>https:\/\/raw.githubusercontent.com\/WASdev\/sample.voice.gateway\/54e662f18e67c6935e8c8b815b89b57014a37494\/mrcp\/grammar-samples\/store-hours_query.xml<\/SWI_grammarName><SWI_meaning>{SWI_literal:Are you open on Sunday}<\/SWI_meaning><\/instance><\/interpretation><interpretation grammar=\"https:\/\/raw.githubusercontent.com\/WASdev\/sample.voice.gateway\/54e662f18e67c6935e8c8b815b89b57014a37494\/mrcp\/grammar-samples\/store-hours_query.xml\" confidence=\"0.29\"><input mode=\"speech\">Are you open on Monday<\/input><instance><SWI_literal>Are you open on Monday<\/SWI_literal><SWI_grammarName>https:\/\/raw.githubusercontent.com\/WASdev\/sample.voice.gateway\/54e662f18e67c6935e8c8b815b89b57014a37494\/mrcp\/grammar-samples\/store-hours_query.xml<\/SWI_grammarName><SWI_meaning>{SWI_literal:Are you open on Monday}<\/SWI_meaning><\/instance><\/interpretation><\/result>",
"results": [{
"final": true,
"alternatives": [{
"transcript": "Are you open on Sunday",
"confidence": "0.76"
}, {
"transcript": "Are you open on Monday",
"confidence": "0.29"
}]
}]
}
}
在不成功的辨識結果中,Voice Gateway 會將關鍵字當成使用者輸入 (vgwMrcpRecognitionUnsuccessful) 來傳送,以通知 Watson Assistant 辨識不成功。在範例中,是將 vgwMrcpRecognizerResponse 狀態變數設為 MRCPv2 辨識器的回應。
{
"context": {
"vgwMrcpRecognizerResponse": {
"headers": {
"Completion-Cause": "001 no-input-timeout"
},
"body": "<body of the recognition result>"
}
}
}
交談開發人員可以檢查 MRCPv2 辨識器的回應 vgwMrcpRecognizerResponse,以洞察辨識要求所發生的情況。如需完整的辨識完成原因清單,您可以探究 MRCPv2 RFC。