什麼是模式比對?

您可以自定義模式比對,以將模式意圖和實體分組在 一 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」,但兩者都會參考「城市」實體以供比對之用。

意圖比對優先順序

有時候,多個模式會比對相同的語句。 在此情況下,引擎會對模式提供優先順序,如下所示。

  1. 確切的片語。
  2. 具有更多實體的模式。
  3. 具有整數實體的模式。
  4. 具有清單實體的模式。
  5. 具有任何實體的模式。
  6. 比對更多位元組的模式。
    • 範例:模式「選取左邊的 {something}」優先順序會高於 「選取 {something}」。

下一步