패턴 일치란?

패턴 일치는 PatternMatchingModel 내에서 패턴 의도와 엔터티를 함께 그룹화하도록 사용자 지정할 수 있습니다. 이 그룹화를 사용하면 의도를 더 정확하게 인식하는 데 도움이 되는 고급 엔터티 형식에 액세스할 수 있습니다.

지원되는 언어는 여기를 참조하세요.

패턴 및 정확한 구

패턴 일치자에는 "정확한 구"와 "패턴"이라는 두 가지 유형의 문자열이 사용됩니다. 차이점을 이해하는 것이 중요합니다.

정확한 구는 일치시키려는 정확한 단어의 문자열입니다. 예시:

"Take me to floor seven".(7층으로 데려다 주세요.)

패턴은 표시된 엔터티를 포함하는 구입니다. 엔터티는 패턴 내의 위치를 ​​정의하기 위해 "{}"로 표시되고 "{}" 내의 텍스트는 엔터티 ID를 참조합니다. 이전 예에서 "floorName"이라는 엔터티에서 층 이름을 추출하려고 할 수 있습니다. 이 작업은 다음과 같은 패턴으로 수행합니다.

"Take me to floor {floorName}."({floorName}층으로 데려다 주세요.)

PatternMatchingModel 개요

PatternMatchingModel에는 해당 모델을 참조하기 위한 ID, PatternMatchingIntent 개체 목록 및 PatternMatchingEntity 개체 목록이 포함됩니다.

패턴 일치 의도

PatternMatchingIntent 개체는 IntentRecognizer의 음성 또는 텍스트를 평가하는 데 사용되는 구의 컬렉션을 나타냅니다. 구가 일치하면 반환된 IntentRecognitionResult에는 일치된 PatternMatchingIntent의 ID가 있습니다.

패턴 일치 엔터티

PatternMatchingEntity 개체는 개별 엔터티 참조와 이를 처리하는 방법을 IntentRecognizer에 알려주는 해당 속성을 나타냅니다. 모든 PatternMatchingEntity 개체에는 구에 있는 ID가 있어야 하며 그렇지 않으면 일치되지 않습니다.

엔터티 명명 제한 사항

‘:’ 문자가 포함된 엔터티 이름은 역할을 엔터티에 할당합니다.

엔터티의 형식

모든(Any) 엔터티

"모든" 엔터티는 포함된 텍스트에 관계없이 해당 슬롯에 나타나는 모든 텍스트를 일치시킵니다. "Take me to floor {floorName}" 패턴을 사용한 이전 예를 고려하면 사용자는 다음과 같이 말할 수 있습니다.

"Take me to the floor parking 2"(2층 주차장으로 데려다 주세요.)

이 경우 “floorName” 엔터티는 “parking 2”를 일치시킵니다.

이러한 엔터티는 발화의 시작 또는 끝에 나타나는 경우를 제외하고는 가능한 한 적은 수의 단어를 일치시키려고 시도하는 지연 일치 항목입니다. 다음 패턴을 고려합니다.

"Take me to the floor {floorName1} {floorName2}"({floorName1} {floorName2} 층으로 데려다 주세요.)

이 경우 “Take me to the floor parking 2(2층 주차장으로 데려다 주세요)”라는 발화를 일치시키고 floorName1 = “parking” 및 floorName2 = “2”를 반환합니다.

캡처된 추가 텍스트를 처리하는 것은 까다로울 수 있습니다. 아마도 사용자가 계속 말했고 발화가 명령보다 더 많이 캡처되었을 수 있습니다. "Take me to floor parking 2 yes Janice I heard about that let's".(2층 주차장으로 데려다 주세요. 예, Janice가 이에 대해 들었습니다.) 이 경우 floorName1은 정확하지만 floorName2는 "2 yes Janice I heard about that let's"입니다. 엔터티에서 시나리오를 일치시키고 적절하게 조정하는 방식을 이해해야 합니다. 모든 엔터티 형식은 가장 기본적이지만 가장 정확하지 않은 일치 유형입니다.

목록 엔터티

"목록" 엔터티는 일치시키는 방법에 대해 엔진을 안내할 구 목록으로 구성됩니다. "목록" 엔터티에는 "Strict"(엄격) 및 "Fuzzy"(유사)의 두 가지 모드가 있습니다.

엘리베이터의 층 목록이 있다고 가정해 보겠습니다. 음성을 처리하고 있으므로 어휘 형식을 사용하는 항목도 추가합니다.

"1", "2", "3", "lobby", "ground floor", "one", "two", "three"

엔터티가 "목록" 형식 ID이고 "Strict" 모드에서 사용되는 경우 슬롯의 텍스트가 목록에 나타나는 경우에만 엔진에서 일치시킵니다.

"take me to floor one"(1층으로 데려다 주세요.)은 일치시킵니다.

"take me to floor 5"(5층으로 데려다 주세요.)는 일치시키지 않습니다.

엔터티뿐만 아니라 전체 의도도 일치시키지 않음에 유의해야 합니다.

엔터티가 “목록” 형식 ID이고 “유사” 모드에서 사용되는 경우 엔진에서 여전히 ​​의도를 일치시키고 목록에 없는 경우에도 발화의 슬롯에 나타난 텍스트를 반환합니다. 이 일치는 음성 인식을 향상시키는 데 도움이 되는 백그라운드에서 유용합니다.

Warning

유사 목록 엔터티는 구현되지만 음성 인식 부분에 통합되지는 않습니다. 따라서 엔터티와 일치하지만 음성 인식을 개선하지는 않습니다.

미리 빌드된 정수 엔터티

"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}층으로 데려다 주세요.)

“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} 선택"보다 우선 순위가 높습니다.

다음 단계