Vocabulary 추가하기
Training tool을 이용하여 추가한 학습 예제들과 함께 concept에 해당하는 단어들을 사전처럼 추가해둘 수 있습니다. 예를 들어, 근처 식당을 검색하고자 할 때 “근처 식당 검색해줘” 라고 말하지 않고 “근처 한식 잘하는 식당 검색해줘” 라고 할 수도 있습니다. 이 경우에도 capsule이 음식 종류에 따라 잘 동작하도록 만들어야 합니다. Capsule에서는 Vocabulary 타입의 파일을 생성(File > New File) 하여 CuisineStyle
concept에 연관된 vocabulary를 추가해두어 위와 같은 경우를 처리할 수 있습니다.
vocab (CuisineStyle) {
"한식"
"중식"
"일식"
"양식"
}
다른 capsule의 type을 extend하는 경우에도 반드시 새로운 vocabulary가 필요합니다. Extends
나 role-of
를 사용했다고 하더라도 vocabulary는 상속되지 않습니다.
동의어를 위한 vocabulary
유사하거나 동일한 의미의 단어나 문구에 대한 처리를 할 때에도 vocabulary를 사용할 수 있습니다. 예를 들어 한식을 먹고 싶을 때, “근처에 한식 잘 하는 식당 찾아줘” 라고 말할 수도 있지만, “근처에 한정식 잘하는 식당 찾아줘” 라고 말할 수도 있습니다.
이런 유사하거나 동일한 의미의 단어들을 처리하기 위해서 유사 단어나 문구들을 vocabulary에 나열할 수 있습니다. 아래는 “한식”을 대체할 수 있는 vocabulary 예시들입니다.
"KoreanCuisine" {"한식" "한식당" "한식집" "한국요리" "한국음식" "한국식당" "한국 식당”}
이 vocabulary를 통해서 CusineStyle
이 포함된 발화에서 “한식”이나 “한정식”을 모두 사용하더라도 잘 동작하게 됩니다.
vocab (viv.movie.MovieGenre) {
"action"
"adventure"
"animation" { "animation" "animations" "cartoon" "cartoons" }
"comedy" { "comedy" "comedies" "funny" "funniest" }
"crime"
"disaster"
"documentary" { "documentary" "docudrama" "narrative" }
}
위의 영어 vocab 예시에서 "animation”이 두 번 반복된 것을 보실 수 있습니다. 첫 번째는 vocabulary symbol 이름이고 두 번째는 동의어 value 입니다. 만약 동의어 value로 symbol 이름을 넣지 않는다면 bixby는 "animation"은 인식하지 못하게 됩니다. 영어의 경우에는 symbol 이름도 필요에 따라 동의어에 같이 추가해주어야 합니다.
한국어의 경우 필요에 따라 vocabulary entry를 영어로도 한국어로도 작성할 수 있습니다. 아래는 실제 vocab 파일 예시입니다.
vocab (CuisineStyle) {
"KoreanCuisine" {"한식" "한식당" "한식집" "한국요리" "한국음식" "한국식당" "한국 식당"}
"ChineseCuisine" {"중식" "중식당" "중화요리" "중국 음식" "중국 음식점" "중국 요리"}
"JapaneseCuisine" {"일식" "일식당" "일식집" "일본 요리" "일본 음식" "일본 음식점" "일본 식당" }
"EuropeanCuisine" {"양식" "양식음식" "양식요리" "양식당"} }
정렬을 위한 vocabulary
Capsule이 결과를 정렬하고 그 정렬 방법을 변경할 수 있도록 하고 싶은 경우, vocabulary entry들을 sort key에 연결할 수 있습니다. 예를 들어 호텔 예약 capsule에서는 검색 결과를 금액 기준으로 정렬할 수 있습니다. 아래 예시에는 고가의 호텔을 지칭하는 다양한 방법들을 모두 나열해 두었습니다. (HighRate
)
vocab (HighRate) {
$sort-desc {
"비싼"
"비싼 가격 순"
"비싼 비용 순"
"값비싼"
"고가의"
"최고 운임"
"호화로운"
"비싼 순"
"최고가"
...
}
}
Vocabulary 분류
모든 vocabulary가 한정된 set에 포함된다고 하면 closed 이고 아닌 경우에는 open이라고 합니다. 학습 예제 내의 단어나 구를 특정 concept으로 태깅할 때 그 단어가 vocab
에 선언되지 않은 경우, 이런 매칭을 “out-of-vocabulary” (OOV) 라고 합니다.
Closed Types
“closed” 인 type들:
- Enum: Vocabulary는 반드시 필요하고 태깅된 값은
vocab
에 정의된 value 중 하나와 반드시 일치해야 합니다. 영화 장르나 음식 종류처럼 한정된 set의 경우에는 enum으로 선언 하시고 synonym들을 vocabulary에 추가해두시면 됩니다. - Boolean: Vocabulary는 반드시 필요하나, 기본적으로
true
와false
로 설정되어 있습니다. - Qualified: Vocabulary는 가질 수 없으나, qualified type은 Regex pattern을 반드시 따라야 합니다.
- Numbers (Integer와 Decimal): Vocabulary가 반드시 필요하나, 편의를 위해 platform이 자동 생성해줍니다.
Open Types
“open”인 type들:
-
Name: Vocabulary를 가질 수 있고, 어떤 단어도 이 type에 매칭될 수 있습니다. (OOV 매칭도 가능) 예를 들면, 음식 명, 영화 제목처럼 일부는 나열이 가능하나 너무 많아서 모든 것을 다 나열할 수 없는 경우에는 Name type을 사용할 수 있습니다. 특히 일부 잘 태깅이 되지 않는 단어의 경우에는 vocabulary에 추가하여 bixby에게 추가 hint를 줄 수 있습니다.
아래는
FoodName
vocab의 예시입니다.vocab (FoodName) { "나주곰탕" "나주 곰탕" "꼬막" "김치말이국수" "굴국밥" "흑염소" "고구마튀김" "참치" "대하" "대하구이" "새우" "새우구이" ... }
Vocab에 정의된 이름(예, 나주 곰탕)으로도 학습을 일부 추가합니다. 이를 in-vocab 학습이라고 합니다.
[g:Restaurant] (나주 곰탕) [v:FoodName] 잘 하는 맛 집 찾아줘
일부는 vocab에 선언되지 않은 "똠양꿍"같은 음식 이름을 넣어 out of vocabulary(OOV)로 학습합니다. 이렇게 OOV로 학습을 추가해 두어야 Bixby가 vocabulary에는 없더라도 발화의 패턴과 lexical context(주변 단어들)를 이용하여 처음 보는 음식 이름이라도
FoodName
으로 태깅할 수 있습니다.[g:Restaurant] (똠양꿍) [v:FoodName] 잘 하는 맛 집 찾아줘
-
Text: Vocabulary를 가질 수 없습니다. 모든 것은 open 매칭입니다. (OOV만 가능)
예를 들어 메시지 내용이나 일정 제목 같은 경우에는 미리 선언해둘 vocabulary를 가질 수도 없는 open text의 경우입니다. 이런 경우에는 text type으로 선언하고 out of vocabulary로 학습 하시면 됩니다.
제약 사항
이 부분에서는 vocabulary의 제약사항을 설명하고 있습니다.
Entry 개수 제약
Concept당 50,000 vocabulary entries까지만 추가할 수 있습니다. 한 Capsule의 전체 concept 기준으로는 75,000개까지 가능합니다.
Name 제약
Bixby는 vocabulary에서 pattern recognition을 제공하지 않습니다. 예를 들어 vocabulary에 MovieTitles
와 ActorNames
에 대한 vocabulary가 있다고 해 봅시다. 사용자는 “조인성 영화 보여줘” 또는 “안시성 영화 보여줘” 라고 말할 수 있습니다. 두 문장은 “조인성”, “안시성”을 제외하면 동일한 문장이기 때문에, “조인성” 이 ActorNames
vocab에 명시적으로 선언되지 않았다면 Bixby는 “조인성”이 영화 제목인지 배우 이름인지를 구분할 수 없습니다. 이를 구분하기 위해 명확한 학습 예제를 더 많이 추가해야 합니다만 (예를 들어 배우 이름은 경우에는 “조인성이 나온 영화 보여줘” “조인성이 출연한 영화 보여줘” 와 같이), 만약 그래도 잘 동작하지 않는다면, Bixby가 처리하기에는 적절치 않은 케이스로 볼 수 있습니다. 이런 경우에는, 두 concept을 SearchQuery
하나의 concept으로 만들고, backend server에서 처리하는 것이 바람직합니다.
Boolean case
Vocab의 Boolean symbols은 true와 false로 모두 소문자로 사용합니다.
[Do] 모두 소문자로 사용합니다.
[Don't] 아래와 같이 사용하지 않습니다.
True
,tRuE
또는 다른 대소문자의 조합TURE
Comments
0 comments
Please sign in to leave a comment.