什麼是模式比對?
模式比對可以自訂為將模式意圖和 PatternMatchingModel
中的實體群組在一起。 使用此群組,可以存取其他進階的實體類型,以利讓您的意圖辨識更精確。
如需支援的地區設定,請參閱這裡。
模式與確切片語
有兩種類型的字串用於模式比對器中:「確切片語」和「模式」。 請務必了解其間的差異。
確切片語是一串您想要比對的確切文字。 例如:
"Take me to floor seven"。
模式是包含所標示實體的片語。 實體是以 "{}" 標示,來定義模式內的位置,而 "{}" 內的文字則指的是實體識別碼。 在上述範例中,您可能會想要在名為 "floorName" 的實體中擷取樓層名稱。 您可以使用如下模式進行此操作:
"Take me to floor {floorName}"
PatternMatchingModel 的大綱
PatternMatchingModel
包含用來參考該模型的識別碼、PatternMatchingIntent
物件的清單,以及 PatternMatchingEntity
物件的清單。
模式比對意圖
PatternMatchingIntent
物件代表將用來在 IntentRecognizer
中評估語音或文字的片語集合。 如果片語相符,則傳回的 IntentRecognitionResult
具有相符的 PatternMatchingIntent
識別碼。
模式比對實體
PatternMatchingEntity
物件代表個別實體參考及其對應的屬性,這些屬性會指示 IntentRecognizer
如何加以處理。 所有 PatternMatchingEntity
物件都必須有一個出現在片語中的識別碼,否則就不會比對。
實體命名限制
包含 ':' 字元的實體名稱會為實體指派角色。
實體類型
任何實體
「任何」實體會比對出現在該位置中的任何文字,而不論其包含的文字。 如果我們考慮使用模式 "Take me to floor {floorName}" 的上述範例,則使用者可能會說出如下的話:
"Take me to the floor parking 2"
在此情況下,"floorName" 實體會比對出 "parking 2"。
這些實體是惰性比對,其會嘗試比對儘可能少的字組,除非字組出現在語句的開頭或結尾。 請考慮下列模式:
"Take me to the floor {floorName1} {floorName2}"
在此情況下,語句 "Take me to the floor parking 2" 會比對出 floorName1 = "parking" 和 floorName2 = "2",並將其傳回。
處理額外的擷取文字可能很棘手。 也許使用者一直在說話,而語句所擷取的不只是其命令。 "Take me to floor parking 2 yes Janice I heard about that let's"。 在此情況下,floorName1 將是正確的,但 floorName2 將是 = "2 yes Janice I heard about that let's"。 請務必留意實體的比對方式,並對您的案例做出適當的調整。 Any 實體類型是最基本且最不精確的比對類型。
清單實體
「清單」實體是由片語清單所組成,這些片語將引導引擎如何對其進行比對。 「清單」實體有兩種模式。 「嚴格」和「模糊」。
假設我們有一份電梯的樓層清單。 由於我們正在處理語音,因此也會新增適用於語彙格式的項目。
"1"、"2"、"3"、"lobby"、"ground floor"、"one"、"two"、"three"
當實體屬於「清單」類型的識別碼用於「嚴格」模式時,只在位置中的文字出現在清單中時,引擎才會比對。
"take me to floor one" 符合。
"take me to floor 5" 不符合。
請務必注意,不只是實體,實體意圖也不會比對。
當「清單」類型識別碼的實體用於「模糊」模式時,引擎仍會比對意圖,而且會傳回出現在語句中位置的文字,即使其不在清單中也一樣。 此比對在幕後很有用,可協助做出更好的語音辨識。
警告
模糊清單實體已實作,但未整合到語音辨識組件中。 因此,它們會比對實體,但無法改善語音辨識。
預建整數實體
當您預期會在該位置取得整數時,系統會使用 "PrebuiltInteger" 實體。 如果找不到整數,則其不會比對意圖。 傳回值是數字的字串表示法。
有效比對和傳回值的範例
"Two thousand one hundred and fifty-five" -> "2155"
"first" -> "1"
"a" -> "1"
"four oh seven one" -> "4071"
若有無法辨識為數字的文字,則實體和意圖將不會比對。
無效比對的範例
"the third"
"first floor I think"
"second plus three"
"thirty-three and anyways"
考慮我們的電梯範例。
"Take me to floor {floorName}"
如果 "floorName" 是預建整數實體,則預期是位置內的任何文字都會表示整數。 在這裡,樓層號碼將妥善地比對,但具有 "lobby" 這類名稱的樓層將不會比對。
將必要和選擇性項目分組
在模式中,允許包含語句中可能存在的單字或實體。 這對於限定詞特別有用,例如 "the"、"a" 或 "an"。 這與硬式編碼的許多組合沒有功能上的差異,但有助於減少所需的模式數目。 使用 "[" 和 "]" 表示選擇性項目。 使用 "(" 和 ")" 表示必要項目。 您可以將多個項目包含在相同的群組中,並使用 '|' 字元加以分隔。
若要了解這如何減少所需的模式數目,請考量下列集合:
"Take me to {floorName}"
"Take me the {floorName}"
"Take me {floorName}"
"Take me to {floorName} please"
"Take me the {floorName} please"
"Take me {floorName} please"
"Bring me {floorName} please"
"Bring me to {floorName} please"
這些全都可以縮減為具有群組和選擇性項目的單一模式。 首先,可以將 "to" 和 "the" 分組在一起作為選擇性字組,像是:"[to | the]",其次,也可以讓 "please" 成為選擇性項目。 最後,我們可以視需要將 "bring" 和 "take" 分組。
"(Bring | Take) me [to | the] {floorName} [please]"
此外也可包含選擇性實體。 假設停車場有多個樓層,而您想要比對 {floorName} 前面的那個字。 您可以使用如下模式進行此操作:
"Take me to [{floorType}] {floorName}"
如果您可能使用關鍵字辨識和隨按即說功能,選擇性項目也會很有用。 這表示關鍵字有時會存在,有時不會存在。 假設您的關鍵字是 "computer",您的模式會顯示如下。
"[Computer] Take me to {floorName}"
注意
雖然使用選擇性項目有其效用,但模式衝突的可能性也會因此而上升。 這是指兩種模式可能比對出相同口述片語的情況。 這種情況發生時,有時可藉由將選擇性項目分成不同的模式來解決。
實體角色
在模式中,您在特定情況下可能會想要使用相同的實體多次。 請考量您要訂機票飛到另一個城市的案例。 在此情況下,城市清單相同,但必須知道使用者來自哪個城市,以及哪個城市是目的地。 為此,您可以使用透過 ':' 指派給實體的角色。
"Book a flight from {city:from} to {city:destination}"
給定這樣的模式後,結果中將會有兩個標示為 "city:from" 和 "city:destination" 的實體,但兩者都會參考 "city" 實體以進行比對。
意圖比對優先順序
有時會有多個模式比對同一語句。 在此情況下,引擎會對模式提供優先順序,如下所示。
- 確切片語。
- 具有更多實體的模式。
- 具有整數實體的模式。
- 具有清單實體的模式。
- 具有任何實體的模式。
- 比對更多位元組的模式。
- 範例:模式「選取左側 {something}」的優先順序會高於「選取 {something}」。