Bixby Developer Center

Guides
References

Vocabulary로 학습 확장하기

Vocabulary 추가하기

vocabulary를 추가하면 Bixby의 Training을 확장하고 향상시킬 수 있습니다. vocabulary는 Bixby가 다음을 수행할 수 있도록 해 줍니다.

  • 원시(primitive) concept에 단어와 어구를 연결합니다.
  • enum symbol에 대한 레퍼런스를 이해합니다.
  • 단어와 어구를 정렬 순서에 연결합니다.
Note

구조체는 vocabulary 대신 패턴을 사용합니다.

원시 타입(Primitives)용 Vocabulary

오늘 밤에 볼 만한 영화를 검색하려는 사용자가 있습니다. "What movies are playing tonight"이라고 묻지 않고 "What comedies are playing tonight?"이라고 물을 경우, vocabulary를 통해 캡슐이 사용자의 질문을 처리할 수 있습니다.

Vocabulary를 제공하려면 캡슐 내에서 File > New File을 선택하여 vocabulary가 속한 언어별 리소스 폴더(이 예의 경우 en)에 Vocabulary type의 새 파일을 생성하고 해당 concept에 대한 단어/어구 목록을 추가합니다.

vocab (MovieGenre) {
"comedies"
"cartoons"
"animation"
"mysteries"
"romances"
"documentaries"
}

이 목록은 MovieGenre concept에 사용 가능한 유일한 value를 지정하는 것이 아니라 사용자의 발화에 명확한 컨텍스트가 부족한 경우 Bixby가 자연어를 이해할 수 있도록 돕는 실마리를 제공합니다.

Note

다른 캡슐로 type을 확장하는 경우에도 새 vocabulary 파일을 반드시 생성해야 합니다. vocabulary는 상속되지 않습니다. extends를 사용하거나 모델에 role-of를 추가하는 경우에도 마찬가지입니다. 단, 가져온 enum에 새 vocabulary를 추가하는 것은 가능합니다. 아래의 가져온 vocabulary를 참조하세요.

Enum을 위한 Vocabulary

Vocabulary를 통해 enum 원시(primitive) concept의 symbol에 대한 자연어 단어 또는 어구를 추가할 수도 있습니다. 몇 가지 예외사항은 아래에서 설명하겠습니다.

날씨 상태 API와 매칭되는 날씨 심볼이 포함된 웨더 캡슐을 예로 들어 보겠습니다.

enum (WeatherCondition) {
symbol (wcClear)
symbol (wcRain)
symbol (wcSnow)
symbol (wcHail)
symbol (wcSleet)
symbol (wcFog)
}

사용자가 enum value를 직접 언급하며 다음과 같이 질문할 수 있습니다.

"Is it going to rain tonight?"

또는

"Is it going to be foggy tomorrow morning?"

이러한 질문을 처리하려면 심볼과 관련 vocabulary 용어를 지정하는 vocabulary 파일을 포함해야 합니다.

vocab (WeatherCondition) {
"wcClear" { "clear" "sunny" }
"wcRain" { "rain" "raining" }
"wcSnow" { "snow" "snowing" }
"wcHail" { "hail" "hailing" }
"wcSleet" { "sleet" }
"wcFog" { "fog" "foggy" }
}
Note

enum concept에 대응되는 vocabulary가 없고 training 예제에서 태깅하지 않을 경우 training 예제가 학습되지 않습니다.

위와 같은 vocabulary가 포함되면 날씨 상태와 관련된 발화가 학습될 수 있고 Bixby가 "fog" 및 "foggy"와 같은 관련 용어를 이해할 수 있습니다.

Note

Vocabulary 용어가 정확히 일치해야만 Bixby가 이해할 수 있습니다. 예를 들어 "snow" 및 "snowing"은 위의 vocabulary와 일치하지만 "snowy"는 일치하지 않습니다. 이러한 제약 사항 때문에 캡슐에서 enum symbol에 대한 학습은 가급적 피하는 것이 좋습니다.

모든 closed type, 즉 enum, boolean, integer, decimal에 대해 이 방식으로 vocabulary 용어를 생성할 수 있습니다.

정렬을 위한 Vocabulary

캡슐이 결과를 정렬하는 방법을 변경할 수 있도록 하고 싶다면 vocabulary entry를 sort key에 연결할 수 있습니다. 예를 들어 호텔 예약 캡슐에서는 검색 결과를 가격순으로 정렬할 수 있습니다.

아래 예시는 사용자 발화에서 고가의 호텔을 의미할 수 있는 다양한 단어 또는 어구를 나열한 것입니다(example.hotel.HighRate).

vocab (example.hotel.HighRate) {
$sort-desc {
"expensive"
"extravagant"
"fancier"
"fancy"
"high priced"
"higher priced"
"lavish"
"luxurious"
"luxury"
"more costly"
"more expensive"
"most costly"
"most expensive"
"opulent"
"pricey"
...
}
}

가져온(Imported) Vocabulary

캡슐에서 다른 캡슐을 가져오면 해당 캡슐의 vocabulary도 가져오게 됩니다. 예를 들어 viv.self 라이브러리에는 단순히 필드 이름의 enumField concept이 포함되어 있습니다.

enum (Field) {
symbol (firstName)
symbol (lastName)
symbol (structuredName)
symbol (firstAndLastName)
symbol (phoneInfo)
symbol (emailInfo)
symbol (addressInfo)
}

이는 사용자가 symbol에 연결된 vocabulary를 사용하여 Profile 모델의 개별 필드를 지칭할 수 있도록 viv.self에서 내부적으로 사용됩니다.

vocab (Field) {
"FirstName" { "first name" "given name" }
"LastName" { "last name" "family name" }
"EmailInfo" { "email" "email address" }
"PhoneInfo" { "phone number" "number" "phone" }
"AddressInfo" { "address" }
}

이 목록은 StructuredName 또는 FirstAndLastName에 대한 vocabulary를 정의하지 않습니다. 다시 말해, viv.self를 가져온 캡슐이 기존의 vocabulary를 포함한 자체 vocabulary를 추가할 수 있도록 합니다. vocabulary가 도메인별로 다를 수 있기 때문입니다. 우주 리조트(Space Resort) 캡슐의 경우 다음과 같이 FirstAndLastName에 대한 vocabulary로 "name"을 추가합니다.

vocab (self.Field) {
"FirstAndLastName" { "name" }
}
Note

vocabulary를 가져올 수 있지만 상속되지는 않습니다. 캡슐이 가져온 concept을 기반으로 extends 또는 role-of를 사용하는 경우 기반 concept에 대한 vocabulary가 새 concept에 적용되지 않습니다.

Vocabulary 분류

Vocabulary는 모든 vocabulary가 한정된 용어 세트에 포함되면 closed로, 그렇지 않으면 open으로 간주됩니다.

open 매칭의 경우, 학습 예제 내의 단어나 어구를 특정 concept으로 태깅할 때 그 단어가 vocab에 명시적으로 나열되지 않으면 이러한 매칭을 “out-of-vocabulary”(OOV) 라고 합니다.

Closed Type

다음과 같은 type은 "closed"로 간주됩니다.

  • Enum: vocabulary가 반드시 필요하며, 태그가 vocab에 지정된 value 중 하나와 일치해야 합니다.
  • Boolean: vocabulary가 반드시 필요하나 기본적으로 truefalse로 설정됩니다.
  • Qualified: vocabulary를 사용할 수 없으나, 특정 Regex 패턴을 반드시 따라야 합니다.
  • Numbers(Integer 및 Decimal): Vocabulary가 반드시 필요하나, 편의를 위해 플랫폼(platform)이 자동으로 생성합니다.

Open Type

다음과 같은 type은 "open"으로 간주됩니다.

  • Name: Vocabulary를 가질 수 있고, 어떤 단어도 이 type에 매칭될 수 있습니다. OOV 매칭도 가능합니다.
  • Text: Vocabulary를 사용할 수 없으며, 모든 것이 open 매칭입니다. OOV만 가능합니다.

제약 사항

이 섹션에서는 vocabulary와 관련된 몇 가지 제약 사항을 설명합니다.

Entry 수 제약

캡슐 하나에는 전체 concept 기준으로 최대 75,000개의 vocabulary entry를 가질 수 있습니다. concept당 최대 50,000개의 vocabulary entry를 추가할 수 있습니다.

이름 관련 제약

Bixby는 vocabulary에서 패턴 인식을 지원하지 않습니다. 예를 들어 MovieTitles라는 vocabulary 목록과 ActorNames라는 vocabulary 목록이 있다고 가정해 보겠습니다. 사용자가 "톰 크루즈 영화 찾아줘"라고 말하는 경우에 "톰 크루즈"가 ActorNames vocab에 명시적으로 지정되어 있지 않다면 Bixby는 "톰 크루즈"가 배우인지 아니면 영화 제목인지를 구분할 수 없습니다. 이를 구분하기 위해 명확한 training 예제를 더 많이 추가해야 합니다. 만약 그래도 잘 동작하지 않는다면, Bixby가 처리하기에는 적절치 않은 케이스로 볼 수 있습니다. 따라서 이 경우에는 SearchQuery 같은 한 가지 type을 지정하고 백엔드 서버가 정렬 및 구조화된 쿼리를 처리하도록 해야 합니다.

Boolean 대소문자

vocab의 boolean 심볼은 truefalse로, 모두 소문자로 사용합니다.

올바른 표기: 모두 소문자로 사용합니다.

잘못된 표기:

  • True, tRuE, 또는 다른 대소문자의 조합
  • TRUE

자동 음성 인식 및 텍스트 음성 변환

Bixby는 ASR(자동 음성 인식)과 TTS(텍스트 음성 변환)라는 유용한 기능을 통해 사용자와 소통합니다. 그러나 특정 캡슐에서 학습한 자연어 발화와 캡슐에 추가된 vocabulary는 오직 해당 캡슐에서만 활용할 수 있습니다. 물론 사용자 발화를 학습할수록 특정 캡슐의 발화와 vocabulary가 ASR과 TTS의 성능 향상에 도움이 될 수도 있습니다.