分享方式:


什麼是模式比對?

模式比對可以自訂為將模式意圖和 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" 實體以進行比對。

意圖比對優先順序

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

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

下一步