Bixby Developer Center

Guides
References

NL Training, 버전 1

Note

여기에서 설명하는 내용은 resources 폴더 내에서 개별 training 파일을 선택하면 열리는 Training Editor 버전 1에 적용됩니다. 사이드바에서 최상위 Training entry를 선택하면 새 버전의 Training Editor가 열립니다.

Training Editor 버전 1은 현재 지원 중단 예정(deprecated) 상태로, Bixby Developer Studio 추후 릴리즈에서 삭제될 예정입니다. 새 버전의 Training Editor를 사용하시기 바랍니다!

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

Caution

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

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

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

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

Note

Training이란 캡슐 내에서 해당 언어(예: 영어)에 대한 모든 자연어 training 데이터를 지칭하는 것이고, 이러한 각각의 training 유닛을 training 예제라고 합니다.

Training

Bixby는 예제를 통해 어떻게 NL 발화를 처리할지를 배웁니다. 문장 내 단어들을 캡슐의 concept이나 action과 연결하여 어노테이션(annotation)하고 발화의 인텐트(intent)까지 지정한 다양한 training 예제를 제공해야 합니다. 좋은 training 예제들을 통해 Bixby는 단순히 단어와 의미를 암기하는 것 이상을 수행할 수 있습니다. 즉, 이러한 예제에서 가장 중요한 부분을 자동으로 학습함으로써 다음에 새로운 단어와 문장이 오더라도 사용자의 의도에 맞는 일관된 동작을 수행할 수 있게 됩니다. 한마디로, Bixby는 자연어 training을 통해 문장의 의미를 배우게 됩니다.

Note

dispatch-name 또는 캡슐의 디스패치 별칭(dispatch alias)은 발화에 사용하지 마세요.

Training은 Bixby가 이해하기를 원하는 하나 이상의 발화로 시작됩니다. 각 발화에 대해 다음 단계를 따릅니다.

  1. Goal 설정하기
  2. Value 태깅하기
  3. Plan 확인하기

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

Goal 설정하기

Goal은 보통 concept인 경우가 많습니다. 예를 들어, 사용자가 날씨를 물어볼 경우 goal은 viv.weather.Weather가 될 수 있습니다. 드물지만 경우에 따라 action을 goal로 사용할 수도 있는데, 제품 또는 서비스를 구매하는 action을 학습시키는 경우가 그렇습니다. 항공권 예약을 위한 viv.flightBooking.BookFlight action을 학습시키는 것이 한 예가 될 수 있습니다. 그러나 대부분의 training 예제는 concept을 goal로 설정합니다. concept 기반 goal은 발화의 주어나 목적어로, action 기반 goal은 동사라고 생각하시면 됩니다.

Note

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

Value 태깅하기

대부분의 action에는 이름이나 숫자와 같은 input이 필요합니다. 발화의 특정 단어가 goal을 수행하는 데 필요한 type value를 식별한다는 점을 Bixby가 인식하도록 학습시켜야 합니다. 아래는 온라인으로 셔츠를 주문하는 Bixby 샘플 캡슐에서 가져온 예시입니다.

identify values

"Show Ralph Lauren shirts"라는 발화에서 "Ralph Lauren"은 example.shirt.Brand type의 value입니다.

identify values

"Buy 2 Ralph Lauren shirts"라는 발화에서도 "Ralph Lauren"은 example.shirt.Brand type의 value이지만 "2"는 example.shirt.Quantity type의 value입니다.

Note

Boolean type concept의 value는 항상 소문자로 설정해야 합니다.

대개 발화에는 value를 나타내지 않는 관사("the" 및 "a")와 같은 단어가 포함되는데 이러한 것들은 생략해도 무방합니다. Bixby의 자연어 엔진은 이러한 단어를 무시할 것인지 아니면 학습된 발화의 변형을 파악하는 데 사용할 것인지를 스스로 결정합니다.

발화에서 태깅하는 value는 구조체(structure) concept이 아닌 원시(primitive) concept이어야 합니다. 구조체(structure) concept을 action의 input으로 사용해야 할 경우, 구조체(structure) concept의 property인 원시(primitive) concept을 input으로 받아 구조체(structure) concept을 output으로 표시하는 action을 만들어야 합니다. 예를 들어 StreetAddress 구조체(structure) concept은 다음과 같이 StreetNumberStreet property를 가질 수 있습니다.

structure (StreetAddress) {
property (streetNumber) {
type (StreetNumber)
min (Required) max (One)
}
property (street) {
type (Street)
min (Required) max (One)
}
}

주소를 파싱(parsing)하도록 Bixby를 학습시키려면 training 예제에서 거리 번호를 streetNumber로, 거리 이름을 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가 실행 그래프를 수행할 때 필요 시 이 action을 사용합니다.

Note

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

Plan 확인하기

발화의 모든 value를 태깅했으면 plan이 제대로 생성되었는지 확인합니다. 다음은 "buy 2 medium shirts"의 plan입니다.

verify plan

이 단순한 plan을 보면 어떻게 input이 action으로 이어지고 이 action을 통해 goal이 실행되는지 그 과정을 쉽게 파악할 수 있습니다. goal이 올바르고 input의 type이 적절한지 확인합니다. 제대로 되었는지 잘 모르겠으면 plan을 실행해 보십시오. plan을 실행하려면 training tool에서 Compile NL Model button을 클릭하여 자연어 모델을 먼저 컴파일해야 합니다. plan에서 이상해 보이는 부분이 있을 때 plan을 실행하면 문제를 찾을 수 있는 경우가 많습니다.

Training Tool을 사용하여 Training 예제 만들기

Training tool에 액세스하려면 먼저 training 파일을 생성해야 합니다. File > New File에서 새 파일을 생성하고 Training 파일 형식을 선택합니다. 드롭다운에서 디바이스, 언어, 지역을 선택합니다. Bixby Studio는 resources 아래 적절한 폴더에 training 파일을 생성합니다.

Note

Training 타겟(디바이스, 언어, 지역의 조합)은 최대한 일반적이어야 합니다. 동일한 발화가 모든 디바이스를 지원할 경우에는 "All Devices" 내에 저장합니다. 마찬가지로 발화가 타겟 언어를 사용하는 모든 지역에 적용된다면 "All Regions"를 선택합니다(예: "English (All Regions)"). 이렇게 해야 모든 타겟에 걸쳐 캡슐의 일관성이 유지되고 training 리소스가 가장 효율적으로 사용됩니다.

training 파일을 생성했으면 Bixby Studio에서 캡슐의 resources 폴더 아래 타겟별 하위 폴더에서 training tool 및 관련 데이터에 액세스할 수 있습니다. 빠른 시작 가이드에 나온 주사위 캡슐을 예로 살펴보겠습니다.

training button

캡슐에 새 training 예제를 추가하려면 training tool 상단의 Adding New Training 필드에 발화를 입력하고 Add를 클릭합니다. training tool의 Drafts 탭 아래에 새 예제가 생성됩니다.

Add training field

"Goal" 필드에 goal concept 또는 action을 입력합니다. 입력할 때 자동 완성을 위한 제안 목록이 표시됩니다.

Annotate values

goal을 입력한 후에는 value를 태깅합니다. 단어 또는 어구 텍스트를 선택하고 대응되는 모델의 이름을 "Node" 필드에 입력합니다. 이 예에서는 3NumDice의 value로 태깅해야 합니다.

Select text

발화에 goal과 필요한 value를 태깅한 후에는 plan을 검토합니다. 숨겨져 있는 경우 아래 방향 화살표를 클릭하여 열면 됩니다.

Review plan

Plan에 문제가 없어 보인다면 Save를 클릭해 저장합니다.

더 많은 발화를 추가할수록, Bixby는 기존 training entry를 토대로 새 발화에 대한 training을 제안합니다. 이러한 제안은 Training Suggestion 아래에서 확인할 수 있습니다. 여기에서 Training Suggestion의 goal과 value를 검토해 문제가 없다면 Accept를 클릭하여 제안받은 예제를 발화에 추가할 수 있습니다.

Training suggestion

충분히 많은 training 예제가 추가되지 않은 경우에는 이러한 제안이 표시되지 않을 수 있습니다. Bixby가 해당 도메인에 대해 더 많이 배우게 될수록 보다 정확한 제안을 제공하게 됩니다.

또한 training tool에는 검색 기능도 있어 기존 training 예제의 발화를 찾아볼 수 있습니다. 이 기능은 기존 training 예제들을 검토하거나 수정할 때 사용하시면 됩니다. 간단한 검색의 경우 Show All을 선택하고 검색창에 단어를 입력하고 검색 버튼(search button)을 클릭합니다. 다음은 신발을 검색하고 구입할 수 있는 신발 샘플 캡슐에서 "dance"로 검색한 결과입니다.

Search for dance

Note

Training 예제가 예상대로 동작하지 않을 경우에는 모델링 및 action 구현 단계로 돌아가 Bixby가 각 training 예제에 설정된 goal에 도달할 수 있는지를 확인해야 할 수 있습니다.

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

Bixby가 유사한 value들을 구별할 수 있도록 하려면 약간의 컨텍스트가 추가로 필요할 수 있습니다. 이때 role을 사용하면 특정 value에 컨텍스트를 추가할 수 있습니다. 예를 들어, "find flights from SFO to YUL leaving this December 22nd"라는 발화에는 두 개의 공항 코드가 포함되어 있습니다.

발화에 포함된 다른 단어로 미루어 볼 때 "SFO"는 출발 공항이고 "YUL"은 도착 공항이라는 것을 알 수 있습니다. 각 공항 코드를 클릭한 후 Add Role을 클릭하여 각 value에 역할을 추가합니다.

Add role

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

Continuation으로 Training 예제 추가하기

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

이 컨텍스트를 continuation training 예제로 설정하려면 먼저 발화를 추가한 다음 goal을 입력합니다. 이 goal은 이전 발화와 동일할 수도 있지만, 이 셔츠 캡슐 예제에서는 다음과 같은 별도의 action입니다. example.shirt.UpdateOrder. No specialization 드롭다운 메뉴에서 Continuation of를 선택합니다. 주문 생성 action과 주문 업데이트 action의 goal이 모두 example.shirt.Order이므로 example.shirt.Order가 Specialization Node가 됩니다.

add continuation

원 발화에 사용한 것과 동일한 goal을 입력한 다음, 다른 training 예제와 마찬가지로 태깅하면 됩니다. 이 예제에서는 example.shirt.Size라는 컨텍스트를 설정하여 "change the size to large"의 goal을 갖는 모든 쿼리에 대한 후속 발화로 처리할 수 있도록 합니다.

add continuation goal

프롬프트에 대한 Training 예제 추가하기

goal을 수행하기에 정보가 충분하지 않을 경우 Bixby는 사용자에게 프롬프트를 띄워 추가 정보를 물어봅니다.

예를 들어 셔츠 주문 캡슐에서 사용자가 "buy me a medium v-neck"이라고 말한 뒤에 "change the size"라고 말했다고 가정해 보겠습니다. 이 경우 Bixby는 어떤 사이즈로 변경해야 할지를 알아야 하므로 사용자에게 이 정보를 묻게 됩니다.

개발자는 사용자가 이 프롬프트 상황에서 응답할 수 있는 발화들의 예시를 추가하여 이를 처리하도록 학습시킬 수 있습니다.

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

add prompt

example.shirt.Size를 Specialization Node로 입력합니다. 이제 "small"을 example.shirt.Size로 태깅하여 value가 넘어올 수 있도록 합니다.

prompt added

Goal의 Property에 대한 Training 예제 추가하기

Goal 자체가 아니라 goal의 property에 매칭되어야 하는 발화도 있을 수 있습니다. 이를 property projection이라고 합니다. 예를 들어 사용자가 "what's the total price of the order"라고 말하는 경우 발화의 인텐트(intent)는 전반적인 주문에 대한 조치를 취하도록 요청하는 것이 아니라 주문한 셔츠들의 가격 합계를 묻는 것입니다.

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

의도하는 goal에 property를 추가하려면 해시(#) 표기법을 사용하여 property를 지정합니다. 이 예에서는 example.shirt.Order#totalPrice로 지정할 수 있습니다. 구조화된 컨셉 Order는 합계에 대한 속성(totalPrice)을 갖습니다. 이것을 goal로 설정하면 발화의 인텐트(intent)와 goal이 현재 주문(example.shirt.Order)의 합계(totalPrice)가 됩니다.

prompt added

플래그로 전체 발화에 태깅하여 Training 예제 추가하기

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

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

이처럼 특정 단어에 태깅하거나 추가 vocabulary를 덧붙여 인텐트(intent)를 이해하기 쉽게 만들 수 없을 때에는 플래그를 사용하여 Bixby에게 단서를 제공할 수 있습니다. 플래그는 특정 단어가 아닌 전체 발화에 대한 training을 추가하여 training을 돕는 보완적인 방법입니다. 플래그를 이용해 전체 발화에 어노테이션(annotation)하고 노드와 값을 설정하여 Bixby의 머신 러닝에 전달할 수 있습니다.

플래그를 추가하는 방법:

  1. 발화를 추가한 후 NL 필드의 왼쪽에 있는 회색 부분을 선택합니다. 그러면 Value 탭과 Route 탭이 보입니다.

    add flag to training

  2. Value 탭에서 NodeValue를 입력합니다. Node는 training을 위해 전송되는 signal 역할을 하는 concept이며, Value는 해당 concept에 지정하는 value입니다.

  3. Done을 클릭합니다.

    add flag to training

위의 발화에서는 ReservationIntent 노드와 true value로 발화에 플래그를 지정합니다.

플래그는 enum, boolean, integer, decimal type의 concept을 지원하지만 열거형인 enumboolean type이 가장 적합합니다.

Note

boolean type으로 training에 플래그를 다는 경우 항상 소문자를 사용해야 합니다.

예를 들어 v:ReservationIntent:true입력해야 하며, v:ReservationIntent:True입력해서는 안 됩니다.

Pattern For로 Training 예제 추가하기

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

Note

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

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

예제 1:

[g:viv.time.DateTime:pattern] (this)[v:viv.time.ExplicitOffsetFromNow:This] (friday)[v:viv.time.DayOfWeek:Friday] (around)[v:viv.time.DateTimePrecision:Approximately] (8)
[v:viv.time.Hour:8](pm)[v:viv.time.AmPm:Pm]

Example 2:

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

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

Training entry with Pattern For using Date

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

Training entry with same goals

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

Note

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

라우트 시그널(Route Signal)

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

예를 들어 "Is it raining near me?"라는 발화를 학습시키기 위해 weather.WeatherCondition 노드를 rain 값으로 설정하여 날씨 상태가 비임을 나타내는 플래그를 추가할 수 있습니다. 그런 다음 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 signal)은 단어 태깅과 함께 동작하지만 이를 대체하지는 않습니다. 따라서 발화의 특정 단어를 value로 태깅해야 합니다. 또한 문장 내에서 특정 단어로 대체할 수 있는 경우(예: "cheap", "inexpensive", "affordable")에는 vocabulary로 여전히 사용 가능합니다.

Note

"Training의 기술"에서 설명한 것처럼 라우트 시그널(route signal)은 가급적이면 사용하지 않는 것이 좋습니다. 이 대신, 값에 대한 학습을 추가해 보십시오. 예를 들어, 위의 continuation 예제를 구현하여 UpdatePartySize를 유효한 goal로 만들거나 party size 자체를 ChangeReservation에 대한 value로 제공할 수 있습니다.

Learned vs. Not Learned Training

training tool에서 training 예제를 추가하면 기본적으로 Not Learned로 표시됩니다. 이 표시는 Bixby에서 해당 예제에 대한 NL 모델을 생성하지 않을 때까지 유지됩니다. Bixby가 아직 이러한 training 예제를 배우는데 정보가 부족함을 의미하기도 합니다.

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

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

Aligned NL 사용하기

경우에 따라 Bixby는 aligned NL을 사용합니다. Aligned NL은 자연어 발화에 value나 goal 같은 노드를 직접 매핑할 수 있도록 하는 텍스트 포맷입니다. Training tool에서 발화를 태깅할 때 Bixby는 Aligned NL을 생성합니다. 또한 실제 쿼리를 처리할 때도 Aligned NL을 생성합니다.

training 예제를 아직 컴파일하지 않았다면 Bixby의 NL 시스템은 해당 training 예제를 해석하는 방법을 알지 못합니다. 그러나 시뮬레이터에서 직접 aligned NL을 명시하여 테스트해볼 수는 있습니다.

aligned-nl-weather

시뮬레이터에는 aligned NL과 NL 요청이 모두 표시됩니다. Debug Console의 NL 탭 아래에서 aligned NL과 함께 인텐트(intent)도 확인할 수 있습니다.

  • NL:

      weather on saturday in san jose
  • Aligned NL:

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

      intent {
    goal {
    viv.twc.Weather
    }
    reference {
    viv.time.DateTimeExpression
    }
    value {
    viv.geo.LocalityName (san jose)
    }
    }

다음은 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]

[g:hotel.Hotel] find a (2)[v:hotel.ExactStarRating:2] star
(hotel)[v:hotel.HotelCategory:Hotel] in (san jose)[v:geo.LocalityName]

단어 또는 구는 goal, route, value를 의미하도록 태깅하는데, 이를 통칭하여 "signal"이라고 부릅니다. 위의 예에 나온 "san jose"와 같이 어구를 괄호 안에 넣어 그룹화할 수 있습니다. signal은 대괄호로 묶여 있으며 여기에는 다음과 같은 signal type을 의미하는 prefix 문자 하나가 포함되어 있습니다.

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

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의 성능 향상에 도움이 될 수도 있습니다.

Training 예제 검색하기

Bixby는 학습된 발화를 검색할 수 있는 방법을 제공합니다. 이것은 캡슐에 training 예제가 많은 경우에 특히 유용합니다. 또한 검색 쿼리를 사용하여 원하는 training 예제를 필터링할 수 있습니다.

입력하는 모든 검색 어구는 필수로 취급되며 정확히 일치하는 어구가 검색 결과에서 상위에 배치됩니다. 예를 들어 "show me weather report san jose"를 검색할 경우 문장의 모든 단어가 포함된 발화가 검색됩니다.

검색에서는 대소문자를 구분하지 않으므로 예를 들어 "Samsung"과 "samsung" 중 어느 것으로 검색해도 됩니다. 검색 쿼리에서 특정 단어를 제외하려면 하이픈(-) 문자를 사용합니다.

이 밖에 검색을 구체화할 수 있는 몇 가지 방법은 다음과 같습니다.

검색 설명구문동의어
training ID를 사용하여 training entry 지정id:<training-id>training-idid:t-687v0fxyy5580vipz1ab39gx
정확히 일치하는 NL 어구text:<nl-text>txt, phrasetext:weather
노드(value, route, goal 중 하나)node:<nodeid>matchnode:viv.weather.WeatherCondition
지정된 type의 값이 하나 이상 있는 예제value:<nodeid>vvalue:viv.weather.WeatherCondition
플래깅된 signal이 있는 예제flag:<nodeid>fflag:viv.food.Diet
지정된 type의 route가 하나 있는 예제route:<nodeid>rte, rroute:viv.geo.CurrentLocation
지정된 type의 goal이 있는 예제goal:<nodeid>ggoal:viv.weather.Weather
지정된 type의 continuation이 있는 예제continuation:<nodeid>continue, continuation-ofcontinuation:viv.weather.Weather
지정된 type의 role이 하나 이상 있는 예제role:<nodeid>-role:viv.air.ArrivalAirport
프롬프트 type과 관련된 예제prompt:<nodeid>prompt-forprompt:viv.air.DepartureDate
지정된 태그가 있는 예제tag:<text>taggedtag:needs-modeling
다음 필드 중 하나 이상이 포함된 예제: value, route, role, continuation, pattern, prompt, tag, enabled, disabled. flaghas:<field-name>ishas:role

동의어(synonym)는 검색 연산자를 대체해서 쓸 수 있는 것들을 의미합니다. 예를 들어 node:viv.weather.WeatherConditionmatch:weather.WeatherCondition은 같은 의도로 사용할 수 있습니다.

다양한 방법을 결합해 검색을 커스터마이즈할 수도 있습니다. 예를 들어 내일의 습도와 관련된 weather.Weather goal이 있는 학습을 검색하려면 다음과 같이 검색할 수 있습니다.

goal:viv.weather.Weather "how humid" "tomorrow"

입력한 대로 정확히 나타나야 하는 단어에는 따옴표를 사용합니다.

Training 예제 문제 해결하기

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

Training Entry 이슈 찾기

캡슐을 제출하는 동안, training entry 중 하나에서 에러가 발생할 경우 다음 단계를 따르면 에러를 빠르게 찾을 수 있습니다.

  1. Submission 페이지를 열고 제출에 실패한 entry를 선택합니다.
  2. 로그 페이지에서 에러가 발생한 단계를 찾습니다. 옆에 느낌표(!)가 있는 것이 에러가 있는 단계입니다. Error Occurred on the log page
  3. 찾은 에러를 선택합니다. 에러에 대한 자세한 정보가 표시된 창이 나타납니다. Error failure pop-up window
  4. training 창에 표시되는 에러 ID를 복사합니다. 위 예에서 ID는 id:t-i20a4sycjvstauem5di5brg1입니다.
  5. 검색 탭에 ID를 붙여 넣어 이 ID를 갖는 training entry를 검색합니다.
    Training tab 그러면 문제가 있는 plan이 표시됩니다.
  6. plan과 예제 오른쪽 위에 표시된 training entry 상태를 검토합니다. Training entry with illegal plan 예를 들어, 위의 training entry에는 illegal plan이 있습니다. 이 training의 ProductType value가 "UberBLACK"인데 이것은 goal의 action으로 사용할 수 없는 타입입니다. 따라서 planner가 이 ProductType으로 어떻게 해야 할지를 몰라 에러가 발생한 것입니다.
  7. 에러를 해결하고 캡슐을 다시 제출합니다.
Note

training entry의 문제를 해결하는 모델링 방식과 training 예제를 태깅한 방식에 따라 달라집니다. 이슈를 해결하는 방법은 여러 가지가 있을 수 있습니다. Training의 기술을 모범 사례(best practice)로 참조하세요.

Training Entry 상태

Bixby Studio에서 각 training entry의 상태는 왼쪽 상단 모서리에 표시됩니다. "Learned"로 표시되지 않은 항목이 있는 경우 training entry나 모델에서 해결해야 할 에러가 있는 것입니다.

  • Learned: training entry를 평가하면 예상대로 해석되는 경우입니다. NL 모델이 컴파일되기 전까지는 Learned로 표시되지 않습니다. Learned vs. Not Learned Training을 참조하세요.

  • Not Learned: training entry가 컴파일되지 않았거나 현재 interpreter에서 training entry의 텍스트를 실행할 때 태깅한 것과 다른 해석이 나타납니다. Learned vs. Not Learned Training을 참조하세요.

    Note

    캡슐을 제출하기 전에 Not Learned 이슈를 모두 해결해야 합니다. 자세한 내용은 일반적인 training 권장 사항 및 모범 사례(best practice)를 참조하세요.

  • 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) 에러입니다.

Plan 확인하기

Training Action 메뉴("Compile NL Model" button 아래 있는 드롭다운 메뉴)에서 Verify All Plans 명령을 선택하여 "Unverified Plan" 상태를 모두 지울 수 있습니다. 이 명령은 완전하고 유효하며 활성화된 모든 예제에 대한 plan이 올바른지 확인하며, 캡슐의 모델, vocabulary 및 기타 데이터의 현재 상태를 기반으로 각 예제에 대한 Aligned NL에서 새 plan을 생성합니다.

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