[Bixby] Quick Start

Kim Ju Hui·2020년 3월 20일
1

Bixby

목록 보기
1/2

Bixby development center의 Quick Start Guide를 따라하며 정리한 글이다.
여기에서는 빅스비 캡슐 샘플인 주사위 굴리기 캡슐을 이용하여 진행한다.

Concept과 Action

ConceptAction은 캡슐의 구성 요소이다.

Concept : 빅스비가 알아야 할 것들(input 라고 생각하면 됨)
Action : 빅스비가 할 수 있는 행동들을 정의(method 라고 생각하면 됨)

얘네들은 ~/models/안에 정의되어 있는데, models 폴더 구성은 다음과 같다.

primitives

primitives는 integers, booleans, decimals, text와 같은 simple type variable들을 나타낸다.

아래의 코드는 NumDiceConcpet라는 변수가 integer type이며, 이 변수에 대한 설명은 description에 나와 있는 바와 같다. 이 코드처럼 변수를 설정할 수 있다.

//NumDice.model.bxb

integer (NumDiceConcept) {
  description (The number of dice to throw.)
}

structures

structures는 multiple primitives를 가지는 record이다.

아래의 코드와 같이 integer type의 SumConceptRollConcept primitive가 ~/models/primitives에 정의되어 있다고 하자.

//Sum.model.bxb
integer (SumConcept) {
  description (The total sum of all the dice rolled.)
}

//Roll.model.bxb
integer (RollConcept) {
  description (The result of a dice roll.)
}

~/models/structures 에서는 SumConceptRollConcept 모두를 가진 structure를 선언할 수 있는데, 이 방법은 다음과 같다.

//RollResult.model.bxb
structure (RollResultConcept) {
  description (The result object produced by the RollDice action.)
  property (sum) {
    type (SumConcept)
    min (Required)
    max (One)
  }
  property (roll) {
    description (The list of results for each dice roll.)
    type (RollConcept)
    min (Required)
    max (Many)
  }      
}

이 예제에서는 RollResultaction의 결과물 역할을 할 것이기 때문에 안에 정의되어있는 sumroll property는 hold되어야 한다. 따라서, 각 property마다 min (Required) 라는 조건이 붙었다. 또한, 주사위를 굴리면서 나온 눈의 합을 담는 sum property는 하나만 존재하면 되므로 max (One) 옵션이 붙었고, 주사위를 굴리면서 나온 눈의 모든 경우를 저장하는 roll property는 여러개가 존재해야 하므로 max (Many) 옵션이 붙었다.

Test the Capsule

이제 위의 예제를 돌려보자. 시뮬레이터가 아주 쌈빡하다.


왼쪽의 input panel에 다음의 스크립트를 넣고, 실행시킨다.

// Give two values (number of dice and number of sides) with the
   // goal of rolling dice
   intent {
     goal: example.dice.RollResultConcept
     value: example.dice.NumSidesConcept (6)
     value: example.dice.NumDiceConcept (2)
   }

입력값으로 하나의 goal(RollResultConcept)과 두 개의 입력(주사위 면의 개수, 주사위를 굴릴 개수)를 주었고, 이를 실행시키면 다음과 같은 결과를 얻는다.


이와 같이 주사위를 두번 굴려서 5, 2를 얻었고 주사위 눈의 합은 7인 것을 얻을 수 있다.

Debug console을 열어보면 다음과 같다. 이 예제에서는 RollDice라는 action 1개만을 이용하였지만, 비행기 티켓을 사는 것과 같은 케이스에서는 여러 개의 action이 순차적으로 진행될 수도 있다.

모르겠고 일단 필요해 보이는거 적음

자연어 학습 순서

1. 발화 입력

(캡슐이 이해하고 처리할 발화를 입력) - 문자열을 다루는 방식

enum

  • 정확하게 단어들을 나열할 수 있는 경우(범위 한정)
  • Symbol 각각에 해당 값을 나열
  • Vocab이 반드시 필요
enum (Plant) {
  description(리스트를 한정할 수 있는 경우)
  symbol (Venus)
  symbol (Earth)
}

name

  • 범위가 한정되지 않은 컨셉
  • 일부는 나열할 수 있으나, 해당하는 단어가 너무 많아 전부 다 나열할 수 없는 경우 사용
  • Vocab이 반드시 필요하지는 않지만, Vocab에 추가하는 경우 빅스비에게 추가적인 힌트를 줌으로써 태깅 성능을 높일 수 있음
name (SearchCriterion) {
  description(어쩌구저쩌구)
}

text

  • 어떤 값이 있을 지 미리 예측을 할 수 없는 경우
  • Vocab을 가질 수 없음
text (Input) {
  description(어쩌구저쩌구)
}

Vocab

  • Concept에 해당하는 단어를 저장하는 사전
  • 학습 성능에 도움을 줄 수 있기 때문에 각 타입 별로 형태에 맞추어 작성 필요함
  • 동의어를 위한 Vocab : 유사하거나 동일한 의미의 단어들을 처리할 때 해당 문구들을 나열
  • 정렬을 위한 Vocab : 결과를 정렬하고 그 정렬 방법을 변경할 수 있도록 하고 싶은 경우 vocabulary 값들을 sort key에 연결

vocab 제약사항

  • entry 개수가 정해져 있음(하나의 캡슐의 전체 concept당 최대 75000개, 하나의 concept에서는 최대 50000개)
  • 빅스비 vocab은 패턴 인식을 제공하지 않음
  • vocab의 boolean symbol은 모두 소문자로 사용함(true, false)

resources > 각 언어의 training이 있는 곳에 생성 권유

training 우클릭 > New > Vocabulary

Vocab 생성하기 - enum (Vocab 필수)

// concept
enum (Planet) {
  description(리스트를 나열할 수 있는 경우)
  symbol (Mercury)
  symbol (Venus)
  symbol (Earth)
  symbol (Mars)
}

// vocab(필수)
// key {Vocab}
vocab (Planet) {
  "Mercury" {"수성"}
  "Venus " {"금성"}
  "Earth" {"지구"}
  "Mars" {"Mars"}
}

Vocab 생성하기 - boolean

응, 네, 아니오 같은 일반적인 발화는 예약 발화로 빅스비 플랫폼에서 제공함

//concept
boolean (Confirmation) {
  extends(common.Confirmation)
}

//vocab(선택)
vocab (Confirmation) {
  "true" {
    "예약" "예약해" "결제" "결제해" "승인" "주문"
  }
  "false" {
    "안 할래" "결제 취소"
  }
}

Vocab 생성하기 - name

vocab에 포함된 단어는 학습을 따로 하지 않아도 concept을 알아서 찾음
학습을 할 때 vocab에 포함된 단어로도 일부 학습을 하고, 포함되지 않은 단어들로도 일부 학습을 하면 알아서 찾아줌.

//concept
name (SearchCriteria) {
  description(어느 정도 나열은 할 수 있지만, 개수가 한정되지 않은 것)
}

//vocab(선택)
vocab (SearchCriteria) {
  "카지노"
  "유아 동반"
  "키즈룸"
  "애완동물"
}

2. Goal 설정하기

(입력한 발화에 대해 어떤 기능을 수행할지를 결정)

Goal

각 발화에 대한 결과를 말함.

  • concept-based-goal(특정 정보에 대한 goal)은 발화의 목적이나 주어, action-based-goal(서비스나 구매 관련 goal)은 동사임
  • 학습에 goal로 사용되는 concept이나 action은 해당 캡슐에 선언되어 있는 것만 사용 가능

training 권장 원칙

  • 캡슐의 모든 query가 명확하게 해당 캡슐에 매핑되어야 함
  • 구체적인 training query를 만들 것 : 가능한 경우 non-signal 텍스트만으로도 학습 예제가 구분 되도록 training을 입력할 것
    • DO : [아보카도 샐러드] 레시피 찾아줘, [9시 뉴스] 동영상 찾아줘, [AA][1503] 항공편 현재 상태 보여줘 => [ ]안의 내용이 없어도 어떤 예제인지 구분 가능
    • DON'T : [9시 뉴스] 찾아줘

Geo Library Capsule 활용하기

bixby developer center에서 library capsule이라고 검색하면 나옴

// capsule.bxb

capsule {
  ...
  capsule-imports {
    import(viv.core) {
      as (core)
    }
    import(viv.geo) {
      as (geo)
      version (9.17.4)
    }
  }
  permissions {
    // 이 캡슐이 user-profile에 접근할 때, 팝업을 통해 사용자의 동의를 받는 것
    // viv.geo를 사용할 때는 반드시 permissions > user-profile-access를 필수로 넣어야 함
    user-profile-access
  }
}
profile
뻘짓을 많이 하는 꼬부기

0개의 댓글