빅스비 - Bixby 학습 및 개발
- 지난 8/19일부터 8/23일까지 삼성전자가 주관하여 진행했던 bixby startup 101에서 학습했던 캡슐 개발 관련 기초 내용 및 구현 방법에 대해 공유하려고 합니다.
Bixby란?
- 음성을 통한 Intelligent Assistant Service & Platform
- 글로벌 브랜드의 음성 인공지능 서비스 : AWS 알렉스, Google 어시스턴트 외
- 빅스비는 삼성인공지능 음성인식 서비스로써, 기본적으로 사용자의 ‘발화’를 인식하여 그 발화 안에서 각기 다른 유형의 변수들을 인지함으로써 내부 비즈니스 로직에 의해 결과값을 산출하는 서비스이다.
- 절차: Client –> ASR(Automatic Speech Recognition) –> NLU(Natural Language Understanding) –> Capsule <--> External Server-->
- ex) ‘오늘 날씨 알려줘’ 발화 전달
–> ASR을 통해 빅스비 플랫폼 서버에서 발화 언어를 텍스트로 변환
–> NLU에서 기본 분석 완료
–> Capsule(빅스비 서버 어플리케이션 -> 서버를 따로 다운받지 않아도 됨) <--> External Server-->
Bixby 시스템 구조
Capsule design flow
- 발화 인식 –> 모델링 처리 + 비즈니스 로직 처리 + UI/UX 구현 작업
- ex) ‘주변 맛집 찾아줘’
–> 사용자의 발화에서 중요한 의도와 명령을 찾아내는 작업 실시
–> (모델링) ‘주변’이라는 위치 정보와 ‘맛집’이라는 키워드 정보를 입력받아 특정 객체에 데이터 저장하기 위한 설계 (모델링: 중요한 명령과 의도를 파악하는 작업)
–> (비즈니스 로직) 위치정보(주변) 및 기본정보(맛집)를 전달받아 찾은 결과(‘샐러드바 식당’)를 모델링에 전달
모델링
- actions(*.model.bxb)
- 캡슐이 사용자가 원하는 작업을 이해하도록 수행할 동작 정의
- 가장 잘 판단할 것 같은 빅스비 캡슐에게 발화 전달 (이 때의 발화함수가 actions이다. 함수이므로 input, output 존재)
- concepts(*.model.bxb)
- 발화 인식 및 발화 결과를 리턴할 때 필요한 값
- ex) ‘햄버거 두개 주문해줘’
–> 햄버거 : FoodName
–> 2 : NumberOfFood
비즈니스 로직
- javascript code(*.js)
- 모델링 단계에서 정의한 actions, concepts를 바탕으로 실제 서비스 코드 구현
- 이 단계에서 서비스 API 연동 가능
- 개발자는 메뉴와 주문 정보를 저장하는 서버 구축하여 API를 통해 캡슐과 연동
UX/UI
- layout(*.layout.bxb)
- layout-macro-def 함수를 작성하여, view 에서 필요한 부분에 원하는 layout-macro 호출 가능
- view(*.view.bxb)
- 최종 결과를 사용자에게 보여주는 UX/UI 레이아웃 작업 진행
모델링 작성시 권장사항
유사한 Goal은 통합해서 최소화할 것
기존)
1
2
3
4TurnUpVolume 소리 높여줘
TurnDownVolume 소리 낮춰줘
IncreaseBrightness 밝기 높여줘
DecreaseBrightness 밝기 낮춰줘개선)
1
2
3
4
5
6
7IncreaseSettingsValue 높여줘
DecreaseSettingsValue 낮춰줘
vocab (SttingsValue) {
SoundVolume
SoundBrightness
}
vocab 작성시 권장사항
- 다른 vocab 들과 중복 지양
한 entry에 다른 표현 방법이 있다면, 이들 역시 포함할 것
1
2
3
4
5
6
7vocab(PlaceName) {
인천공항,
인천 공항,
인천국제공항,
인천 국제 공항,
인천 국제공항,
}enum vocab에 ‘key’값이 단어 set에서도 필요하다면, 단어 set 에도 한번 더 명시할 것
1
2
3
4
5
6vocab (CuisineStyle) {
"한식" {
"한식",
"한식당",
}
}태깅 시 조사는 제외
- 명사 tagging 시, 조사 제외하고 tagging 진행(“행”, “발” 등 제외)
- 명사/동사 vocab
- 기본적으로 명사를 tagging 하는 것이 권장되나, 명사 외 tagging이 필요하다면, flag나 role로 문장 전체에 tagging 가능
- 필요하다면 동사 tagging 가능하나, 주의할 점은 vocab 생성 시 다양한 표현을 입력할 것
Bixby Studio
New Capsule 생성
- capsule.bxb 파일 생성 : 해당 capsule의 id(‘.’ 기준으로 앞이 팀명, 뒤가 캡슐명) 및 기타 정보 입력
- playground.***(상용화 불가능 캡슐)
–> 상용화하기 위해서는 캡슐 id 등록 필요
–> bixby developers site 접속
–> 좌측 ‘Teams & Capsules’ 클릭
–> ‘+ Create Team’ 클릭 및 팀명 입력
–> ‘+ Register Capsule’ 캡슐명 입력
–> ‘000(팀명).000(캡슐명)’ 캡슐 생성 완료 - targets : 어떤 device에서 사용할 것인지 결정(ex. bixby-mobile-ko-KR -> language code 참고)
–> resources의 training 옵션에 영향을 미침
- playground.***(상용화 불가능 캡슐)
- code(비즈니스 로직) 폴더, models(모델링) 폴더, resources(UX/UI) 폴더 생성
모델링 폴더 세분화
- models 폴더 하위로 actions, concepts 폴더 생성
- actions : input과 output으로 이루어진 함수 (특정 js 파일이 실행될 때 input으로 받아야 할 변수명, type, min, max 값 정의 및 output으로 전달해야 할 객체 정의)
- concepts : primitives + structures로 이루어진 각 변수들의 형 type 정의 (primitives, structures 폴더 생성)
- primitives : name, integer, enum, text, boolean과 같은 형 type 정의
- Enum : 가능한 모든 value 나열 가능 (ex. 한국 프로야구 구단)
–> vocab에 관련 단어들 정의 필수 - Name : 가능한 모든 value 나열 불가능하나, 이름으로 알 수 있는 형태(ex. 서울대 근처 식당 음식 이름)
–> 가능하면 vocab 만들어서 늘어나는 training 개수 조절하는 것도 필요 - Text : 가능한 모든 value 나열 불가능하며, 이름으로도 알 수 없음(ex. 핸드폰 알람 설정 내용)
- Enum : 가능한 모든 value 나열 가능 (ex. 한국 프로야구 구단)
- structures : 여러 변수들을 갖고 있는 객체에 대한 property 정의
- roll-of 와 extends의 차이
- roll-of : 그 모델의 특성을 그대로 사용
- extends : 그 모델의 특성에 무언가 추가하여 사용
- primitives : name, integer, enum, text, boolean과 같은 형 type 정의
- 캡슐 폴더 하위로 assets 폴더 > images 폴더 > 로고 이미지 파일 추가
- 모델링 파일은 맨 앞글자를 대문자로 사용(그 이후는 camelcase 형태)
- 비즈니스 로직 관련된 것은 맨 앞글자를 소문자로 사용
- 모델링 파일의 description –> 해당 모델링에 대한 설명
비즈니스 로직 파일 생성
- code > *.js 파일 생성
- 어떤 input 데이터를 받아와서 어떤 output의 데이터를 전달할지 비즈니스 로직 작성
UX/UI 폴더 세분화
- resources 폴더 > base 폴더 > endpoints.bxb 파일 생성
- actions <--> code 연결시켜주는 역할-->
- 모델링해서 바로 외부서버와 연동해도 되는 경우, remote-endpoint에 바로 설정
- resources 폴더 > ko-KR 폴더 > training 파일 생성 (훈련 및 학습 역할)
- training은 Goal당 30개 이상 권장
- training 발화는 모두 ‘Learned’ 상태여야 함(‘Not Learned’는 대부분 vocab 오류)
- resources 폴더 > ko-KR 폴더 > dialog 폴더 생성 (상황별 화면에 조회될 메시지 전달 목적)
- resources 폴더 > ko-KR 폴더 > layout 폴더 생성 (사용자에게 제공할 UX/UI 레이아웃)
- resources 폴더 > ko-KR 폴더 > views 폴더 생성(사용자에게 제공할 UX/UI 뷰)
- resources 폴더 > ko-KR 폴더 > vocab 폴더 생성 (models > concepts > primitives에서 정의한 enum 변수에 대해 연관있는 모든 단어들을 정의)
- resources 폴더 > ko-KR 폴더 > capsule-info.bxb 파일 생성(캡슐에 대한 기본 정보 입력)
- resources 폴더 > ko-KR 폴더 > 000.hints.bxb 파일 생성(빅스비 캡슐의 원활한 학습을 위해 사용자로부터 예상되는 발화에 대한 문구 입력)
- hints는 10개 이상 작성 권장
Bixby 테스트
빅스비 캡슐의 학습 및 훈련 실시
- resources > ko-KR > training 클릭
- ‘Adding New Training’ 부분에 ‘햄버거 1개랑 콜라1개 주문해’ 발화 입력
- ‘Goal’부분에 발화가 실행되길 원하는 actions 이름 입력
- ‘NL’에서 input으로 받아올 데이터와 일치하는 부분의 발화 드래그 > concepts에서 해당 데이터 이름 입력
- ex) ‘햄버거 1개 주문해줘’
–> 햄버거 : FoodName
–> 1개 : NumberOfFood
- ex) ‘햄버거 1개 주문해줘’
- 우측 상단의 ‘Compile NL Model’ 버튼 클릭
- 등록한 발화들의 상태가 Not Learned -> Learned 로 변환
- 특정 발화의 ‘Open In Simulator’ 클릭하여 예상 시뮬레이션 진행
Training 시 권장사항
- 표현이나 띄어쓰기는 최소한 ASR 기준으로 지원
- 예를 들어, ‘삼성 뮤직’은 ASR에서 ‘Samsung Music’으로 변환되듯이 형태 달라질 수 있음
- Goal 당 10개 미만의 학습은 지양
- 다양한 형태의 parameter 학습
- 단어수와 형태가 다양한 entry(숫자, 한글, 영어)들이 존재한다면 이들에 대한 학습 필수
모바일 빅스비에서 실제 발화 테스트
- 모바일 빅스비 > 설정 > 빅스비 보이스 정보 > 버전 부분을 톡톡 터치 > 개발자 옵션 on
- 모바일 빅스비 > 설정 > 개발자 옵션 > 디바이스로 테스트하기 > 사용중 > Revision ID > bixby studio에서 submission history의 ID 입력
OAuth 연동 방법
현재 빅스비는 구글 OAuth만 연동 가능
구글 사용자 인증정보 만들기 > OAuth 클라이언트 ID 클릭 > 웹 애플리케이션 선택 > 이름 입력 > aibixby.com 입력 > 승인된 리디렉션 URI > https://jonus-jonus.oauth.aibixby.com/auth/external/cb 입력 > 클라이언트 Id, 보안비밀 확인
capsule id를 capsule.bxb에 입력
- 캡슐 폴더 하위로 authorization.bxb 생성
1
2
3
4
5
6
7
8
9
10
11
12
13authorization {
// Google book api에 대한 OAuth 권한을 얻은 후, OAuth_URI, client_id, client_secret, Token_URI를 알맞은 정보로 변경
user {
oauth2-authorization-code (google){
authorize-endpoint (https://accounts.google.com/o/oauth2/v2/auth)
client-id (570500524886-a2hdpg3qvgt29avko6lvo4q3is28520i.apps.googleusercontent.com)
client-secret-key (jonus)
//client-secret은 team -> capsule에서 설정 (https://bixbydevelopers.com/dev/docs/reference/ref-topics/capsule-config#config-secrets)
scope (email profile openid https:/ /www.googleapis.com/auth/books)
token-endpoint (https:/ /www.googleapis.com/oauth2/v4/token)
}
}
}
Posted
tags:
{ Javascript }
{ Bixby }