什麼是模式比對?
您可以自定義模式比對,以將模式意圖和實體分組在 一 PatternMatchingModel
起。 使用此群組,可以存取其他進階的實體類型,以利讓您的意圖辨識更精確。
如需支援的地區設定,請參閱這裡。
模式與確切片語
模式比對器中使用的字串類型有兩種:「確切片語」和「模式」。 請務必了解差異。
確切的片語是您想要比對之確切字組的字串。 例如:
“帶我到七樓”。
模式是包含標示實體的片語。 實體會標示為 “{}”,以定義模式內的位置,而 “{}” 內的文字會參考實體標識符。 假設上一個範例,您可能想要在名為 「floorName」 的實體中擷取地板名稱。 您可以使用如下所示的模式來執行此動作:
“帶我到地板 {floorName}”
PatternMatchingModel 的大綱
PatternMatchingModel
包含參考該模型的標識碼、物件清單PatternMatchingIntent
和物件清單PatternMatchingEntity
。
模式比對意圖
PatternMatchingIntent
物件代表將用來在 IntentRecognizer
中評估語音或文字的片語集合。 如果相符片語,則 IntentRecognitionResult
傳回的具有相符的 PatternMatchingIntent
標識碼。
模式比對實體
PatternMatchingEntity
物件代表個別實體參考及其對應的屬性,告知 IntentRecognizer
如何處理它。 所有 PatternMatchingEntity
物件都必須有出現在片語中的標識碼,否則它不相符。
實體命名限制
包含 ':' 字元的實體名稱會為實體指派角色。
實體類型
任何實體
「任何」實體會比對出現在該位置中的任何文字,而不論其包含的文字。 如果我們考慮使用模式「帶我到 floorName}」的上一個範例,使用者可能會說出類似下列內容:
帶我去地板停車場 2
在此情況下,“floorName” 實體會比對 “parking 2”。
這些實體是惰性比對,其會嘗試比對儘可能少的字組,除非字組出現在語句的開頭或結尾。 請考慮下列模式:
“帶我到 floor {floorName1} {floorName2}”
在此情況下,「帶我到地板停車 2」語句會相符,並傳回 floorName1 = “parking” 和 floorName2 = “2”。
處理額外的擷取文字可能很棘手。 也許使用者持續交談,語句擷取的次數比他們的命令還多。 “帶我去地板停車2是珍妮絲,我聽說讓我們。 在此情況下,floorName1 是正確的,但 floorName2 會 = “2 是 Janice,我聽說讓我們來吧”。 請務必留意實體的比對方式,並對您的案例做出適當的調整。 Any 實體類型是最基本且最不精確的比對類型。
列出實體
「清單」實體是由片語清單所組成,這些片語將引導引擎如何對其進行比對。 「清單」實體有兩種模式。 “Strict” 和 “Fuzzy”。
假設我們有電梯的地板清單。 由於我們正在處理語音,因此也會新增適用於語彙格式的項目。
“1”、“2”、“3”、“大廳”、“一樓”、“一”、“二”、“三”
當實體屬於「清單」類型的識別碼用於「嚴格」模式時,只在位置中的文字出現在清單中時,引擎才會比對。
帶我去一樓“將匹配。
“帶我到5樓”不會。
請務必注意,整個意圖不會相符,而不只是實體。
當標識符為 「List」 類型的實體用於 「Fuzzy」 模式時,引擎仍然符合意圖,並傳回出現在語句中位置的文字,即使它不在清單中也一樣。 此比對在幕後很有用,可協助讓語音辨識變得更好。
警告
模糊清單實體會實作,但未整合到語音辨識部分。 因此,它們會比對實體,但無法改善語音辨識。
預先建置的整數實體
當您預期在該位置中取得整數時,會使用 「PrebuiltInteger」 實體。 如果找不到整數,則不符合意圖。 傳回值是數位的字串表示。
有效比對和傳回值的範例
“二千一百五十五” -> “2155”
“first” -> “1”
“a” -> “1”
“四哦七一” -> “4071”
如果有無法辨識為數位的文字,則實體和意圖不會相符。
無效相符專案的範例
“第三個”
“一樓我想”
“second plus three”
“三十三而反正”
請考慮我們的電梯範例。
“帶我到地板 {floorName}”
如果 "floorName" 是預建整數實體,則預期是位置內的任何文字都會表示整數。 這裡的樓層號碼會很相符,但有「大廳」等名稱的樓層則不相符。
將必要項目和選擇性專案分組
在模式中,允許在語句中包含「可能」存在的單字或實體。 這特別適用於諸如 「the」、“a” 或 「an」 等判斷器。 這與硬式編碼有許多組合沒有任何功能差異,但有助於減少所需的模式數目。 使用 “[” 和 “]” 表示選擇性專案。 指出具有 “(” 和 “)” 的必要專案。 您可以將多個專案與 『|』 字元分隔在相同的群組中。
若要了解這如何減少所需的模式數目,請考量下列集合:
“帶我到 {floorName}”
“帶我去 {floorName}”
“帶我 {floorName}”
“请帶我到 {floorName}”
“请帶我看 {floorName}”
“請帶我 {floorName}”
“請帶我 {floorName}”
「帶我到 {floorName} 請」
這些全都可以縮減為具有群組和選擇性專案的單一模式。 首先,可以將 “to” 和 “the” 分組為選擇性單字,例如:“[to |]“,第二個我們可以讓 ”please“ 選擇性。 最後,我們可以視需要將「攜帶」和「採取」分組。
“(自備 |採取) 我 [to | the] {floorName} [請]”
您也可以包含選擇性實體。 假設有多個停車層級,而且您想要比對 {floorName} 前面的單字。 您可以使用如下所示的模式來執行此動作:
“帶我到 [{floorType}] {floorName}”
如果您可能使用關鍵字辨識和隨按即說功能,選擇性項目也會很有用。 這表示關鍵詞有時存在,有時不會存在。 假設您的關鍵詞是「計算機」,您的模式看起來會像這樣。
“[計算機] 帶我到 {floorName}”
注意
雖然使用選擇性專案很有説明,但它會增加模式衝突的機會。 這是兩個模式可以比對相同口語詞組的地方。 如果發生這種情況,有時可以藉由將選擇性專案分成不同的模式來解決。
實體角色
在模式內,您可能想要多次使用相同的實體。 請考慮從某個城市到另一個城市預訂航班的案例。 在此情況下,城市清單相同,但必須知道哪個城市是用戶來自哪個城市,以及哪個城市是目的地。 若要達成此目的,您可以使用指派給實體的角色,使用 『:』。
「預訂從 {city:from} 到 {city:destination}的航班」
假設有這樣的模式,結果中將會有兩個實體標示為「city:from」和「city:destination」,但兩者都會參考「城市」實體以供比對之用。
意圖比對優先順序
有時候,多個模式會比對相同的語句。 在此情況下,引擎會對模式提供優先順序,如下所示。
- 確切的片語。
- 具有更多實體的模式。
- 具有整數實體的模式。
- 具有清單實體的模式。
- 具有任何實體的模式。
- 比對更多位元組的模式。
- 範例:模式「選取左邊的 {something}」優先順序會高於 「選取 {something}」。