Bixby Developer Center

Guides
References

자연어 Training

Caution

여기에서 설명하는 내용은 사이드바에서 최상위 Training entry를 선택하면 열리는 Training Editor 버전 2에 적용됩니다. resources 폴더 내에서 개별 training 파일을 선택하면 구 버전의 Training Editor가 열립니다. 구 버전의 Training Editor는 현재 지원 중단 예정(deprecated) 상태로, Bixby Developer Studio 추후 릴리즈에서 삭제될 예정입니다.

현재 사용 중인 화면이 이 페이지에 나와 있는 스크린샷과 다르다면 올바른 버전의 Training Editor를 선택했는지 확인하시기 바랍니다.

Bixby는 사용자의 자연어(Natural Language, NL)를 입력받습니다. Bixby Developer Studio(Bixby Studio)에서 실제로 사용되는 자연어 예제를 이해하도록 Bixby를 학습시키면 Bixby의 자연어 이해 능력을 향상시킬 수 있습니다. 예를 들어, 빠른 시작 가이드의 주사위 샘플에서는 "6면체 주사위 2개 굴려줘"라는 문장을 인식할 수 있도록 주사위 게임을 학습시킵니다. 이 문장을 발화(utterance)라고 합니다. NL Training은 사용자가 Bixby와 인터랙션하면서 말하거나 입력하는 발화를 기반으로 합니다. 발화는 문법적으로 반드시 정확해야 할 필요는 없으며, 경우에 따라 속어나 은어 또는 신조어가 포함될 수도 있습니다.

캡슐을 만들었으면 지원되는 각 언어에 대한 training 예제를 추가해야 합니다. 다양한 디바이스를 지원할 계획이라면 그러한 모든 디바이스에 대한 training도 추가해야 합니다. 또한 지원하는 Bixby 디바이스(휴대전화, 태블릿 등)와 각 언어를 지원하는 지역(예: 미국 영어는 en-US, 영국 영어는 en-GB)에 따라서도 서로 다른 training 예제를 추가할 수 있습니다. Bixby는 구조화되지 않은 자연어를 구조화된 인텐트(intent)로 변환한 후 이를 사용하여 plan을 만듭니다.

여기서는 plan을 세우고 training을 추가하는 방법을 배워볼 수 있습니다. 이 밖에, training 예제를 효과적으로 검색하는 방법, 연관 자연어를 사용해 발화를 테스트하는 방법 그리고 training에 도움이 되는 vocabulary를 추가하는 방법도 배워볼 수 있습니다.

효과적인 training 지침과 모범 사례(best practice)에 대한 자세한 내용은 Training 모범 사례를 참조하세요.

Caution

Training 파일을 Bixby Studio가 아닌 다른 프로그램에서 편집해서는 안 됩니다. 이렇게 할 경우 구문(syntax) 에러가 발생할 수 있습니다. Bixby Studio에서 에러가 보고될 경우에는 문제가 있는 training entry를 제거한 후 training tool을 사용해 다시 추가해 봅니다.

Training Editor

Training Editor를 사용하려면 Bixby Developer Studio 사이드바의 Files view에서 Training을 선택합니다. Editor에 Training Set List가 열립니다.

Training Set List

아래 화면은 캡슐의 Training SetsCapsule Targets 목록을 보여 줍니다. Training set은 하나 이상의 training entry로 구성됩니다. Training entry란 "우주 리조트 예약해 줘" 같은 발화에 Bixby가 이를 이해하는 데 필요한 정보가 태깅된, 특정 형식의 발화를 말합니다.

Training Set List

Bixby의 training entry는 다음 사항을 타겟으로 할 수 있습니다.

  • 모든 locale과 디바이스에 대한 특정 언어: en
  • 모든 디바이스에 대한 특정 언어와 locale: en-US
  • 모든 locale에 대한 특정 언어와 디바이스: bixby-mobile-en
  • 특정 언어, locale, 디바이스: bixby-mobile-en-US

Training set list는 capsule.bxb 파일의 target 블록에서 가져옵니다. 자세한 내용은 캡슐 설정하기를 참조하세요.

각 타겟은 최대 2,000개의 training entry를 가질 수 있습니다. 이 "training budget"은 해당 타겟에 적용되는 모든 예제의 합으로 계산됩니다. Training 화면에는 각 타겟과 그 부모 타겟에서 사용 가능한 training entry 수가 표시됩니다. 예를 들어, bixby-mobile-en-US 타겟과 bixby-mobile-en-UK 타겟이 모두 있는 경우, en 언어 세트에는 미국식 영어 예제와 영국식 영어 예제가 모두 포함됩니다.

또한 이 화면에는 각 타겟의 상태 카운트가 표시되고 이 캡슐의 자연어(NL) 모델을 다시 컴파일해야 하는지 여부도 알 수 있습니다. 캡슐 타겟으로 마우스를 가져가면 나타나는 "Compile" button을 클릭하면 개별 타겟을 재컴파일할 수 있고(타겟을 컴파일할 필요가 없는 경우에는 이 button이 비활성화됨) "Compile All Targets"를 클릭하면 모든 타겟을 한 번에 컴파일할 수 있습니다.

Note

"Training entry"를 "training 예제"라고 부르기도 하며, Bixby 설명 문서에서는 이 두 가지 용어를 모두 사용합니다.

Training Entry List

타겟을 클릭하면 해당 타겟의 training entry list가 표시됩니다.

Training Entry List

이 화면에는 각 training entry에 대한 다음과 같은 정보가 표시될 수 있습니다.

타겟 하나에는 수십 개, 수백 개 많게는 수천 개의 training entry가 포함될 수 있습니다. Entry list는 다음과 같은 방법으로 검색하고 필터링할 수 있습니다.

  • "Language", "Locale", "Device", "All" 중에서 선택하여 해당 training set에 속하는 training entry만 표시할 수 있습니다. 예를 들어 bixby-mobile-en-US 목록에서 en entry만 표시되도록 할 수 있습니다.
  • 검색 필드를 사용해 특정 텍스트나 검색 필터 키워드가 포함된 예제만 표시할 수 있습니다.
  • 오른쪽 사이드바를 사용하여 검색 필터를 선택하거나 선택 해제할 수 있습니다.

Training Entry List에서는 자연어 모델을 다시 컴파일하거나 새 training entry를 추가할 수 있습니다.

새 Training 추가하기

캡슐의 도메인을 모델링하고, concept과 action을 정의한 다음, action 구현까지 모두 끝났으면 training을 통해 이 모든 것을 엮어주어야 합니다. 사용자 발화는 Bixby 프로그램에 대한 자연어(NL) input으로 사용되고, 해당 발화와 연결된 goal은 사용자에게 어떤 것을 output으로 제공해야 할지를 Bixby에게 알려주는 역할을 합니다. Training 예제는 유의미한 단어(value)를 태깅하여 캡슐의 concept이나 action과 연결시킨 샘플 발화로 구성됩니다. Bixby는 이러한 발화와 태그를 사용하여 인텐트(intent)를 만들어냅니다.

좋은 training 예제들을 통해 Bixby는 단순히 단어와 의미를 암기하는 것 이상을 수행할 수 있습니다. 다시 말해, 이러한 예제에서 가장 중요한 인텐트(intent)를 학습하여 새로운 단어나 문장이 오더라도 사용자의 의도에 맞는 일관된 동작을 할 수 있습니다. 즉, Bixby는 자연어 training을 통해 문장의 의미를 배우게 됩니다.

Training Entry List 화면에서 Add button을 클릭하여 새 training을 추가합니다.

Note

Training Entry 화면이 특정 언어, locale 또는 디바이스에 대한 entry만을 표시하도록 설정되어 있는 경우, Add button을 클릭하면 해당 training set 내에 entry가 만들어집니다. 반면, 모두(All) 표시하도록 설정되어 있는 경우에는 Add를 클릭하면 드롭다운이 표시되는데, 여기에서 새 entry를 포함시킬 training set을 선택하시면 됩니다. 예를 들어, bixby-mobile-en-US 타겟 내에 있고 모든 entry가 표시되도록 설정된 경우라면 en, en-US, bixby-mobile-en, bixby-mobile-en-US 중에서 하나를 반드시 선택해야 합니다. 만들려는 entry에 가장 넓게 적용되는 training set을 선택하도록 합니다. 그러니까 발화가 영어로 되어 있고 locale이나 디바이스와 상관 없이 적용되도록 하려면 en을 선택하면 됩니다.

Add New Training Entry

각 training entry에 대해 다음 작업을 수행합니다.

  1. 발화의 goal을 설정합니다.
  2. 발화의 value를 태깅합니다.
  3. plan이 제대로 생성되었는지 확인합니다.

각 단계를 자세히 살펴보도록 하겠습니다.

Goal 설정하기

Goal은 보통 concept인 경우가 많습니다. 일기 예보 관련 정보를 제공하는 Weather concept이 포함된 캡슐이 있다고 할 때, 사용자가 "오늘 날씨 어때"라고 묻는다면 goal은 Weather concept이 됩니다.

경우에 따라 action을 goal로 사용할 수도 있습니다. 사용자가 트랜잭션에서 제품 또는 서비스를 구매하는 경우가 그렇습니다. 예를 들어, 항공편 예약 캡슐에는 BookFlight action을 goal로 사용하는 training 예제가 포함되어 있을 것입니다.

Note

자연어 Training에서 goal로 사용되는 concept과 action은 반드시 해당 캡슐에 선언되어 있는 것만 사용할 수 있습니다. Imported library 캡슐에 선언된 concept 또는 action은 importing 캡슐에서 goal로 사용할 수 없습니다. 하지만 해당 concept을 importing 캡슐에서 확장(extend)하여 자식 concept을 goal로 사용할 수는 있습니다.

Value 태깅하기

발화는 training 예제에 설정된 언어와 locale에 맞는 어구 또는 문장으로, Bixby는 발화를 input으로 받아 training 예제의 goal을 수행합니다. Bixby가 goal을 찾아내기 위해서는 음식점, 날짜, 예약 시간, 음식점 위치, 예약 당일 일기 예보와 같은 input value가 필요한 경우가 많습니다. 사용자의 발화에는 종종 다음과 같은 필수 value가 포함되어 있습니다.

  • "태국 음식점 찾아줘"
  • "토요일 저녁 7시 4명 자리 예약해줘"
  • "다음주 주말 화성에 있는 리조트 찾아줘"

Bixby가 발화에서 value를 식별할 수 있도록 하려면, 발화의 value를 태깅하여 자신의 캡슐이나 Bixby 라이브러리 캡슐에 들어 있는 concept에 연결해야 합니다.

  • "태국"은 example.food.CuisineStyle
  • "4명"은 example.reservation.Size
  • "토요일 저녁 7시"는 viv.time.DateTimeExpression
  • "다음주 주말"은 viv.time.DateTimeExpression
  • "화성"은 example.spaceResorts.Planet

발화에서 value를 태깅하려면, 먼저 발화에서 value로 사용할 단어를 클릭하여 하이라이트한 다음 v:value button을 클릭해 value signal을 추가합니다. 그런 다음, Bixby Studio의 오른쪽 사이드바에 나타나는 form에 적절한 정보를 입력하시면 됩니다.

Add New Training Entry

다음과 같은 키보드 단축키를 사용하여 발화에 태깅하는 방법도 있습니다.

  • Option/Alt+V - value
  • Option/Alt+R - route

enum value의 경우, Form 필드에 태깅한 단어나 어구에 매칭되는 유효한 symbol도 함께 설정해야 합니다. 예를 들어, "엑스트라 라지"라는 어구가 있고 이것이 ExtraLarge Size에 매칭된다고 할 경우, Form 필드에 ExtraLarge를 입력해야 합니다.

Note

Enum value는 symbol name과 정확하게 매칭되거나 해당 symbol의 vocabulary에 정확하게 매칭되어야 합니다.

발화에서 태깅하는 value는 구조체(structure) concept이 아닌 원시(primitive) concept에 매칭해야 합니다. 구조체(structure) concept을 action의 input으로 사용해야 할 경우, 구조체(structure) concept의 property에 매칭되는 원시(primitive) concept을 input으로 받아 구조체(structure) concept을 output으로 표시하는 Constructor를 만들어야 합니다. 이를 설명하는 예시는 Constructor 설명 문서에서 확인해 보세요.

Bixby에게 constructor action을 사용하라고 명시적으로 알려주지 않아도, planner가 실행 그래프를 수행할 때 concept construction이 필요할 경우에 이 action을 사용합니다.

Note

하나의 goal이 target별로 매개 변수 input value만 다른 경우에는 모델링이나 training을 타겟별로 다르게 해서 처리하지 말고, action 구현에서 타겟별 동작을 동적으로 처리하도록 합니다. 이렇게 해서 타겟별로 지원하지 않는 input에 대해서는 에러로 처리하도록 합니다.

발화에서 value 말고 route도 태깅할 수도 있습니다. route를 언제 사용해야 하고 언제는 사용하지 않아야 하는지에 대한 자세한 내용은 Route 섹션을 참조하세요.

Caution

sort signal은 어떻게 되나요? 구 버전의 Bixby에서는 "가격순으로 정렬해줘" 또는 "근처 호텔을 보여줘" 같은 정렬에 관한 발화에 sort signal로 태깅할 수 있었습니다. 그러나 이 기능은 현재 지원 중단(deprecated)되었습니다. 따라서 이 대신 sort-orderings을 사용하여 concept에 정렬 기능을 추가하거나 sort block을 사용하여 action의 output을 정렬하시면 됩니다.

Plan 확인하기

발화에서 필요한 value를 모두 태깅했으면 plan이 제대로 생성되었는지 확인해야 합니다. 우주 리조트 캡슐의 "화성 근처 호텔 찾아줘"라는 발화에 대한 plan은 아래와 같습니다.

Check the Plan

이 단순한 plan을 보면 어떻게 input이 action으로 이어지고 이 action을 통해 goal이 실행되는지 그 과정을 쉽게 파악할 수 있습니다. goal이 올바르고 input의 type이 적절한지 확인합니다. 제대로 되었는지 잘 모르겠으면 Run on Simulator button을 클릭해 device simulator에서 실제로 실행해 봅니다. plan에서 이상해 보이는 부분이 있을 때 plan을 실행하면 문제를 찾을 수 있는 경우가 많습니다.

Specialization

어떤 발화의 경우에는 Bixby가 제대로 처리할 수 있도록 training 예제에 추가 정보를 제공해야 할 수도 있습니다. 사용자가 이전 발화의 컨텍스트를 알아야만 이해할 수 있는 질문을 하거나 Bixby가 사용자의 요청을 완료하기 위해 사용자에게 추가로 질문을 해야 하는 상황이 그렇습니다. 이러한 경우에는 specialization을 통해 처리됩니다.

Continuation Of

사용자가 후속 질문을 하거나 구체화가 필요한 경우 이를 continuation이라고 합니다. 예를 들어 사용자가 "buy a medium shirt"라고 말한 뒤에 "change the size to large"라고 말할 수 있습니다. 이 후속 발화는 이전 발화의 컨텍스트 속에서만 의미를 이해할 수 있으므로 단독으로는 말이 되지 않을 경우에만 발화를 continuation으로 학습시켜야 합니다.

"change the size to large"를 continuation으로 학습시키려면 먼저 발화를 추가한 다음 goal을 입력합니다. 셔츠 매장 샘플 캡슐에서 이 goal은 처음 action인 CommitOrder와 동일합니다. specialization 드롭다운 메뉴에서 Continuation of를 선택하고 이 발화의 continuation 노드로 CommitOrder를 입력합니다.

Continuation

Continuation은 route에 자주 사용됩니다. 위 스크린샷 예시를 보시면 이 training entry의 Flags 목록에 UpdateOrder action을 통해 route가 표시됩니다. Route 섹션에서 route에 대한 자세한 내용과 route 대신 어떤 것을 사용할 수 있는지를 확인해 보시기 바랍니다. 또한 여기서 "Large"에는 ChangedItem이라는 Role이 부여되었습니다. Role을 사용하여 컨텍스트 추가하기에서 Role에 대한 자세한 내용도 확인해 보세요.

At Prompt For

goal을 수행하기에 정보가 충분하지 않을 경우 Bixby는 사용자에게 프롬프트를 띄워 추가 정보를 물어봅니다. 예를 들어 위 예시에서 사용자가 "change the size to large"라고 말하지 않고 "change the size"라고만 말했다고 가정해 보겠습니다. 이 경우 Bixby는 어떤 사이즈로 변경해야 할지를 알아야 하므로 사용자에게 이 정보를 묻게 됩니다. 개발자는 사용자가 이 프롬프트 상황에서 응답할 수 있는 발화들의 예시를 추가하여 이를 처리하도록 학습시킬 수 있습니다.

프롬프트에 대한 training 예제를 만들려면 프롬프트에 대한 응답 예시를 추가해야 합니다. Add Training 필드에 small을 입력합니다. 이것은 example.shirt.Size의 프롬프트에 대한 응답이므로 Size를 goal로 입력합니다. No specialization 드롭다운 메뉴에서 At prompt for를 선택합니다.

Continuation

이 예시에서 Size는 이 training 예제의 goal이기도 하고 specialization node이기도 합니다. 이 발화의 small이라는 텍스트는 Size 노드로 그리고 Small form으로 태깅되어 있습니다.

Pattern For

패턴은 구조화된 concept에 대한 vocabulary를 제공하며, 실제 training 예제가 아니라 training과 유사한 포맷의 vocabulary entry처럼 취급됩니다.

Note

Training을 추가할 때는 패턴인 모든 training entry가 Learned 상태인지 확인해야 합니다. 아니라면 제출이 실패하게 됩니다.

DateTime training을 예로 들어 보겠습니다. viv.time 캡슐은 패턴을 사용하기 때문에, 이 캡슐을 사용하는 개발자는 하나의 대표 type인 viv.time.DateTimeExpression만 학습시키면 됩니다. viv.time 안에 들어 있는 training은 DateTimeExpression concept에 매핑되는 패턴으로 구성됩니다. 패턴은 사람들이 DateTime 객체를 지칭하는 다양한 방법을 포함하고 있습니다. 다음 training 예제를 살펴보도록 하겠습니다.

예제 1:

NL 발화: "2:30 p.m. this Friday"

Aligned NL:

[g:DateTime:pattern] (2)[v:Hour]:(30)[v:Minute] (p.m.)[v:AmPm:Pm]
(this)[v:ExplicitOffsetFromNow:This] (friday)[v:DayOfWeek:Friday]

예제 2:

NL 발화: "July 23rd"

Aligned NL:

[g:viv.time.Date:pattern] (July)[v:viv.time.MonthName:July] (23rd)[v:viv.time.Day:23]

다음은 Editor에 표시된 예제 2의 training entry입니다.

Pattern Example

위 예제에서는 왼쪽의 goal과 오른쪽 Specialization Node... goal이 viv.Time.Date로 동일합니다.

이러한 다양한 DateTime 인텐트(intent) 시그너처는 서로 바꿔 사용할 수 있어야(interchangeable) 하며 대부분 DateTime의 모든 가능한 조합을 학습시킬 필요는 없습니다.

Note

이 예제에서는 잘 매칭될 수 있도록 구조체(structure) concept(여기서는 DateTime)이 가질 수 있는 다양한 길이의 어구로 학습시켜야 합니다.

심화 항목

Aligned NL

Aligned NL이란 goal, value, route에 대한 매핑을 포함하는, 발화의 일반 텍스트 버전이라고 할 수 있습니다. 대부분 Aligned NL의 예를 이미 보셨을 것입니다. Training Editor에서 발화를 태깅할 때 Bixby는 Aligned NL을 생성합니다. 또한 실제 쿼리를 처리할 때도 Aligned NL을 생성합니다.

또한 현재의 NL 모델을 아직 컴파일하지 않았더라도 Device Simulator에서 Aligned NL을 사용하여 Bixby에게 쿼리를 제공할 수 있습니다. Training Editor에서 Show Aligned NL 확인란을 선택했다 해제했다를 반복하면서 발화의 태깅된 NL과 Aligned NL을 번갈아 가면서 확인하고 수정할 수 있습니다.

Aligned NL in Space Resorts

다음은 Aligned NL 발화의 몇 가지 예입니다.

[g:viv.twc.Weather] weather on (saturday)[v:viv.time.DateTimeExpression] in
(san jose)[v:viv.geo.LocalityName]

[g:flightBooking.TripOption] I need a flight from {[g:air.DepartureAirport]
(sjc)[v:air.AirportCodeIATA:SJC]} to (lax)[v:air.AirportCodeIATA:LAX]
(tonight)[v:time.DateTimeInterval]

어노테이션(Annotation)은 대괄호 안에 작성합니다. 첫 번째 문자는 어노테이션의 종류를 의미하는 signal을 나타내며, 그 다음에 콜론(:)을 입력하고 이어서 해당 어노테이션이 가리키는 concept을 입력하면 됩니다. 위 예시의 "san jose" 같이 어노테이션(annotation)에 괄호로 묶은 단어나 어구가 붙을 수도 있습니다. Subplan은 중괄호로 묶어 처리됩니다. 어노테이션(annotation)에는 다음 네 가지 타입이 있습니다.

  • g: goal signal
  • v: value signal
  • r: route signal
  • f: flag signal

요청을 처리하기 위해 Bixby는 Aligned NL을 인텐트(intent)로 번역합니다. 요청에 대한 인텐트(intent)는 Debug Console에서 확인할 수 있습니다. 위 예시에 나와 있는 "research space resorts on Mercury"의 인텐트(intent)는 아래와 같습니다.

intent {
goal {
1.0.0-example.spaceResorts.SpaceResort#all
@context (Outer)
}
value {
1.0.0-example.spaceResorts.Planet (Mercury)
}
}

Role을 사용하여 컨텍스트 추가하기

Bixby가 여러 value를 완전히 이해하기 위해 컨텍스트가 추가로 필요한 상황도 있을 수 있습니다. 예를 들어, "find flights from SFO to YUL leaving this December 22nd"라는 발화에는 두 개의 공항 코드가 포함되어 있습니다. 두 코드는 동일한 AirportCode concept을 갖고 있지만, DepartureAirportArrivalAirport라는 서로 다른 role을 갖습니다.

발화에 role을 추가하려면, 먼저 role이 필요한 단어를 클릭하여 하이라이트한 다음 Role button을 클릭합니다. 그리고 오른쪽 사이드바에서 role에 대한 노드를 추가할 수 있습니다.

이렇게 training 예제에 role을 추가해 두면, Bixby planner는 두 번째 공항이 부모 type의 role-of인 type을 사용한다는 것을 구분할 수 있게 됩니다. 자세한 내용은 역할 할당에서 확인할 수 있습니다.

둘 이상의 value를 함께 사용하여 하나의 아이템을 지정하려는 경우 또 하나의 place role이 사용될 수 있습니다. 예를 들어, 셔츠 캡슐의 "Remove the XL shirt from my cart"라는 발화에서 "XL"은 Size이고, "shirt"는 SearchTerm이지만 두 value가 합쳐져 RemovedItem이라는 role을 갖습니다.

Two values, one role

Property Training

Goal 자체가 아니라 goal의 property에 매칭되어야 하는 발화도 있을 수 있습니다. 이를 property projection이라고 합니다. 예를 들어 사용자가 우주 리조트 캡슐에서 "Where is The Mercurial"이라고 묻는 경우 발화의 인텐트(intent)는 우주 리조트에 대한 일반적인 정보가 아니라 Mercurial이라는 특정 우주 리조트의 위치를 묻는 것입니다.

이처럼 발화가 goal concept의 특정 부분 또는 "property"를 묻는 경우 property를 매칭하는 특정 training 예제를 추가할 수 있습니다.

의도하는 goal에 property를 추가하려면 해시(#) 표기법을 사용하여 property를 지정합니다. 이 예에서는 SpaceResort#planet로 지정할 수 있습니다. 구조화된 컨셉 SpaceResort는 합계에 대한 속성(planet)을 갖습니다. 이것을 goal로 설정하면 발화의 인텐트(intent)와 goal이 우주 리조트 모델(SpaceResort)의 플래닛(planet)이 됩니다.

Property Projection

플래그

Training 예제를 추가하다 보면 value를 정확하게 태깅하기가 어려울 때가 있습니다.

예를 들어, "다음 주 금요일 3명 저녁 자리 예약해줘"라는 발화가 있다고 할 때, 여기서 예약 인원 수("3")와 요청 시간("다음 주 저녁")을 태깅할 수 있습니다. 그러나 이 검색 쿼리를 실행하려면 추가 기준이 필요합니다. 즉, 현재 예약을 받지 않는 모든 음식점은 필터로 걸러내야 합니다.

이처럼 특정 단어를 태깅하거나 추가 vocabulary를 덧붙이는 방법만으로 인텐트(intent)를 명확하게 이해할 수 없는 경우에는 플래그를 사용하여 Bixby에게 단서를 제공할 수 있습니다. 플래그는 특정 단어나 어구가 아닌 전체 발화를 태깅하는 방법이라고 할 수 있습니다. 어노테이션(annotation)과 마찬가지로 플래그도 value나 route를 제공할 수 있습니다.

아래의 셔츠 캡슐 예시에서 "Remove the XL shirt from my cart"라는 발화에는 route flag를 포함하여 몇 가지 training concept을 찾아볼 수 있습니다.

add flag to training

  • "XL"은 Size로 태깅되어 있습니다.
  • "t-shirt"는 SearchTerm으로 태깅되어 있습니다.
  • "XL t-shirt"에는 RemovedItem role이 할당되어 있습니다.
  • 전체 발화에는 UpdateOrder라는 플래그가 추가되어 있으며, CommitOrder라는 goal을 실행할 수 있는 라우트(route)로 action이 지정되어 있습니다.

플래그를 추가하려면 Flag button을 클릭하고 드롭다운에서 "Create Value Flag" 또는 "Create Route Flag"를 선택합니다. 그러면 라우트(route)의 노드나 value의 노드와 form과 같이 사이드바에 필요한 정보가 표시됩니다.

value 플래그는 enum, boolean, integer, decimal type의 concept을 지원하는데, 그 중에서도 enumerated type인 enumboolean이 가장 잘 동작합니다.

boolean type으로 training 예제에 플래그를 추가하는 경우에는 반드시 소문자를 사용해야 합니다. 예를 들어 v:ReservationIntent:true입력해야 하며, v:ReservationIntent:True입력해서는 안 됩니다.

라우트(Route)

라우트(route)는 planner가 goal을 실행하는 과정에서 "중간 지점(waypoint)"을 거치도록 만들어, 추가 정보를 고려하거나 프롬프트를 통해 사용자에게 추가 정보를 물어볼 수 있도록 해 줍니다.

예를 들어 "Is it raining near me?"라는 발화를 학습시키기 위해 weather.WeatherCondition 노드를 rain이라는 value로 설정하여 현재 비가 오고 있음을 나타내는 플래그를 추가할 수 있습니다. 그런 다음 Bixby가 현재 사용자 위치를 고려해야 한다는 것을 알 수 있도록 geo.CurrentLocation 라우트(route)를 추가할 수 있습니다.

추가 정보를 물어야 하는 continuation에도 라우트(route)를 사용할 수 있습니다. 가령, 식당을 예약하는 예시에서 사용자가 Bixby에게 "change the party size"라고 말한다면 Bixby는 변경하고자 하는 인원 수를 물어보아야 합니다.

[g:ChangeReservation:continue:Reserve,r:UpdatePartySize] Change the party size

PromptForPartySize 라우트(route)는 Bixby가 사용자에게 인원 수를 물어보도록 만듭니다.

라우트(route)를 개별 value에 추가할 수도 있지만, 전체 발화에 설정된 플래그와 연결하여 사용하는 경우가 더 많습니다. 어떻게 사용하든 발화의 특정 단어를 value로 태깅해야 합니다. 또한 문장 내에서 특정 단어로 대체할 수 있는 경우(예: "cheap", "inexpensive", "affordable")에는 vocabulary로 여전히 사용 가능합니다.

라우트(route)를 사용하면 캡슐의 로직을 따라가기가 더 어려워질 수 있으며, 많은 경우에 캡슐을 직접 설계할 수 있기 때문에 별로 필요하지 않습니다. 예를 들어, 위의 continuation 예제를 구현하여 UpdatePartySize를 유효한 goal로 만들거나 party size 자체를 ChangeReservation에 대한 value로 제공할 수 있습니다. Training 모범 사례에서 자세한 내용을 확인해 보세요.

배치 Action

다음과 같이 특정 배치 오퍼레이션(operation)에 여러 training entry를 선택할 수 있습니다.

  • "more actions" 메뉴(검색 탭 오른쪽에 있는 "•••" button을 눌러 액세스할 수 있는 드롭다운 메뉴)를 클릭하거나 Select All 또는 Select None을 선택합니다.
  • 각 개별 training entry의 왼쪽 상단 모서리에 있는 체크 표시를 클릭하여 해당 entry를 선택하거나 선택 해제합니다.

하나 이상의 entry가 선택된 상태에서 사용 가능한 배치 action은 다음과 같습니다.

  • Edit: 새로운 goal, 플래그 또는 specialization type 설정과 같이 선택된 모든 entry에 적용되는 변경 사항을 수행합니다.
  • Verify: 선택된 entry의 plan을 확인합니다.
  • Delete: 선택된 entry를 삭제합니다.

검색 필터

Training Editor에서 학습된 발화를 검색하는 방법은 몇 가지가 있습니다.

  • 오른쪽의 사이드바에서 status, issue, goal, specialization을 기준으로 빠르게 필터링할 수 있습니다.
  • 화면 상단의 검색 탭에서 training에 포함된 단어와 어구를 검색할 수 있습니다.
    • 입력한 텍스트와 정확하게 일치하는 검색 결과만 표시됩니다. 예를 들어, weekend in december라는 어구를 검색할 경우, 해당 검색어와 정확하게 일치하는 어구가 포함된 모든 entry가 결과로 표시됩니다. 다시 말해, "weekend in January"가 포함된 예제는 검색되지 않습니다.
    • 검색은 대소문자를 구분하지 않습니다. 따라서 Samsung, samsung, SAMSUNG 중 어떤 것으로 검색해도 그 결과는 동일합니다.
    • 검색 쿼리에서 특정 단어를 제외하려면 해당 단어 앞에 - 문자를 붙이면 됩니다. 예를 들어, Show me the weather in san jose -bernadino로 검색하면 show me the weather in san joseshow me the weather in san francisco는 검색 결과로 표시되지만 show me the weather in san bernadino는 제외됩니다.
  • 검색 텍스트에 scope prefix를 사용하여 검색을 구체화할 수 있습니다. 아래 표는 사용 가능한 키워드 목록입니다.
검색 범위구문동의어
특정 training ID를 갖는 예제id:<training-id>training-idid:t-687v0fxyy5580vipz1ab39gx
정확하게 일치하는 NL이 포함된 예제text:<nl-text>txt, phrasetext:weather
특정 노드가 포함된 예제node:<nodeid>matchnode:viv.weather.WeatherCondition
특정 value가 포함된 예제value:<nodeid>vvalue:viv.weather.WeatherCondition
특정 플래그가 포함된 예제flag:<nodeid>fflag:viv.food.Diet
특정 라우트(route)가 포함된 예제route:<nodeid>rte, rroute:viv.geo.CurrentLocation
특정 goal을 갖는 예제goal:<nodeid>ggoal:viv.weather.Weather
특정 continuation이 포함된 예제continuation:<nodeid>continue, continuation-ofcontinuation:viv.weather.Weather
특정 role이 포함된 예제role:<nodeid>-role:viv.air.ArrivalAirport
특정 프롬프트가 포함된 예제prompt:<nodeid>prompt-forprompt:viv.air.DepartureDate
특정 태그가 포함된 예제tag:<text>taggedtag:needs-modeling
지정된 필드 type이 하나 이상 있는 예제has:<field-type>ishas:role
특정 학습 상태의 예제status:<status>status:learned

has: scope에 사용 가능한 필드에는 value, route, role, continuation, pattern, prompt, tag, enabled, disabled, flag가 있습니다. 이 scope은 해당 필드의 특정 내용이 아니라 해당 type의 필드가 있는 모든 entry를 검색합니다.

학습 상태 type으로는 learned, not-learned, not-compiled가 있습니다.

검색 범위를 결합하여 보다 구체적으로 필터링할 수 있습니다. 내일 습도와 관련된 'weather.Weather' goal을 갖는 training을 검색하려면 goal:weather.Weather humid tomorrow를 사용할 수 있습니다.

문제 해결하기

Bixby Studio에서는 training 예제에 이슈가 있는 경우 이를 알려 줍니다. 그러나 training 예제가 많으면 문제를 일으키는 training 예제를 빠르게 찾기가 어려울 수 있습니다. 이 섹션에서는 이슈를 찾는 방법과 특정 training entry 상태의 의미를 설명합니다.

Training Entry 상태

Training entry는 보통 다음 세 가지 상태(state) 중 하나입니다.

  • Learned: Bixby가 학습을 완료하여 이 training entry를 실행할 수 있습니다.
  • Not Learned: Bixby가 이 training entry를 학습하는데 필요한 정보가 충분하지 않은 상태입니다.
  • Not Compiled: NL 모델을 다시 컴파일해야 이 entry를 학습할 수 있습니다.

training entry를 추가하면 보통 Not Compiled로 표시됩니다. 이 상태는 Bixby에서 해당 entry에 대한 NL 모델을 생성하기 전까지 유지됩니다.

새 예제를 추가하거나 기존 예제를 업데이트하여 새로운 NL 모델을 생성하려면 Compile NL Model을 클릭합니다. NL 모델이 생성되면 Bixby는 학습된 발화를 Learned로 표시합니다. 새로 추가한 training entry가 기존 training 예제와 충분히 비슷할 경우에는 모델을 컴파일하기 전에 이미 Learned로 표시될 수도 있습니다.

다른 training 또는 vocabulary를 변경하면 발화가 Not Learned 혹은 Not Compiled 상태로 다시 변경될 수도 있습니다. Bixby가 특정 예제를 학습하지 못했다고 하면 유사한 training 예제를 더 추가해 보거나, 기존 training entry와 충돌이 나는 발화가 학습되지는 않았는지 검토하고, vocabulary도 업데이트해 봅니다.

training entry는 그 외에도 다음 네 가지 상태로 표시될 수 있습니다.

  • Disabled: training entry가 에러 검사 또는 학습에 사용되지 않습니다.
  • Illegal Plan: training entry에 충족되지 않은 input 제약이나 사용되지 않은 signal이 있습니다. 즉, 학습시킨 인텐트(intent)가 모델이 설계된 방식과 맞지 않습니다.
  • Unverified Plan: training entry의 현재 plan이 이 entry를 저장한 시점의 plan과 상당히 달라진 경우입니다. 이는 모델 변경으로 인해 training entry의 plan이 이 entry를 저장한 마지막 시점의 plan과 다르게 동작할 때 발생할 수 있습니다. 이 문제를 해결하려면 entry의 plan이 올바른지 확인하고 NL 모델을 다시 컴파일하거나 Verify All Plans를 실행합니다.
  • Incomplete: 대개 goal이 없거나 참조 노드 ID가 존재하지 않는 등의 시맨틱(semantic) 에러입니다.

Training entry 이슈 찾기

Training Sets 화면의 검색 사이드바를 사용하면 이슈를 빠르게 찾을 수 있습니다. Issues 서브헤딩에서 경고 및 에러 카테고리에 해당하는 문제가 있는지 찾아봅니다.

캡슐을 제출하는 동안, training entry 중 하나에서 에러가 발생할 경우 id: 검색 범위를 사용하여 해당 에러를 검색할 수 있습니다.

  1. Submission 페이지를 열고 제출에 실패한 예제를 선택합니다.

  2. "Capsule Interpreter Training"을 선택합니다.

  3. 로그 페이지에서 해당 이슈를 발생시키는 예제를 찾아봅니다.

     --------------------------------------------------------------------
     (4) Entries in state NOT_LEARNED (ERROR: actively causing rejection)
     --------------------------------------------------------------------
     View all items in category (copy the search between the markers into the training tool)
     >>>> BEGIN COPY <<<<
     id:t-jcvrft523b1j3iwzti7wx2zq7,t-q1b5nsdjb2clwy8fkhre80ecg,t-wczwvczrezonkmp2djlaj9wcj,t-v7s9drvf7whsbfxup9n9rw2j8
     >>>> END COPY <<<<
  4. training 창에 표시되는 에러 ID를 복사합니다.

  5. 검색 탭에 ID를 붙여 넣어 이 ID를 갖는 training 예제를 검색합니다. 그러면 제출 실패의 원인이 되는 예제를 찾을 수 있습니다.

Note

training 예제의 이슈를 해결하는 방법은 training 예제가 어떻게 태깅되어 있고 모델링이 어떻게 설정되었느냐에 따라 달라집니다. 이슈를 해결하는 방법은 여러 가지가 있을 수 있습니다. Training 모범 사례에서 자세한 내용을 확인해 보세요.

Plan 확인하기

"more actions" 메뉴(검색 탭 오른쪽 "•••" button을 눌러 액세스할 수 있는 드롭다운 메뉴)에서 Verify All Plans 명령을 선택하면 "Unverified Plan" 상태를 모두 지울 수 있습니다. 이 명령은 완전하고 유효하며 활성화된 모든 예제에 대한 plan이 올바른지 확인하며, 캡슐의 모델, vocabulary 및 기타 데이터의 현재 상태를 기반으로 각 예제에 대한 Aligned NL에서 새 plan을 생성합니다.

이 명령을 실행한 후 각 예제의 training 상태가 변경될 수 있습니다. Disabled plan은 확인되지 않습니다.

Training 관련 제약 사항

training entry 수

하나의 캡슐에는 타겟당 최대 2,000개의 training entry가 있을 수 있습니다. 타겟은 디바이스와 언어, 지역의 조합입니다.

  • en: 모든 디바이스, 영어, 모든 지역
  • bixby-mobile-en: 휴대전화 디바이스, 영어, 모든 지역
  • bixby-mobile-en-US: 휴대전화 디바이스, 영어, 미국 지역

2,000개 제한은 부모 타겟 전체에 공유됩니다. 예를 들어 en 타겟은 bixby-mobile-en, bixby-mobile-en-US, bixby-other-en-US와 같은 영어를 사용하는 모든 디바이스 타겟의 부모 타겟입니다. en에 1,000개의 entry가 있는 경우 bixby-mobile-en은 해당 entry를 상속하여 최대 1,000개를 더 가질 수 있습니다. en에 1,000개가 있고 bixby-mobile-en에 500개가 더 있는 경우 bixby-mobile-en-US은 두 부모 타겟을 모두 상속받아 최대 500개를 더 가질 수 있습니다.

명명된 엔터티 없음

Bixby는 플랫폼 수준에서 명명된 엔터티를 별도로 지원하지는 않습니다. 즉, 인물과 장소, 영화 제목 등을 자동으로 인식할 수 없습니다. 따라서 개발자는 도메인 내의 이러한 엔터티를 구분하기 위해 training 예제와 vocabulary를 이용하여 개발해야 합니다.

예약된 발화

특정 상황에서 특정 의미를 갖는 몇 가지 발화가 있습니다. 예를 들어 목록을 탐색하는 동안 "Next"는 다음 항목 또는 항목 페이지를 읽는 명령으로 사용됩니다. 이러한 예약된 메타 명령을 서로 구별할 수 있도록 가능하면 완전한 training 예제를 생성하도록 합니다. 예를 들어 영어를 사용할 때 "Cancel"이 아니라 "Cancel my reservation"을 학습시켜야 합니다. "Cancel"은 Bixby의 컨버세이션(conversation) 컨텍스트를 지우는 명령이기 때문입니다.

메타 명령의 전체 목록은 예약된 발화 항목 참조에서 확인할 수 있습니다.

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

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