Bixby는 사용자로부터 자연어(Natural language, NL)를 입력 받습니다. Bixby가 사용자의 말을 이해해서 올바른 답변을 줄 수 있도록, 실제 사용하는 자연스러운 발화 예제들을 학습시켜야 합니다. Quick Start Guide의 dice 샘플을 예로 보면 “6면 주사위 3개 굴려줘”라는 발화를 인식할 수 있도록 주사위 게임을 학습시킵니다. 이 문장이 utterance(발화) 입니다. 실 발화를 학습시키는 것이기 때문에, 꼭 문법적으로 정확한 발화일 필요도 없고, 발화에 따라서는 속어나 은어가 포함될 수 도 있습니다. 자연스럽고 실 사용성 있는, 의도가 명확한 발화들을 생성하는 것이 좋습니다.
각 capsule은 지원하는 각 언어에 대해 학습 예제를 추가해야 합니다. 좀 더 세분화하여 모바일, TV 같이 지원하는 Bixby 기기과 각 언어를 지원하는 지역 (예를 들어, 미국 영어는 en-US
, 영국 영어는 en-GB
) 에 따라서도 다른 학습 예제를 다르게 추가할 수 있습니다. 기기나 언어에 따라 공통적으로 사용될 수 있는 것들은 같이 모아 관리도 가능합니다. 예를 들어, 다른 국가지만 영어를 지원하는 경우 공통적으로 쓰는 것들은 en 아래에 각 지역별로 달라지는 부분은 en-US, en-GB에 추가해서 관리할 수도 있습니다. Bixby는 자연어를 구조화된 intent로 변경하고 이 intent를 이용해 plan을 만듭니다.
여기서는 어떻게 plan을 하고 학습을 추가하는지를 배우게 됩니다. 또한 학습 예제들을 효율적으로 검색하는 방법 그리고 발화를 테스트 하기 위해 aligned NL (natural language)를 사용하는 방법도 배우게 됩니다. 마지막으로, 학습에 도움이 될 수 있는 vocabulary를 어떻게 추가하는지도 배워봅니다.
Training은 capsule 내 해당 언어에 대한 모든 학습 데이터를 지칭하는 것이고, training example은 학습 예제 하나 하나를 의미합니다.
Training
Bixby는 예시들을 통해서 어떻게 NL 발화들을 처리할지를 배웁니다. 문장 내의 단어들를 capsule의 concept이나 action과 연결하여 태깅하고 발화의 intent까지 지정한 여러 학습 예제들 추가해야 합니다. 좋은 예제들을 통해 Bixby는 단순히 단어와 의미를 암기하는 것 이상을 수행할 수 있습니다. Bixby는 각 예제의 가장 중요한 의도를 학습하여 새로운 단어나 문장이 오더라도 사용자의 의도에 맞는 일관된 동작을 할 수 있게 됩니다. Bixby는 자연어 학습 예제들을 통해 문장의 의미를 배우게 됩니다.
Training은 Bixby가 이해하기를 원하는 하나 이상의 발화로 시작됩니다. 각 발화에 대해 다음 단계를 따라 학습을 추가합니다.
- Goal을 설정합니다.
- Values를 태깅합니다.
- Plan이 잘 생성되었는지 확인합니다.
Goal 설정하기
Goal은 각 발화에 대한 결과로 무엇을 줄 지를 나타내는 것입니다. Goal에는 보통 concepts이 사용됩니다. 예를 들어, 사용자가 “오늘 날씨 어때” 라고 물었을 때는 날씨 정보를 결과로 줄 것이기 때문에 goal은 Weather
concept이 됩니다. 서비스나 구매관련 goal의 경우에는 action을 goal로 사용할 수도 있습니다. 예를 들어, 비행기 에약을 위한 goal은 BookFlight
action으로 설정할 수 있습니다. Concept-based goal은 발화의 목적어나 주어, action-based goal은 동사라고 생각하시면 됩니다.
학습에 goal로 사용되는 concept이나 action은 해당 capsule에 선언되어 있는 것만 사용 가능합니다. Imported library에 선언된 concept이나 action은 importing capsule에서 goal로 사용할 수 없습니다. 대신 해당 concept을 importing capsule에서 extend해서 그 child concept을 goal로 사용할 수 있습니다.
Values 태깅하기
대부분의 action은 이름이나 숫자 같은 입력 값이 필요합니다. 특정 단어가 typed value로 찾아져 goal을 수행할 수 있는 input으로 사용되도록 학습합니다. 아래 날씨 capsule의 예시를 보면, 발화는 “진해 날씨 알려줘”이고 “진해”는 위치 정보인 viv.geo.SubLocalityOneName
type의 value입니다. 이런 식으로 다양한 패턴의 발화들을 태깅하여 학습시켜 두면, “서울 날씨 알려줘” 발화가 들어왔을 때 “서울”을 위치 정보로 인식하여 Weather
goal의 input으로 넘겨주게 됩니다.
Boolean
type concept의 value는 항상 소문자로 설정해야 합니다. (true, false)
발화에서 value를 태깅할 때는 structure concepts이 아닌 primitive concepts이어야만 합니다. structure concepts이 action의 input으로 필요하다면, structure concept의 property인 primitive concepts을 입력 받아, structure concept으로 만들어주는 action을 만들어야 합니다. 예를 들어, StreetAddress
structure concept은 StreenNumber
와 Street
property를 가질 수 있습니다.
structure (StreetAddress) {
property (streetNumber) {
type (StreetNumber)
min (Required) max (One)
}
property (street) {
type (Street)
min (Required) max (One)
}
}
학습 예시에는 street number는 streetNumber
로 태깅하고 street name은 street
으로 태깅합니다. 그리고 이 두 개를 합쳐서 StreetAddress
concept으로 만들어주는 constructor action을 추가합니다.
action (ConstructStreetAddress) {
type (Constructor)
collect {
input (streetNumber) {
type (StreetNumber)
min (Optional) max (One)
}
input (street) {
type (Street)
min (Required) max (One)
}
}
output (StreetAddress)
}
이 action에 대한 JavaScript 함수를 작성합니다.
function constructStreetAddress(streetNumber, street) {
var streetAddress = {
streetNumber : streetNumber,
street : street
}
return streetAddress;
}
module.exports = { function: ConstructStreetAddress }
Bixby에게 이 constructor action을 사용하라고 명시적으로 알려주지 않아도 Planner가 execution graph를 수행할 때 필요 시 해당 action을 사용합니다.
하나의 Goal이 target 별로 parameter input value만 다른 경우, 모델링이나 학습을 target별로 다르게 해서 처리하지 말고, action 구현에서 target별 동작을 동적으로 처리하도록 합니다. 이렇게 해서 target별로 지원하지 input에 대해서는 에러 처리를 하도록 합니다.
Plan 확인하기
발화에 goal과 필요한 value를 다 태깅하고 나면 plan이 잘 생성되었는지 확인합니다.
Training tool을 이용해서 학습 예시 생성하기
Training tool을 사용하기 위해서는 먼저 training 파일을 생성해야 합니다. 새 파일을 생성하고 (File > New File) Training 파일 타입을 선택합니다. 드롭다운 메뉴에서 device, language, 그리고 region을 선택합니다. IDE는 resource
폴더 아래 적당한 곳에 파일을 생성해줍니다.
지원 targets-단말, 언어, 지역의 조합-은 최대한 일반적이어야 합니다. 만약 동일 발화가 모든 단말을 지원한다고 하면 “All Devices” 아래 넣어야 합니다. 반대로 특정 언어를 사용하는 모든 지역에 적용된다고 하면 “All Regions”를 선택 합니다. (예로, “Korean (All Regions)”) 이렇게 함으로써 target간에 일관된 동작을 보장할 수 있고 resource도 효율적으로 사용할 수 있습니다.
Training 파일을 만들고 나면 resource 폴더 아래 target-specific sub folder 아래 training tool과 관련 데이터를 사용할 수 있습니다. 아래는 Quick Start Guide에 있는 Dice capsule의 예시 입니다.
새로운 학습 예제를 추가하기 위해서는 training tool 상단 Adding New Training 항목에 발화를 입력하고 Add를 클릭하면 됩니다. Training tool은 Drafts 탭에 새로운 예제를 만듭니다.
“GOAL” 항목에 goal concept이나 action을 입력합니다. 입력하는 동안 자동완성을 위한 추천 항목들도 볼 수 있습니다.
Goal을 입력하고 나면 value를 태깅합니다. 필요한 단어(들)을 선택하고 매칭되는 model을 “Node” 항목에 입력합니다. 이 예시에서는 3
은 NumDice로 6은 NumSides
로 태깅이 되어야 합니다.
발화에 goal과 values 태깅이 끝나면, plan을 확인해 봅니다. (메뉴가 숨겨져 있다면 아래 방향 화살표를 클릭해 열면 됩니다. )
Plan이 문제 없어 보인다면, Save를 클릭해 저장합니다. 더 많은 학습 예제들을 추가할수록, Bixby는 기존 학습된 예제들을 통해 새로운 예제가 추가되었을때 자동으로 태깅정보를 추천하게 됩니다. Training Suggestion 아래에서 확인할 수 있습니다. 제안된 goal과 values 태깅을 확인하고 이 제안을 그대로 사용할 수 있습니다. 문제가 없다면 Accept를 클릭하면 됩니다.
충분히 많은 학습이 추가되지 않았다면 추천은 뜨지 않을 수 있습니다. Bixby가 해당 도메인에 대해 더 많이 배우게 될수록 정확한 추천을 제공할 게 됩니다. Training tool은 검색 기능 기능도 제공합니다. 기존 학습 예제들을 검토 하거나 수정을 할 때 사용하시면 됩니다. 간단한 검색을 위해서는 Show All을 선택하시고 검색 창에 단어를 입력하시면 됩니다. 아래는 weather 예제 capsule에서 “습도”로 검색한 결과 입니다.
학습 예제가 기대한 대로 동작하지 않을 경우에는 modelling이나 action 구현을 다시 검토해보아야 합니다.
Roles로 context 추가하기
일부 경우 유사한 values를 구분하기 위해 context가 좀 더 필요한 경우가 있습니다. 특정 value에 context를 추가하기 위해서 role을 사용할 수 있습니다. 예를 들어 “김포 공항에서 나리타 공항으로 가는 비행기표를 찾아줘” 라는 발화에는 두 개의 공항 이름이 포함되어 있습니다. 이를 구분하기 위하여 하나는 DepartureAirport
로 다른 하나는 ArrivalAirport
로 context를 추가 할 수 있습니다. 각 공항 이름의 label을 선택하고 Add Role 을 선택하여 role을 추가할 수 있습니다.
Role 탭의 Node 항목에 DepartureAirport를 입력하면 됩니다.
이렇게 role을 추가해두면, bixby는 이제 첫 번째 공항이름은 parent type(AirportName
)의 role-of인 type(DepartureAirport
)이고 두 번째 공항 이름은 role-of
type (ArrivalAirport
)로 구분할 수 있도록 학습하게 됩니다. Role assignment에 대해서 더 배워볼 수 있습니다.
Continuations으로 학습 예제 추가하기
사용자가 후속 질문을 하거나 이전 발화의 input값을 변경하는 발화를 한 경우 이를 continuation이라고 합니다. 예를 들어, 사용자가 “스몰 사이즈 티셔츠 추천해줘” 라고 질문한 후 “사이즈를 미디움으로 바꿔줘” 라고 후속 발화를 하는 경우입니다. 이 발화는 단독으로는 말이 안되지만, 이전 발화의 context가 있을 때는 유요한 발화이기 때문에 continuation으로 학습해야 합니다. Continuation 학습 예제에 context를 설정하기 위해서는 먼저 발화를 입력하고 goal을 설정합니다. 이 goal은 이전 발화의 goal과 동일 할 수도 있습니다만 이 예제에서는 다른 goal입니다. No specialization 드롭 다운 메뉴에서 Continuation of를 선택합니다. CreateOrder
와 UpdateOrder
두 action이 모두 Order를 goal로 설정하고 있으므로 specialization node를 Order
로 설정하면 됩니다.
원 발화에 사용했던 동일 goal을 입력하고 다른 학습 예제와 마찬가지로 태깅하시면 됩니다. 이 예시에서는 Size
의 컨텍스트를 설정하여 "사이즈를 라지로 변경해줘”의 continuation of의 goal에 매핑되는 발화들에 대한 후속 발화로 처리할 수 있도록 합니다.
Prompt에 대한 학습 추가하기
Goal을 수행하기에 정보가 부족한 경우에는 추가 정보를 입력 받기 위해서 bixby는 prompt를 띄웁니다. 예를 들어, 사용자가 “미디움 사이즈 브이넥 티셔츠 구매할래”라고 말한 다음 "사이즈 변경해줘"라고 말했다고 가정합니다. Bixby는 어떤 사이즈로 변경할지에 대해 추가 정보를 사용자에게 물어보게 됩니다. 개발자는 사용자가 이 prompt 상황에서 응답할 수 있는 발화들의 예시를 추가하여 답하는 방법의 예를 추가하여 학습하도록 합니다. prompt 에 대한 학습 예시를 만들려면 prompt에 응답 예시를 추가해야 합니다. Add Training 필드에 “스몰”을 입력하고, 이것은 Size
에 대한 프롬프트에 대한 응답이므로 Size
를 goal로 입력합니다. 그리고 No specialization 드롭 다운 메뉴에서 At prompt for를 선택합니다.
Specialization node에 Size
를 입력합니다. 이제 “스몰”을 size
로 태깅하여 value값이 넘어올 수 있도록 합니다.
Goal의 property로 학습 추가 하기
Goal 그 자체 보다 goal의 property에 매칭되어야 하는 발화도 있을 수 있습니다. 이것을 property projection이라고 합니다. 예를 들어 일반적인 날씨를 물어볼 수도 있지만, 날씨의 일부인 미세먼지만 물어볼 수 있습니다. 이런 경우 goal concept의 특정 부분에 대한 것을 요구하는 경우에는 아래처럼 property를 직접 설정하여 추가할 수 있습니다. Goal에 property를 추가하기 위해서는 해쉬(#
) notation을 이용하여 명시합니다. Weather#fineDust
의 경우에는 structured concept Weather
이 fineDust
property를 가지고 있습니다. 이렇게 goal을 설정해두면 Weather의 fineDust
로 설정됩니다.
Flag로 전체 문장에 태깅하여 학습 추가하기
학습 예제를 추가하다 보면 value를 태깅하기가 어려운 경우가 있습니다. 아래 “월요일부터 금요일까지 날씨 어땠어”라는 발화를 보면 사용자가 의도한 것은 어느 월요일부터 금요일까지 일까요? 이미 지나간 주를 의미하는 것일까요 아니면 미래의 이야기 일까요? 이런 경우는 동사에 태깅을 할 수도 있는데 기본적으로 특히 동사를 태깅하는 것은 지양하도록 합니다. 이렇게 특정 단어에 태깅을 한다거나 vocabulary에 추가한다거나 해서 모호함을 해결하기 어려운 경우에는 대신 flag를 통해서 Bixby에게 단서를 줄 수 있습니다. Flag를 이용해서 전체 문장에 태깅을 하고 node와 value를 설정하여 Bixby에게 전달할 수 있습니다.
Flag 추가하기:
1. 발화를 추가한 후에 NL field 왼쪽에 있는 회색 부분을 선택합니다. Value, Sort, Route를 입력할 수 있는 탭을 볼 수 있습니다.
2. Value 탭 내에 Node와 Value를 입력합니다. Node는 학습 예제에 보낼 signal을 포함하는 concept이어야 하고 Value는 그 concept에 설정하고 싶은 값이 어야 합니다.
3. Done을 선택합니다.
위 예제에는 time.Tense를 node로 Past를 value로 설정하고 있습니다. Flag에 설정할 수 있는 concept은 enum
, Boolean
, integer
, decimal
이고 그 중에 enum
과 boolean
은 enumerated type이기 때문에 제일 잘 동작합니다. 여러 개의 flag도 설정가능 합니다. “근처에 비와”의 경우라면 flag에 signal은 WeatherCondition
은 rain
으로 설정하고 추가로 현재 사용자 위치를 확인할 수 있도록 route도(viv.geo.CurrentLocation
) 추가할 수 있습니다.
Flag는 기존 단어 태깅을 대체하지는 않기 때문에 특정 단어를 태깅하는 것은 여전히 해야합니다. 추가로 문장 내 특정 단어를 대체해야 하는 경우(“싼”, “저렴한”, 등)에는 vocabulary로 여전히 사용 가능합니다.
Boolean을 flag에 추가하는 경우에는 반드시 소문자로 사용해야 합니다. Do: v:ReservationIntent:true
Don't: v:REservationIntent:True
Pattern For로 학습 추가하기
패턴은 Structured concept을 위한 vocabulary를 제공합니다. 실제 학습 예제는 아니지만 학습 예제와 비슷한 포맷의 vocabulary entry처럼 사용됩니다.
학습을 추가할 때는 모든 pattern 학습 예제들이 learned가 되는지 확인이 필수적입니다. 아니라면 submission이 실패됩니다.
예를 들어 DateTime
학습을 생각해보면, viv.time
capsule은 pattern을 사용합니다. viv.time
을 사용하는 개발자들은 하나의 대표 type(viv.time.DateTimeExpression
)만 학습하면 됩니다. Pattern은 사람들이 DateTime
을 지칭하는 다양한 방법을 포함하고 있습니다. 아래와 같은 예제를 생각해보면:
Example 1:
[g:viv.time.DateTime:pattern] (오늘)[v:viv.time.NamedDate:Today] (오후)[v:viv.time.AmPm:Pm] (5)[v:viv.time.Hour:5]시(쯤)[v:viv.time.DateTimePrecision:Approximately]
Example 2:
[g:viv.time.Date:pattern] (7월)[v:viv.time.MonthName:July] (23일 날)[v:viv.time.Day:23]
위 에제에서는 두 goal이 g:viv.time.Date:pattern
으로 동일합니다. 모든 다양한 DateTime
intent는 서로 interchangeable해야하며 대부분 DateTime
의 모든 가능한 조합을 학습할 필요는 없습니다.
DateTime
이 예시에서는 잘 매칭될 수 있도록 structure concept이 가질 수 있는 다양한 길이의 문구로 학습을 해야 합니다.
Learned vs. Not Learned Training
Training tool에서 학습 예제를 추가할 때 기본적으로 Not Learned로 표시되어 있습니다. 이 표시는 Bixby가 해당 예제에 대한 NL model을 생성하지 할 때까지 유지 됩니다. Bixby가 아직 이런 학습 예제들을 배우는데 아직 정보가 부족하다는 의미이기도 합니다. 새로운 학습 예제를 추가하거나 기존 것을 수정하고 난 후 새롭게 NL model을 생성하기 위해서는 Compile NL Model를 클릭합니다. Model이 새로 생성되면 Bixby는 학습된 utterances들은 Learned로 표시합니다. 만약 새로 추가한 학습 예제가 기존 것과 충분히 유사하다면 compile하기 전에 이미 Learned로 표시 될 수도 있습니다. 다른 학습이나 vocabulary에 변화가 생긴다면 utterance가 Not Learned 상태로 다시 변경 될 수도 있습니다. 만약 Bixby가 어떤 특정 예제를 학습하지 못했다고 하면 다른 유사한 학습 예제를 더 추가해 보거나 기존 학습 예제와 충돌 나는 발화가 학습되어 있지는 않는지 확인해보고 vocabulary도 업데이트 합니다.
Aligned NL 사용하기
Bixby가 aligned NL을 사용하는 다양한 경우가 있습니다. Aligned NL이란 발화에 node의 value나 goal을 직접 매핑할 수 있도록 하는 text 포맷입니다. Training tool에서 발화를 태깅할 때 Bixby는 aligned NL을 생성합니다. Bixby는 실제 발화를 처리할 때도 aligned NL을 생성합니다. 아직 학습 예제들을 compile 해보지 않았다면 Bixby의 NL system은 아직 그것을 어떻게 해석할지를 모른다는 겁니다. 하지만 그 전에라도 Simulator에서 직접 aligned NL을 명시하여 테스트할 수는 있습니다.
simulator에서는 aligned NL과 NL을 둘 다 확인할 수 있습니다. 추가로 Debug Console에서 Conversation > input 에서 aligned NL과 함께 intent도 확인 가능합니다.
- NL:
오늘 수원 날씨 좀 보여줘
- Aligned NL:
[g:viv.weatherNews.Weather] (오늘)[v:viv.time.Date] (수원)[v:viv.geo.LocalityName] 날씨 좀 보여줘
- Intent:
intent {
goal {
1.3.5-viv.weatherNews.Weather
@context (Outer)
}
reference {
2.61.9-viv.time.Date
}
value {
8.0.41-viv.geo.LocalityName (수원)
}
}
아래는 예시 Aligned NL 발화들 입니다.
[g:viv.weather.Weather] (오늘)[v:viv.time.Date] (수원)[v:viv.geo.LocalityName] 날씨 좀 보여줘
[g:viv.flight.SearchFlightAvailability] {[g:viv.flight.ArrivalAirport] (제주)[v:viv.geo.LocalityName]} 가는 비행기 {[g:viv.money.MaxPrice] (20만 5500원)[v:viv.money.Price]} 이하만 보여줘
[g:viv.interparkHotel.AvailableHotel] (서울)[v:viv.geo.LocalityName] (강남구)[v:viv.geo.SubLocalityOneName]에 있는
(4성급)[v:viv.interparkHotel.ExactHotelCategory:4] (이상)[v:viv.interparkHotel.MinHotelCategory] (호텔)[v:viv.interparkHotel.HotelCategory:Hotel] 검색해줘
단어 또는 구는 goal, route, value 및 sort를 의미하도록 태깅합니다. 이를 총칭하여 signal이라고부릅니다. 여러 단어가 태깅된 경우에는 괄호로 묶을 수 있습니다. (위의 “20만 5500원” 경우처럼). Signal은 대괄호로 묶어 단일 문자 접두사로 signal type을 포함시킵니다.
g
for goal signalr
for route signalv
for value signals
for sort signalf
for flagged signal
Training 제약사항
Training entry 개수 제약
하나의 capsule은 target별로 2000개의 학습 예제까지만 가질 수 있습니다. Target은 device, language 그리고 region의 조합입니다.
en
: All devices, English language, all regionsbixby-mobile-en
: Mobile devices, English language, all regionsbixby-mobile-en-US
: Mobile devices, English language, US region
2000개 제약은 상위 target 전체에 공유되는 것입니다. 예를 들어 en target은 bixby-mobile-en
과 bixby-mobile-en-US
의 상위입니다. 만약 en에 1000개의 entry가 있다면 bixby-mobile-en
은 이 entry들을 상속받을 수 있고 추가로 1000개를 더 가질 수 있습니다. 만약 en이 1000개의 entry가 있고 bixby-mobile-en
이 500개가 더 있다고 하면 bixby-mobile-en-US
는 두 상위 target을 상속받아 500개를 더 가질 수 있습니다.
No named Entities
Bixby는 platform-level에서 named entities를 별도로 지원하고 있지는 않습니다. 사람이나 장소, 영화 제목 등을 자동으로 인식 할 수 없다는 뜻입니다. 개발자가 지원하고자 하는 도메인 내의 entities를 구분하기 위해 학습 예제와 vocabulary를 이용하여 개발해야만 합니다.
학습 예제 검색하기
Bixby는 학습된 utterance를 검색할 수 있는 방법을 제공합니다. Capsule 내에 많은 학습 예제를 가지고 있는 경우에 아주 유용합니다. 검색 쿼리를 이용하여 원하는 학습 예제들을 filter해서 볼 수 있습니다. 입력 한 모든 검색 구문은 필요에 따라 처리되며 정확히 일치되는 구문은 검색 결과에서 더 높은 순위를 갖습니다. “서울 날씨 보여줘” 라고 검색을 한다고 하면 모든 단어가 발화에 등장을 해야 합니다. 검색은 대소 문자를 구분하지 않으므로 "Samsung"또는 "samsung"을 검색 할 수 있습니다. 하이픈 (-) 문자를 사용하여 검색어에서 단어를 제외 할 수도 있습니다. 아래와 같이 다양한 방법으로 검색을 구체화 할 수 있습니다.
Search Description | Syntax | Synonyms | Example |
---|---|---|---|
Specify training entry using training ID | id:<training-id> |
training-id |
id:t-687v0fxyy5580vipz1ab39gx |
Exact NL phrases | text:<nl-text> |
txt , phrase |
text:weather |
Node, which can be value, route, or goal | node:<nodeid> |
match |
node:viv.weather.WeatherCondition |
Entries with at least one value of the given type | value:<nodeid> |
v |
value:viv.weather.WeatherCondition |
Entries with a flagged signal | flag:<nodeid> |
f |
flag:viv.food.Diet |
Entries with one route of the given type | route:<nodeid> |
rte , r |
route:viv.geo.CurrentLocation |
Entries with at least one sort of the given type | sort:<nodeid> |
s |
sort:viv.hotel.HighRate |
Entries with a goal of the given type | goal:<nodeid> |
g |
goal:viv.weather.Weather |
Entries with a continuation of the given type | continuation:<nodeid> |
continue , continuation-of |
continuation:viv.weather.Weather |
Entries with at least one role of the given type | role:<nodeid> |
- | role:viv.air.ArravalAirport |
Contextual training entries with respect to an instantiation prompt type | prompt:<nodeid> |
prompt-for |
prompt:viv.air.DepartureDate |
Entries with the given tag | tag:<text> |
tagged |
tag:needs-modeling |
Entries that contain at least one of the given fields: value , route , sort , role , continuation , pattern , prompt , tag , enabled , disabled , flag |
has:<field-name> |
is |
has: role |
Synonyms는 각 검색 연산자를 대체해서 쓸 수 있는 것들입니다. 예를 들어 node : viv.weather.WeatherCondition
또는 match : weather.WeatherCondition
를 같은 의도로 사용할 수 있습니다. 다양한 방법을 결합하여 더 상세한 검색도 가능합니다. 예를 들어 내일 습도와 관련된 weather.Weather
를 goal로 사용하는 학습 예제를 검색하려면 다음과 같은 검색할 수 있습니다. goal : viv.weather.Weather "습도" "내일"
단어를 입력 할 때 정확히 매칭되어야 하는 단어는 따옴표를 사용하세요.
Troubleshooting Training Examples
추가한 학습 예제에 문제가 있을 경우에는 IDE가 알려줍니다. 하지만 많은 training entries가 있을 경우에는 문제 원인을 빨리 파악하기가 힘든 경우가 많습니다. 이 섹션에서는 어떻게 이슈를 찾아내고 각 training entry의 status가 뭘 의미하는지를 알려줍니다.
Finding Training Entry Issues
Capsule을 submit 했는데 training entry에 문제가 있는 경우는 아래와 같이 하면 빨리 원인을 파악할 수 있습니다.
- Submission 페이지를 열고 failed entry를 선택합니다.
- Log 페이지에 어디에서 에러가 발생했는지를 찾습니다. 느낌표(!) 마크가 옆에 붙어 있습니다.
- Failure를 선택합니다. 에러에 대한 정보가 새로운 창에 뜹니다.
- Failure ID를 복사하여 training window에 넣고 검색합니다. 위의 경우에는
id:t-i20a4sycjvstauem5di5brg1
입니다. - 복사한 ID를 검색 창에 넣으면 문제가 된 plan을 확인 할 수 있습니다.
- Plan을 살펴보고 상단 왼쪽 코너에 보이는 training entry status를 확인합니다. 예를 들어 뒤 training entry는 illegal plan을 가지고 있습니다. 학습은 “UberBLACK”을
ProductType
으로 가지고 있으나 goal의 action으로 사용할 수 없는 type입니다. Planner가 이 경우ProductType
으로 어떻게 해야 할지를 몰랐던 경우입니다. - 에러를 수정하고 다시 submit합니다.
Modeling을 어떻게 했고 학습 예제를 어떻게 태깅했느냐에 따라 어떻게 에러를 수정할지가 결정됩니다. 문제를 수정하는 방법은 여러 가지 일 수 있습니다. The Art and Science of Training을 best practices로 참고하십시오.
Training Entry Statuses
IDE는 각 학습 예제의 왼쪽 상단 코너에 해당 학습의 상태를 보여주고 있습니다. “Learned”로 표시되지 않은 것들을 가지고 있다면 문제가 있다는 것이므로 학습 예제를 고치거나 model을 수정하여야 합니다.
- Learned: 각 training entry는 수행될 때 개발자가 의도한대로 해석됩니다. NL model이 compile되기 전까지는 Learned로 표시되지 않습니다. Learned vs. Not Learned Training 섹션을 확인하세요.
- Not Learned: training entries가 compile되지 않았거나 태깅된 정보와 달리 다르게 해석될 수 있습니다. Learned vs Not Learned Training 을 참고하세요.
- Disabled: 이 Training entry는 에러나 학습에 사용되지 않습니다.
- Illegal Plan: 이 training entry는 unsatisfied input constraints거나 unconsumed signals를 가지고 있는 경우입니다. 이 뜻은 학습한 intent가 디자인한 model과 잘 맞지 않는다는 뜻입니다.
- Unverified Plan: 각 training entry의 현재 plan이 처음 학습 예제를 저장했을 때의 plan과 상당히 달라진 경우입니다. 이는 모델 변경으로 인해 training entry의 plan이 마지막으로 저장되었을 때와 다르게 작동 할 때 발생할 수 있습니다. Plan이 올바른지 확인하고 NL 모델을 다시 compile하거나 Verify All Plans를 실행하여 문제를 해결할 수 있습니다.
- Incomplete: 보통 goal이나 참조하는 Node ID가 존재하지 않는 semantic 에러입니다.
Verifying Plans
Training action 메뉴(“Compile NL Model” 버튼 아래의 드롭다운 메뉴) Verify All Plans command를선택해서 모든 “Unverified Plan”을 없앨 수 있습니다. 모든 학습 예제가 complete, legal and enabled entries가 correct한지 확인합니다. 각 entry의 aligned NL로부터 현재 capsule의 model, vocabulary, 다른 정보들을 기반으로 새로 plan을 만듭니다. 각 entry의 training status는 이 command를 수행하면 변경될 수 있습니다. Disabled된 plan은 verify되지 않습니다.
Comments
0 comments
Please sign in to leave a comment.