SlideShare a Scribd company logo
1 of 48
Download to read offline
Interaction Model의 이해 및
설계/제작 노하우
Search&Clova NLP/대화
김용희
2 / 48
Contents 1
2
3
4
NLU(Natural Language Understanding)란
NLU 기술: 기계 학습
Interaction Model(NLU) 제작 노하우
Interaction Model(NLU) 데이터 제작 노하우
3 / 48
1 NLU란?
Natural Language Understanding
4 / 48
Natural Language Understanding
대화시스템 flow (classical architecture, but typical in industry)
4 / 48
NLU
(의미분석)
DM
(대화관리)
ASR
(음성인식)
Platform
TTS
(음성합성)
Client
NLG
(응답생성)
CEK Interaction Model
(NLU는 학계/업계에서 보편적으로 쓰는 이름)
5 / 48
Natural Language Understanding
컴퓨터는 0 or 1:
categorical information만을 처리 가능
Q: NLU는 왜 존재할까…?
A: 사람의 말을 기계가 처리할 수 있도록 번역
Menu DB
Weather
API
Dialog
Manager
(날씨 상태)
서울, 2018.02.24
굽네치킨
(가격 정보)
내일 서울 날씨
굽네치킨 얼마야
NLU
6 / 48
Natural Language Understanding
NLU 문제 정의 (the most popular one)
• Intent: 서술어+목적어를 표현하는 의미 카테고리
• Slots: 고유명사, 이름, 날짜/숫자 등 DM에 필요한 유용한 정보
Intent X Slots 조합으로 DM 조건분기 가능
“소리 3으로”
Q. 화자의 의도로 적절한 것을 고르시오.
(1) 소리를 켠다
(2) 소리를 끈다
(3) 소리를 키운다
(4) 소리를 줄인다
(5) 소리 크기를 특정 값으로 설정한다
Slot 추출 (with slot type)
소리 <3:number>으로
if intent == 1:
turnon_volume()
elif intent == 2:
turnoff_volume()
elif intent == 3:
num_slot = find_number_slot(slots)
offset = num_slot.value if num_slot else 1
up_volume(offset)
elif intent == 4:
num_slot = find_number_slot(slots)
offset = num_slot.value if num_slot else 1
down_volume(offset)
elif intent == 5:
num_slot = find_number_slot(slots)
if num_slot:
set_volume(num_slot.value)
DialogManager code
7 / 48
Natural Language Understanding
Intent의 역할: 표현의 다양성 문제 줄이기
• 사람은 같은 의미/의도를 전달할 때도 다양한 표현을 사용
• 서술어+목적어가 의미적으로 동일한 문장들을 한 카테고리로 묶습니다.
 명사보단 서술어(동사/형용사) 쪽의 표현이 훨씬 다양하니까요
User can say…
소리 키워
볼륨 업
음량을 높여줘
소리 크기 좀 키워줘
사운드 올려라
…
DialogManager code…? (without NLU)
if input == “소리 키워”
or input == “볼륨 업”
or input == “음량을 높여줘”
or input == “소리 크기 좀 키워줘”
or input == “사운드 올려라”:
up_volume(1)
elif input == “blarblar”:
down_volume(1)
한국어가_배우기_어려운_이유.jpg
NLU를_만들기_어려운_이유.jpg
8 / 48
Natural Language Understanding
Slot의 역할: 정보의 type 분류 및 정규화
• 역시 표현의 다양성 문제를 줄이는 효과
• API 및 함수의 호출 인자로 쓰기 적합한 형태로 가공
User can say…
다섯시 반에 티비 꺼줘
5:30에 TV 꺼줘
5시 30분에 텔레비젼 꺼줘
5시 반에 테레비 꺼줘
다섯시 삼십분에 티브이 꺼줘
DialogManager code (with NLU)
device: ”TV”
time: ”5:30”
NLU result
device_slot = find_device_slot(slots)
time_slot = find_time_slot(slots)
if device_slot.value == ‘TV’:
turnoff_tv(time_slot)
elif device_slot.value == ‘Fan’:
turnoff_fan(time_slot)
9 / 48
2 NLU 기술: 기계 학습
10 / 48
NLU 기술: 기계 학습
용어 Terms
통계모델 Statistical Model
인공지능 AI(Artificial Intelligence)
딥러닝
Deep Learning
뉴럴넷 Neural Network
기계학습 Machine Learning
참고: NLU는 NLP의 한 분야입니다.
• Natural Language Processing
• Natural Language Understanding
NLP
NLU
통계모델
기계학습
11 / 48
NLU 기술: 기계 학습
1인칭 컴퓨터 시점(…)을 체험해봅시다.
(1) पिज़्ज़ा मंगव़ाओ
• भुना हुआ माांस पिज्जा की एक प्लेट का आदेश दें
• सांयोजन प्लेट का आदेश दें
• हवाईयन पिज्जा एक प्लेट प्रसव
• मुझे एक चीज़ पिज्जा दे दो
• मुझे एक आलू का पिज्जा ले आओ
(2) पिज्ज़ा को सूचित करें
• िेिरोनी पिज्जा ककतना है
• िेिरोनी कब तक करता है?
• िेिरोनी कीमत
• िेिरोनी पिज्जा खरीदने के ललए ककतना खचच होता है?
• मुझे िेिरोनी की मात्रा बताएां
(3) ऑर्डर ज़ांिें
• कब पवतरण है
• मैं वहाां कब िहुुँचा?
• मुझे पिज्जा कब लमलेगा?
• डिलीवरी का समय क्या है?
• डिललवरी आगमन समय
다음 문장은 몇 번 그룹?
“िेिरोनी दो प्लेटें कृ िया”
12 / 48
NLU 기술: 기계 학습
가장 합리적인 추론 전략?
• 각 카테고리 별 단어/글자/구절의 빈도 체크
• 특정 카테고리에만 자주 등장하는 단어/글자/구절은 ‘핵심 단서’
• 아무리 자주 등장하더라도, 모든 카테고리에 고르게 등장하는 단어/글자/구절은 중요 단서가 되지 못 함
(1) OrderPizza
불고기 피자 한 판 주문해줘
콤비네이션 한 판 주문해
하와이안 피자 한 판 배달
치즈피자 한 판 시켜줘
포테이토피자 한 판 갖다줘
(2) InformPizza
페퍼로니 피자 얼마야
페퍼로니 두 판은 얼마나 해
페퍼로니 가격
페퍼로니 피자 사려면 얼마 내야해
페퍼로니 금액 알려줘
(3) CheckOrder
배달 언제쯤 와
언제쯤 도착해
피자 언제쯤 받을 수 있어
배달 몇 시에 와
배달 도착 시간
다음 문장은 몇 번 그룹?
“페퍼로니 두 판 배달해줘”
13 / 48
NLU 기술: 기계 학습
(1) OrderPizza
불고기 피자 한 판 주문해줘
콤비네이션 한 판 주문해
하와이안 피자 한 판 배달
치즈피자 한 판 시켜줘
포테이토피자 한 판 갖다줘
(2) InformPizza
페퍼로니 피자 얼마야
페퍼로니 두 판은 얼마나 해
페퍼로니 가격
페퍼로니 피자 사려면 얼마 내야해
페퍼로니 금액 알려줘
(3) CheckOrder
배달 언제쯤 와
언제쯤 도착해
피자 언제쯤 받을 수 있어
배달 몇 시에 와
배달 도착 시간
(백지 상태에서 학습)
“페퍼로니”란 단어가 있으면
InformPizza인가보네
 OrderPizza나 CheckOrder 쪽 문장들에선
나타나지 않아, InformPizza를 판별하는
핵심 단서로 판단
“피자”라는 표현은 아무데나 다
나타나는 걸 봐선 별로 중요하지
않은 단서인 것 같고…
“얼마”라는 단어는 InformPizza
쪽에만 등장하는 것 같아
“배달”이라는 단어는
OrderPizza에서도 쓰지만
CheckOrder쪽에서 더 자주 쓰네
 상대적 빈도를 중요한 정보로 사용.
“통계 모델”이라고 부르는 이유
14 / 48
NLU 기술: 기계 학습
컴퓨터가 답을 찾는 과정 (예시)
(학습 끝남)
(문제를 풀어보자)
Q: 리치골드피자 주문해라
“리치골드”는 처음 보는 단어인데…
모르겠다
”피자 주문”이란 표현은 본 적 없고
“주문”이란 단어가 있는 걸 봐선
OrderPizza인가..?
OrderPizza라고 하기엔 “한 판”이란
단어가 없는데..? 고민되네..
A: OrderPizza..?
Q: 페퍼로니 두 판 배달해줘
오 나 이거 알아! “페퍼로니” 나왔어
게다가 “페퍼로니 두 판”은 완전
InformPizza에 나왔던 표현이야
”배달”이란 표현은 OrderPizza나
CheckOrder에도 가끔 나올 수 있는데…
그래도 “페퍼로니” 나왔는데 뭐
A: InformPizza!!
“해”, ”해줘”란 표현은 OrderPizza에
몇 번 본 적이 있긴 한데
15 / 48
NLU 기술: 기계 학습
‘빌드’ 과정 중에는 무엇을 할까?
• 데이터 분석을 통한 최적의 전략 수립
• Trial-and-error 방식으로
• …그러다보니 시간이 걸립니다.
바로 이 버튼…
16 / 48
NLU 기술: 기계 학습
‘빌드’ 과정 중에는 무엇을 할까?
1. 가설을 세운다. (적당히…)
단서: 단어 “페퍼로니”가 등장한다면
 (1) OrderPizza: -3점
 (2) InformPizza: +10점
 (3) CheckOrder: -3점
단서: 단어 “피자”가 등장한다면
 (1) OrderPizza: +2점
 (2) InformPizza: +1점
 (3) CheckOrder: +0점
단서: 단어 “얼마”가 등장한다면
 (1) OrderPizza: -3점
 (2) InformPizza: +6점
 (3) CheckOrder: -3점
단서: 단어 “배달”이 등장한다면
 (1) OrderPizza: -3점
 (2) InformPizza: -3점
 (3) CheckOrder: +6점
17 / 48
NLU 기술: 기계 학습
‘빌드’ 과정 중에는 무엇을 할까?
2. 가설을 이용해 자체 모의 평가를 한다.
문제 (1) (2) (3) 최종 답안
불고기 피자 한 판 주문해줘 +5 -1 +1 OrderPizza
콤비네이션 한 판 주문해 +3 -2 +4 CheckOrder
하와이안 피자 한 판 배달 +3 -1 +5 CheckOrder
치즈피자 한 판 시켜줘 … -1 … OrderPizza
포테이토피자 한 판 갖다줘 … … … OrderPizza
페퍼로니 피자 얼마야 … … … InformPizza
페퍼로니 두 판은 얼마나 해 … … … InformPizza
페퍼로니 가격 … … … InformPizza
페퍼로니 피자 사려면 얼마 내야해 … … … InformPizza
페퍼로니 금액 알려줘 … … … InformPizza
배달 언제쯤 와 … … … OrderPizza
언제쯤 도착해 … … … CheckOrder
피자 언제쯤 받을 수 있어 … … … CheckOrder
배달 몇 시에 와 … … … CheckOrder
배달 도착 시간 … … … CheckOrder
100점 만점에
80점!
18 / 48
NLU 기술: 기계 학습
‘빌드’ 과정 중에는 무엇을 할까?
3. 가설을 조금씩 수정한다. (모의평가 성적이 높아질 수 있는 쪽으로…)
단서: 단어 “페퍼로니” 등장
 (1) OrderPizza: -3.3점
 (2) InformPizza: +10.2점
 (3) CheckOrder: -3.2점
단서: 단어 “피자” 등장
 (1) OrderPizza: +1.9점
 (2) InformPizza: +0.9점
 (3) CheckOrder: +0.1점
단서: 단어 “얼마” 등장
 (1) OrderPizza: -3.1점
 (2) InformPizza: +6.3점
 (3) CheckOrder: -3.2점
단서: 단어 “배달” 등장
 (1) OrderPizza: -2.6점
 (2) InformPizza: -3.2점
 (3) CheckOrder: +5.7점
19 / 48
NLU 기술: 기계 학습
‘빌드’ 과정 중에는 무엇을 할까?
1. 가설을 세운다. (적당히…)
2. 가설을 이용해 자체 모의 평가를 한다.
3. 가설을 조금씩 수정한다.
2. 바뀐 가설을 이용해 모의 평가를 한다.
3. 가설을 조금씩 수정한다.
2. 바뀐 가설을 이용해 모의 평가를 한다.
3. …
……반복 (점수가 최대한 높아질 때까지)
20 / 48
NLU 기술: 기계 학습
Slot 추출: 원리는 비슷
• Prediction 단위
• (한중일 언어) 대세는 문자 단위로 prediction
• (알파벳 계통의 언어) word 단위로 prediction
• 단서로 삼는 정보
• Prediction 대상 전후 n개(window) 내부의 문자열
• Predicted sequence가 유사한지/자연스러운지?
*훈련용 말뭉치(Training Corpus)
불고기 피자 한 판 주문해줘
콤비네이션 한 판 주문해
페퍼로니 두 판은 얼마나 해
피자 언제쯤 받을 수 있어
 리치골드피자 주문해라
! ! ! ?
(단서)
21 / 48
NLU 기술: 기계 학습
학습에 도움이 될 만한 정보 보충
• 형태소 분석 정보
• 동사/명사가 조사/어미보다 더 중요한 정보라는 걸 스스로 파악하게 되는 건 아니지만…
• 동음이의어를 분간해내거나, 동사/형용사의 원형을 기준으로 비교할 수 있게 되어
공통점/차이점 찾기가 수월해지는 효과
볼륨 올려  볼륨/NOUN 올리/VERB+어/EOMI
볼륨 올리세요  볼륨/NOUN 올리/VERB+세요/EOMI
볼륨 올려 ≒ 볼륨 올리세요
22 / 48
NLU 기술: 기계 학습
학습에 도움이 될 만한 정보 보충
• Slot candidate 정보
• Slot DB 정보 (built-in slot, extension-specific slot)
• Regex를 이용해 추출한 built-slot 정보
대표값 동의어/유의어
불고기피자 불고기
콤비네이션피자 콤비네이션, 콤비네이숀, 컴비네이션
페퍼로니피자 페퍼로니
리치골드피자 리치골드
루꼴라피자 루꼴라
… …
<PIZZA_TYPE> <Clova.NUMBER>
def CNUM 한:1|두:2|세:3|네:4|… ;
def DIGIT 1|2|3|4|5|6|7|8|9 ;
def UNIT 판|개 ;
slot <number value=[CNUM|DIGIT] unit=UNIT> ;
불고기 피자 한 판 주문해줘 ≒ 리치골드 피자 두 판 주문해줘
페퍼로니 피자 얼마야 ≒ 루꼴라 피자 얼마야
23 / 48
NLU 기술: 기계 학습
장점
• 훈련 말뭉치에서 본 적 없는 표현도 분석 가능
• 구어체/대화체 발화는 표현 방식이 다양하며, 음성인식 오류가 더 많기 때문에 특히 중요
단점
• 훈련 말뭉치의 빈도 및 밸런스가 중요함
• 실 사용자들의 표현 빈도를 따라간다면 이상적
• 제공된 카테고리와 무관한 문장의 경우, 어떤 카테고리로 분류될지 예측 불가
• N개의 보기 중에 답이 하나는 있겠지… (‘보기 중에 정답 없음’은 잘 안 찍게 됨)
24 / 48
NLU 기술: 기계 학습
단점
• 제공된 카테고리와 무관한 문장의 경우, 어떤 카테고리로 분류될지 예측 불가
• N개의 보기 중에 답이 하나는 있겠지… (‘보기 중에 정답 없음’은 잘 안 찍게 됨)
배고파
야 이 멍청아 볼륨 올려
티비 채널 내려
안녕 무한도전 틀어줘
뽀로로 보고싶어
아이유 노래
도미노피자 주가
지금 미세먼지 어때
나루호도…
엄마한테 전화좀
문좀 닫아라
이불펴
빨래좀 개
생수 주문해
BMW 가격
영미!!
경덕님 축하
메일 읽어줘 오늘 메뉴 뭐야
오꾸닭 메뉴 뭐있어
도미노피자 얼마야
배달 얼마걸려
반반무많이
주문취소
암호는 xxxx
소리 꺼
25 / 48
NLU 기술: 기계 학습
단점을 극복(?)하는 방법
• invocation name을 불렀을 때만 CEK 실행
• 사용자가 의도적으로 호출한 것이므로, 서비스 범위 밖의 ‘돌발 질문’은 적게 할 것
• Amazon에서 처음 도입: 기술의 한계를 기획/서비스로 커버한 케이스
클로바,
배달의민족에서
치킨 시켜줘
26 / 48
3 Interaction Model(NLU)
제작 노하우
27 / 48
Interaction Model(NLU) 제작 노하우
NLU를 잘 만들기 위해서는?
• 말뭉치 잘 만드세요
• 훈련용 문장을 정성 들여 제작하세요
• 그니까 Intent별 발화 예시를 잘 적어줘요
• 사용자 발화 문장 많이 써내시구요
• 표현 문장을 다양하게 작성해주세요
…그러고도 여력이 된다면 딥러닝 공부해서 열심히 모델링해보고, 파라미터 튜닝해보세요.
28 / 48
Interaction Model(NLU) 제작 노하우
데이터만 잘 만들면 다 되나?
 네, 성능의 90%는 훈련 데이터가 좌우합니다.
 레스토랑: NLU
재료: 말뭉치 요리사: 기계학습 모델
29 / 48
Interaction Model(NLU) 제작 노하우
데이터만 잘 만들면 다 되나?
 좋은 데이터를 만드는 쪽이 훨씬 쉽습니다.
 전문지식/기술 없이도 가능하구요.
 레스토랑: NLU
재료: 말뭉치 요리사: 기계학습 모델
30 / 48
4 Interaction Model(NLU)
데이터 제작 노하우
31 / 48
Interaction Model(NLU) 데이터 제작 노하우
아까의 예제는 뭐가 문제였을까…?
• “페퍼로니”가 (2)에만 100% 등장
• “한 판”이 (1)에만 100% 등장
• “얼마”라는 표현은,
• (3)에도 나올 수 있을 텐데 (ex. “얼마나 걸려?”)
• (2)에만 높은 빈도로 등장하고 있음
(1) OrderPizza
불고기 피자 한 판 주문해줘
콤비네이션 한 판 주문해
하와이안 피자 한 판 배달
치즈피자 한 판 시켜줘
포테이토피자 한 판 갖다줘
(2) InformPizza
페퍼로니 피자 얼마야
페퍼로니 두 판은 얼마나 해
페퍼로니 가격
페퍼로니 피자 사려면 얼마 내야해
페퍼로니 금액 알려줘
(3) CheckOrder
배달 언제쯤 와
언제쯤 도착해
피자 언제쯤 받을 수 있어
배달 몇 시에 와
배달 도착 시간
32 / 48
Interaction Model(NLU) 데이터 제작 노하우
아까의 예제는 뭐가 문제였을까…?
(1) OrderPizza
불고기 피자 한 판 주문해줘
콤비네이션 1판 주문해
하와이안 피자 두 판 배달
치즈피자 세 판 시켜줘
포테이토피자 2판 갖다줘
(2) InformPizza
페퍼로니 피자 얼마야
루꼴라 피자 두 판은 얼마나 해
트리플 치즈 피자 가격
미트볼 피자 사려면 얼마 내야해
콤비네이션 금액 알려줘
(3) CheckOrder
배달 얼마나 걸려
언제쯤 도착해
피자 언제쯤 받을 수 있어
주문한 거 몇 시에 와
아까 시킨거 도착 시간
(1) OrderPizza
불고기 피자 한 판 주문해줘
콤비네이션 한 판 주문해
하와이안 피자 한 판 배달
치즈피자 한 판 시켜줘
포테이토피자 한 판 갖다줘
(2) InformPizza
페퍼로니 피자 얼마야
페퍼로니 두 판은 얼마나 해
페퍼로니 가격
페퍼로니 피자 사려면 얼마 내야해
페퍼로니 금액 알려줘
(3) CheckOrder
배달 언제쯤 와
언제쯤 도착해
피자 언제쯤 받을 수 있어
배달 몇 시에 와
배달 도착 시간
BEFORE (나쁜 예)
AFTER (좋은 예)
33 / 48
Interaction Model(NLU) 데이터 제작 노하우
데이터는 양보다 질입니다.
• 물론 품질이 좋다면 양도 많은 게 좋습니다. (관리도 힘들고, 훈련도 오래 걸리긴 하지만…)
• 금지: 엑셀 파워핸들로 모든 표현 조합 만들기. 그럴 거면 그냥 정규표현식을 쓰세요…
(1) PlayAnimalSound
개소리 틀어
개소리 틀어라
개소리 틀어줘
개소리 틀어주세요
개소리 틀어봐
개소리 틀어봐라
개소리 듣고 싶다
개소리 들려줘
개소리 들려줘라
개소리 들려주세요
개소리 들려줘봐
개소리 들려줘봐라
개소리 내
개소리 내라
개소리 내줘
개소리 내주세요
개소리 내봐
개소리 내봐라
(1) PlayAnimalSound
개 소리 틀어주세요
고양이 소리 들려줘
늑대 우는 소리 내봐
까치 소리 듣고 싶어
소 울음 소리 좀 내줘
멍멍 짖어봐요
나쁜 예: 가능한 모든 조합을 기계적으로 생성 좋은 예:
34 / 48
Interaction Model(NLU) 데이터 제작 노하우
좋은 데이터로 학습하면, 양이 적더라도 처음 보는 문제 역시 잘 맞출 수 있습니다.
(1) PlayAnimalSound
개 소리 틀어주세요
고양이 소리 들려줘
늑대 우는 소리 내봐
까치 소리 듣고 싶어
소 울음 소리 좀 내줘
멍멍 짖어봐요
(2) Blarblar
…
(3) FooBar
…
(학습)
샐리야,
고양이 울음소리 틀어봐
“고양이”
“울음 소리”
“소리/NOUN 틀다/VERB”
전부 다 (1)에서 본 표현…
야옹~ 이야아아옹
35 / 48
Interaction Model(NLU) 데이터 제작 노하우
의미/형태가 거의 같은 문장이, 서로 다른 카테고리에서 등장하지 않도록 주의합니다.
(분류 기준에 일관성이 있어야 합니다.)
(1) FastForward
20초만큼 앞으로 가줘
10초 뒤로 점프해줘
30초 후부터 재생
1분 뛰어넘고 플레이
(2) Rewind
5분 앞으로 가줘
15초 뒤로 가기
10초 되감기 해줘
3분 전 지점부터 재생
(사람A가 작성)
(사람B가 작성)
“만큼”이 있으면 (1)인가???
“20초”가 있으면 (1)이고
”5분”이 있으면 (2)인가??
몰라요…
나쁜 예: 비슷한 문장이 양쪽에 등장
36 / 48
Interaction Model(NLU) 데이터 제작 노하우
Slot 역시 기준에 일관성이 있어야 합니다.
• slot range와 slot name을 정하는 기준이 일관돼야 합니다.
• 참고: slot 추출기 학습엔 intent 상관 없이 모든 데이터를 한꺼번에 사용합니다
(1) turnoff
<device>에어컨</device> 꺼줘
두 시에 <device>불</device> 소등
<device>공기청정기</device> 끄자
<device>선풍기</device> 그만 돌려
(2) checkStatus
<target>에어컨</target> 상태 알려줘
<target>전등</target> 지금 무슨 색이야
<target>공기청정기</target> 켜졌니
<target>선풍기</target> 꺼있어?
“선풍기” 뒤에 “그만”이 있으면
“선풍기”는 <device>이고,
”선풍기” 뒤에 “꺼”가 있으면
“선풍기”는 <target>인가???
샐리야, 선풍기 꺼
지원하지 않는 기기입니다
나쁜 예: intent별로 slot name을 다르게 정의
#turnoff_fan(device_slot)
turnoff_fan(target_slot)
DM:
응답:
37 / 48
Interaction Model(NLU) 데이터 제작 노하우
Slot 역시 기준에 일관성이 있어야 합니다.
• DB 및 말뭉치 양이 많을 경우 ‘고난도 변별력 기르기 문제’도 함께 학습시키면 좋습니다.
(1) playMusic
노래 재생
<genre>클래식</genre> 틀어줘
<composer>베토벤</composer>의 <genre>클래식</genre>으로 들려줘
영화 <movie>클래식</movie> <genre>OST</genre> 틀어줘
<music>재생</music>이라는 노래 재생해줘
<singer>멜로망스</singer>의 <music>좋아요</music> 재생해줘
(2) likeMusic
<singer>멜로망스</singer>를 좋아요 해줘
<singer>아이유</singer>의 <music>좋은날</music> 찜해줘
지금 노래 즐겨찾기에 등록해줘
이 노래에 좋아요 표시해둬
좋은 예: 변별력 기르기 문제를 많이 포함
“클래식”은 <genre>일 때가 많지만
“영화”가 붙으면 <movie>가 돼.
“재생”이 문장 끝에 올 때는
slot이 아니지만,
“재생” 뒤에 “이라는 노래”가 오면
<music> slot으로 봐야겠네
38 / 48
Interaction Model(NLU) 데이터 제작 노하우
Unseen slot 추출
• Unseen slot이란?
• Slot DB에 등장한 적 없는 slot을 말합니다.
• Unseen slot은 ‘대표값’ 정규화가 불가능합니다.
• DM에서 slot의 대표값을 이용하고자 한다면, DB에 최대한 동의어를 등록 해두는 게 좋습니다.
대표값 동의어/유의어
TV 티비, 티브이, 테레비, 텔레비전, 텔레비젼
에어컨 에어콘
전등 불, 등, 형광등, 백열등
… …
<DEVICE>
클로바, 티비 켜줘
네, TV를 켤게요
클로바, 전구 켜줘
지원하지 않는 기기에요
39 / 48
Interaction Model(NLU) 데이터 제작 노하우
Unseen slot 추출
• Unseen slot이란?
• Slot DB에 등장한 적 없는 slot을 말합니다.
• Slot DB가 너무 크다면, 사람이 동의어를 모두 등록해줄 수 없습니다. (music, movie, POI, …)
대표값 동의어/유의어
거꾸로 강을 거슬러 오르
는 저 힘찬 연어들처럼
거꾸로 오르는 연어들처럼, 강물
을 거꾸로 오르는 힘찬 연어처럼,
거꾸로 강물을 오르는 연어, …
솔아솔아 푸르른 솔아
… …
<MUSIC>
클로바, 강물을 거슬러 오르는
연어들처럼 틀어줘
찾을 수 없는 곡이에요
솔아 푸른 솔아 틀어줘
몰라요
40 / 48
Interaction Model(NLU) 데이터 제작 노하우
Unseen slot 추출
• Unseen slot이란?
• Slot DB에 등장한 적 없는 slot을 말합니다.
• Slot DB에 일일이 나열할 수 없는 slot은 무조건 Unseen slot이어야 합니다. (wildcard-slot)
(1) sendMessage
시금치 한 단만 사오라고 동생한테 문자해줘
올때 메로나라고 엄마한테 톡해줘
두시 반에 만나자고 애인한테 메시지 보내
대표값 동의어/유의어
시금치 한 단 사오기 시금치 한 단만 사오기, 시금치좀
한 단 사오기, 시금치 한 단 사기,
시금치 한 단만 사기, …
올때 메로나 오면서 메로나, 올때 메로나 사기,
올때 메로나 사오기, …
… …
<MESSAGE_CONTENT>
…이런 slot DB 작성은, 절대로 가능하지 않습니다.
41 / 48
Interaction Model(NLU) 데이터 제작 노하우
Unseen slot 추출
• Slot DB 크기가 작은 경우
• 훈련 말뭉치에서 Unseen slot 비율을 0%로 만들어줍시다.
(1) turnon
TV 켜줘
에어컨 틀어줘
공기청정기 돌려
스피커 키세요
(2) turnoff
보일러 꺼줘
전구 소등해줘
선풍기 끄자
스피커 턴오프
대표값 동의어/유의어
TV 티비, 티브이, …
에어컨 에어콘
전등 불, 등, 전구, …
공기청정기 공청기
보일러 온돌
스피커
선풍기
<DEVICE>
Slot DB에 없는 이름을 Slot이라고
분석해낸 사례가 하나도 없어.
Slot DB에 없는 이름은
Slot일 가능성이 정말정말 적어
좋은 예: Small DB 사용 시 Unseen slot 미포함
42 / 48
Interaction Model(NLU) 데이터 제작 노하우
Unseen slot 추출
• Slot DB 크기가 아주 큰 경우
• 훈련 말뭉치에 Unseen slot도 일부(5~10%?) 섞어줍시다
(1) playMusic
아이유의 좋은날 재생해줘
언니쓰 맞지 틀어라
빨간맛 들려줘
거꾸로 강을 거슬러오르는 연어 노래 틀어줘
라 벤타나 음악 재생
Slot DB에 일치하는 항목이 없어도
Slot일 가능성이 조금은 있네.
글자 뒤에 “틀”, “노래 틀”이나
“재생” 같은 단어가 있으면 되나…
Comment.
 Unseen slot을 섞어 학습하려면 훈련 문장이 굉장히 많이 필요합니다. (최소 수백 문장 이상 권장)
 ‘Slot DB와 일치 여부’라는 단서는 비교적 쉽고도 명료했으나,
‘단어 앞뒤 문맥’이라는 단서는 경우의 수가 많기 때문입니다.
좋은 예: Large DB 사용 시 Unseen slot 포함
43 / 48
Interaction Model(NLU) 데이터 제작 노하우
Unseen slot 추출
• Wild-card slot을 쓸 때
• Slot DB를 아예 비워 둡시다. (‘문맥’ 단서만 100% 학습하도록)
• 기계학습보단 정규표현식을 쓰는 게 나을 수도 있습니다. (추후 기능 지원 예정)
(1) translate
안녕하세요를 영어로 번역해줘
두시에 점심 먹어요를 통역해봐
버스타는곳 알려주세요를 중국어로 뭐라그래?
덮밥에 김 얹어주세요를 일본어로 말해줘
공부가 프랑스어로 뭐야?
좋은 예: Wildcard-slot은 모두 Unseen slot으로 작성
대표값 동의어/유의어
<PHRASE>
“~를 {language}로” 형식에선
앞에 오는 “~” 구절이 slot이야
44 / 48
Interaction Model(NLU) 데이터 제작 노하우
Intent or Slot?
• 가급적 명사(또는 명사구)만을 Slot으로 설정합시다.
• ‘명사형’이 아닌 구절을 Slot DB 동의어로 전부 작성하려면 힘들어요.
• Slot range 잡기도 애매해요.
(1) informDate
동생 태어난 날이 언젠지 알아?
용희 생일이 언제야?
부모님 결혼기념일이 언제지
세종대왕은 언제 출생했을까
애플이는 태어난지 얼마나 됐을까
대표값 동의어/유의어
생일 탄신일, 태어난 날, 태어난지, 출생
일, 출생한 날, 태어, 출생, …
결혼기념일 결혼한 날, 결혼한 날짜, 결혼
<SPECIAL_DATE>
나쁜 예: 동사/형용사를 Slot으로 설정
 훈련 데이터 작성할 때 실수로 일관성을 지키지 못 하는 일이 많아집니다.
어떤 문장은 “태어”까지만 <special_range> slot으로 설정하고,
어떤 문장은 “태어난지”까지를 <special_range> slot으로 설정했습니다.
 일관성이 없는 데이터로 훈련하면, 분석 결과도 일관성이 없게 됩니다.
45 / 48
Interaction Model(NLU) 데이터 제작 노하우
Intent or Slot?
• 어떤 개체의 속성이나, 문장 전체의 서술어에 해당하는 부분은 Intent category로 나타내는게 낫습니다.
• 예외: 한 문장 안에 속성/서술어가 둘 이상인 경우
• 둘 중 하나는 slot으로 정의해야 할 때도 있습니다.
• 표현 다양성이 적은 쪽을 slot으로 설정합시다.
(1) InformBirthday
동생 태어난 날이 언젠지 알아?
용희 생일이 언제야?
애플이는 태어난지 얼마나 됐을까
(2) InformWeddingAnniversary
부모님 결혼기념일이 언제지
우리 결혼한 날짜 알려줘
나 결혼식이 언제였을까
좋은 예: 동사/형용사를 intent로 구분
(1) informDate
동생 태어난 날이 몇월 며칠인지 알아?
용희 생일이 언제야?
부모님 결혼기념일이 언제지
(2) countDownDate
유진이 5살 되려면 얼마 남았어
내 생일까지 며칠 남았지
엄마 생신이 얼마 뒤에 있지?
부득이한 경우: 동사/형용사가 둘 이상이어서 하나를 slot으로 설정한 경우
46 / 48
Interaction Model(NLU) 데이터 제작 노하우
필요한 데이터의 양 (참고: 절대적인 수치는 아닙니다)
• Intent 하나 당 적정 문장 수: 20문장~
• Slot name 하나 당 적정 문장 수
• Small DB Case: 20문장~
• Large DB Case: 수백 문장~
• Wildcard-Slot Case: 50문장~
 Slot name당 문장 수는
이렇게 샙니다.
<composer>: 1문장
<genre>: 2문장
<movie>: 1문장
<music>: 3문장
<singer>: 3문장
(1) playMusic
노래 재생
<genre>클래식</genre> 틀어줘
<composer>베토벤</composer>의 <genre>클래식</genre>으로 들려줘
영화 <movie>클래식</movie> <genre>OST</genre> 틀어줘
<music>재생</music>이라는 노래 재생해줘
<singer>멜로망스</singer>의 <music>좋아요</music> 재생해줘
(2) likeMusic
<singer>멜로망스</singer>를 좋아요 해줘
<singer>아이유</singer>의 <music>좋은날</music> 찜해줘
지금 노래 즐겨찾기에 등록해줘
이 노래에 좋아요 표시해둬
47 / 48
Interaction Model(NLU) 데이터 제작 노하우
정리하면,
• 기계학습 특성 및 원리를 이해하고 고려하면 더 좋은 데이터를 만들 수 있습니다.
• ‘단서’들이 나타나는 빈도, 그 밸런스가 중요합니다.
• 결코 중요하지 않은 단어/글자/구절을, 중요한 단서로 학습하게 만들지 않도록 주의합니다.
• 초기 데이터를 작성한 뒤, NLU에 다양한 테스트 문장을 입력해보며 원하는대로 분석되는지 확인해봅시다.
• 분석 안 되는 문장 위주로 꾸준히 추가합시다.
48 / 48
Thank you.

More Related Content

More from Clova Platform

Clova ai-business-day-session-4
Clova ai-business-day-session-4Clova ai-business-day-session-4
Clova ai-business-day-session-4Clova Platform
 
Clova ai-business-day-session-2
Clova ai-business-day-session-2Clova ai-business-day-session-2
Clova ai-business-day-session-2Clova Platform
 
Clova ai-business-day-session-1
Clova ai-business-day-session-1Clova ai-business-day-session-1
Clova ai-business-day-session-1Clova Platform
 
Clova Skill 에서 AudioPlayer 구현
Clova Skill 에서 AudioPlayer 구현Clova Skill 에서 AudioPlayer 구현
Clova Skill 에서 AudioPlayer 구현Clova Platform
 
Clova 플랫폼을 활용한 인공지능 서비스 개발
Clova 플랫폼을 활용한 인공지능 서비스 개발Clova 플랫폼을 활용한 인공지능 서비스 개발
Clova 플랫폼을 활용한 인공지능 서비스 개발Clova Platform
 
Clova 확장서비스 디자인 및 설계
Clova 확장서비스 디자인 및 설계 Clova 확장서비스 디자인 및 설계
Clova 확장서비스 디자인 및 설계 Clova Platform
 
Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법Clova Platform
 
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Platform
 
Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법Clova Platform
 
Clova Extension 기획, 설계 & 서버 개발 Basic
Clova Extension 기획, 설계 & 서버 개발 BasicClova Extension 기획, 설계 & 서버 개발 Basic
Clova Extension 기획, 설계 & 서버 개발 BasicClova Platform
 
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험Clova Platform
 
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2Clova Platform
 
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1Clova Platform
 
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Platform
 
Clova extension A to Z
Clova extension A to ZClova extension A to Z
Clova extension A to ZClova Platform
 
Clova Extension API 서버 개발 튜토리얼 with SpringBoot
Clova Extension API 서버 개발 튜토리얼 with SpringBootClova Extension API 서버 개발 튜토리얼 with SpringBoot
Clova Extension API 서버 개발 튜토리얼 with SpringBootClova Platform
 
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Platform
 
Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기
Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기
Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기Clova Platform
 
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기Clova Platform
 
Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)
Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)
Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)Clova Platform
 

More from Clova Platform (20)

Clova ai-business-day-session-4
Clova ai-business-day-session-4Clova ai-business-day-session-4
Clova ai-business-day-session-4
 
Clova ai-business-day-session-2
Clova ai-business-day-session-2Clova ai-business-day-session-2
Clova ai-business-day-session-2
 
Clova ai-business-day-session-1
Clova ai-business-day-session-1Clova ai-business-day-session-1
Clova ai-business-day-session-1
 
Clova Skill 에서 AudioPlayer 구현
Clova Skill 에서 AudioPlayer 구현Clova Skill 에서 AudioPlayer 구현
Clova Skill 에서 AudioPlayer 구현
 
Clova 플랫폼을 활용한 인공지능 서비스 개발
Clova 플랫폼을 활용한 인공지능 서비스 개발Clova 플랫폼을 활용한 인공지능 서비스 개발
Clova 플랫폼을 활용한 인공지능 서비스 개발
 
Clova 확장서비스 디자인 및 설계
Clova 확장서비스 디자인 및 설계 Clova 확장서비스 디자인 및 설계
Clova 확장서비스 디자인 및 설계
 
Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법Chatbot Extension 개요 및 사용법
Chatbot Extension 개요 및 사용법
 
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
 
Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법Chatbot Extension 개요 및 Chatbot Builder 사용법
Chatbot Extension 개요 및 Chatbot Builder 사용법
 
Clova Extension 기획, 설계 & 서버 개발 Basic
Clova Extension 기획, 설계 & 서버 개발 BasicClova Extension 기획, 설계 & 서버 개발 Basic
Clova Extension 기획, 설계 & 서버 개발 Basic
 
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
Clova Tech Summit 2: 코오롱베니트의 Clova Extension 계정연동 및 IoT 개발경험
 
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 2
 
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1
Clova Tech Summit 2: Serverless로 만드는 쉽고 효율적인 Clova Extension 1
 
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
Clova Tech Summit 2: 대화모델 엔진 구조와 Chatbot 개발 최적화 방안
 
Clova extension A to Z
Clova extension A to ZClova extension A to Z
Clova extension A to Z
 
Clova Extension API 서버 개발 튜토리얼 with SpringBoot
Clova Extension API 서버 개발 튜토리얼 with SpringBootClova Extension API 서버 개발 튜토리얼 with SpringBoot
Clova Extension API 서버 개발 튜토리얼 with SpringBoot
 
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
Clova Tech Summit 세션3 :Clova extension에서 OAuth 계정 연동 구현
 
Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기
Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기
Clova Tech Summit 세션4 : 우아한형제들 배달의민족 Clova Extension 개발기
 
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
Clova Tech Summit 세션2 : 띵스플로우 라마마 Clova Extension 개발기
 
Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)
Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)
Clova Tech Summit 세션1 : 코인 헬퍼 Extension 사례를 통한 Extension 디자인/설계 (Advanced)
 

Clova Tech Summit 2: Interaction Model의 이해 및 설계/제작 노하우

  • 1. Interaction Model의 이해 및 설계/제작 노하우 Search&Clova NLP/대화 김용희
  • 2. 2 / 48 Contents 1 2 3 4 NLU(Natural Language Understanding)란 NLU 기술: 기계 학습 Interaction Model(NLU) 제작 노하우 Interaction Model(NLU) 데이터 제작 노하우
  • 3. 3 / 48 1 NLU란? Natural Language Understanding
  • 4. 4 / 48 Natural Language Understanding 대화시스템 flow (classical architecture, but typical in industry) 4 / 48 NLU (의미분석) DM (대화관리) ASR (음성인식) Platform TTS (음성합성) Client NLG (응답생성) CEK Interaction Model (NLU는 학계/업계에서 보편적으로 쓰는 이름)
  • 5. 5 / 48 Natural Language Understanding 컴퓨터는 0 or 1: categorical information만을 처리 가능 Q: NLU는 왜 존재할까…? A: 사람의 말을 기계가 처리할 수 있도록 번역 Menu DB Weather API Dialog Manager (날씨 상태) 서울, 2018.02.24 굽네치킨 (가격 정보) 내일 서울 날씨 굽네치킨 얼마야 NLU
  • 6. 6 / 48 Natural Language Understanding NLU 문제 정의 (the most popular one) • Intent: 서술어+목적어를 표현하는 의미 카테고리 • Slots: 고유명사, 이름, 날짜/숫자 등 DM에 필요한 유용한 정보 Intent X Slots 조합으로 DM 조건분기 가능 “소리 3으로” Q. 화자의 의도로 적절한 것을 고르시오. (1) 소리를 켠다 (2) 소리를 끈다 (3) 소리를 키운다 (4) 소리를 줄인다 (5) 소리 크기를 특정 값으로 설정한다 Slot 추출 (with slot type) 소리 <3:number>으로 if intent == 1: turnon_volume() elif intent == 2: turnoff_volume() elif intent == 3: num_slot = find_number_slot(slots) offset = num_slot.value if num_slot else 1 up_volume(offset) elif intent == 4: num_slot = find_number_slot(slots) offset = num_slot.value if num_slot else 1 down_volume(offset) elif intent == 5: num_slot = find_number_slot(slots) if num_slot: set_volume(num_slot.value) DialogManager code
  • 7. 7 / 48 Natural Language Understanding Intent의 역할: 표현의 다양성 문제 줄이기 • 사람은 같은 의미/의도를 전달할 때도 다양한 표현을 사용 • 서술어+목적어가 의미적으로 동일한 문장들을 한 카테고리로 묶습니다.  명사보단 서술어(동사/형용사) 쪽의 표현이 훨씬 다양하니까요 User can say… 소리 키워 볼륨 업 음량을 높여줘 소리 크기 좀 키워줘 사운드 올려라 … DialogManager code…? (without NLU) if input == “소리 키워” or input == “볼륨 업” or input == “음량을 높여줘” or input == “소리 크기 좀 키워줘” or input == “사운드 올려라”: up_volume(1) elif input == “blarblar”: down_volume(1) 한국어가_배우기_어려운_이유.jpg NLU를_만들기_어려운_이유.jpg
  • 8. 8 / 48 Natural Language Understanding Slot의 역할: 정보의 type 분류 및 정규화 • 역시 표현의 다양성 문제를 줄이는 효과 • API 및 함수의 호출 인자로 쓰기 적합한 형태로 가공 User can say… 다섯시 반에 티비 꺼줘 5:30에 TV 꺼줘 5시 30분에 텔레비젼 꺼줘 5시 반에 테레비 꺼줘 다섯시 삼십분에 티브이 꺼줘 DialogManager code (with NLU) device: ”TV” time: ”5:30” NLU result device_slot = find_device_slot(slots) time_slot = find_time_slot(slots) if device_slot.value == ‘TV’: turnoff_tv(time_slot) elif device_slot.value == ‘Fan’: turnoff_fan(time_slot)
  • 9. 9 / 48 2 NLU 기술: 기계 학습
  • 10. 10 / 48 NLU 기술: 기계 학습 용어 Terms 통계모델 Statistical Model 인공지능 AI(Artificial Intelligence) 딥러닝 Deep Learning 뉴럴넷 Neural Network 기계학습 Machine Learning 참고: NLU는 NLP의 한 분야입니다. • Natural Language Processing • Natural Language Understanding NLP NLU 통계모델 기계학습
  • 11. 11 / 48 NLU 기술: 기계 학습 1인칭 컴퓨터 시점(…)을 체험해봅시다. (1) पिज़्ज़ा मंगव़ाओ • भुना हुआ माांस पिज्जा की एक प्लेट का आदेश दें • सांयोजन प्लेट का आदेश दें • हवाईयन पिज्जा एक प्लेट प्रसव • मुझे एक चीज़ पिज्जा दे दो • मुझे एक आलू का पिज्जा ले आओ (2) पिज्ज़ा को सूचित करें • िेिरोनी पिज्जा ककतना है • िेिरोनी कब तक करता है? • िेिरोनी कीमत • िेिरोनी पिज्जा खरीदने के ललए ककतना खचच होता है? • मुझे िेिरोनी की मात्रा बताएां (3) ऑर्डर ज़ांिें • कब पवतरण है • मैं वहाां कब िहुुँचा? • मुझे पिज्जा कब लमलेगा? • डिलीवरी का समय क्या है? • डिललवरी आगमन समय 다음 문장은 몇 번 그룹? “िेिरोनी दो प्लेटें कृ िया”
  • 12. 12 / 48 NLU 기술: 기계 학습 가장 합리적인 추론 전략? • 각 카테고리 별 단어/글자/구절의 빈도 체크 • 특정 카테고리에만 자주 등장하는 단어/글자/구절은 ‘핵심 단서’ • 아무리 자주 등장하더라도, 모든 카테고리에 고르게 등장하는 단어/글자/구절은 중요 단서가 되지 못 함 (1) OrderPizza 불고기 피자 한 판 주문해줘 콤비네이션 한 판 주문해 하와이안 피자 한 판 배달 치즈피자 한 판 시켜줘 포테이토피자 한 판 갖다줘 (2) InformPizza 페퍼로니 피자 얼마야 페퍼로니 두 판은 얼마나 해 페퍼로니 가격 페퍼로니 피자 사려면 얼마 내야해 페퍼로니 금액 알려줘 (3) CheckOrder 배달 언제쯤 와 언제쯤 도착해 피자 언제쯤 받을 수 있어 배달 몇 시에 와 배달 도착 시간 다음 문장은 몇 번 그룹? “페퍼로니 두 판 배달해줘”
  • 13. 13 / 48 NLU 기술: 기계 학습 (1) OrderPizza 불고기 피자 한 판 주문해줘 콤비네이션 한 판 주문해 하와이안 피자 한 판 배달 치즈피자 한 판 시켜줘 포테이토피자 한 판 갖다줘 (2) InformPizza 페퍼로니 피자 얼마야 페퍼로니 두 판은 얼마나 해 페퍼로니 가격 페퍼로니 피자 사려면 얼마 내야해 페퍼로니 금액 알려줘 (3) CheckOrder 배달 언제쯤 와 언제쯤 도착해 피자 언제쯤 받을 수 있어 배달 몇 시에 와 배달 도착 시간 (백지 상태에서 학습) “페퍼로니”란 단어가 있으면 InformPizza인가보네  OrderPizza나 CheckOrder 쪽 문장들에선 나타나지 않아, InformPizza를 판별하는 핵심 단서로 판단 “피자”라는 표현은 아무데나 다 나타나는 걸 봐선 별로 중요하지 않은 단서인 것 같고… “얼마”라는 단어는 InformPizza 쪽에만 등장하는 것 같아 “배달”이라는 단어는 OrderPizza에서도 쓰지만 CheckOrder쪽에서 더 자주 쓰네  상대적 빈도를 중요한 정보로 사용. “통계 모델”이라고 부르는 이유
  • 14. 14 / 48 NLU 기술: 기계 학습 컴퓨터가 답을 찾는 과정 (예시) (학습 끝남) (문제를 풀어보자) Q: 리치골드피자 주문해라 “리치골드”는 처음 보는 단어인데… 모르겠다 ”피자 주문”이란 표현은 본 적 없고 “주문”이란 단어가 있는 걸 봐선 OrderPizza인가..? OrderPizza라고 하기엔 “한 판”이란 단어가 없는데..? 고민되네.. A: OrderPizza..? Q: 페퍼로니 두 판 배달해줘 오 나 이거 알아! “페퍼로니” 나왔어 게다가 “페퍼로니 두 판”은 완전 InformPizza에 나왔던 표현이야 ”배달”이란 표현은 OrderPizza나 CheckOrder에도 가끔 나올 수 있는데… 그래도 “페퍼로니” 나왔는데 뭐 A: InformPizza!! “해”, ”해줘”란 표현은 OrderPizza에 몇 번 본 적이 있긴 한데
  • 15. 15 / 48 NLU 기술: 기계 학습 ‘빌드’ 과정 중에는 무엇을 할까? • 데이터 분석을 통한 최적의 전략 수립 • Trial-and-error 방식으로 • …그러다보니 시간이 걸립니다. 바로 이 버튼…
  • 16. 16 / 48 NLU 기술: 기계 학습 ‘빌드’ 과정 중에는 무엇을 할까? 1. 가설을 세운다. (적당히…) 단서: 단어 “페퍼로니”가 등장한다면  (1) OrderPizza: -3점  (2) InformPizza: +10점  (3) CheckOrder: -3점 단서: 단어 “피자”가 등장한다면  (1) OrderPizza: +2점  (2) InformPizza: +1점  (3) CheckOrder: +0점 단서: 단어 “얼마”가 등장한다면  (1) OrderPizza: -3점  (2) InformPizza: +6점  (3) CheckOrder: -3점 단서: 단어 “배달”이 등장한다면  (1) OrderPizza: -3점  (2) InformPizza: -3점  (3) CheckOrder: +6점
  • 17. 17 / 48 NLU 기술: 기계 학습 ‘빌드’ 과정 중에는 무엇을 할까? 2. 가설을 이용해 자체 모의 평가를 한다. 문제 (1) (2) (3) 최종 답안 불고기 피자 한 판 주문해줘 +5 -1 +1 OrderPizza 콤비네이션 한 판 주문해 +3 -2 +4 CheckOrder 하와이안 피자 한 판 배달 +3 -1 +5 CheckOrder 치즈피자 한 판 시켜줘 … -1 … OrderPizza 포테이토피자 한 판 갖다줘 … … … OrderPizza 페퍼로니 피자 얼마야 … … … InformPizza 페퍼로니 두 판은 얼마나 해 … … … InformPizza 페퍼로니 가격 … … … InformPizza 페퍼로니 피자 사려면 얼마 내야해 … … … InformPizza 페퍼로니 금액 알려줘 … … … InformPizza 배달 언제쯤 와 … … … OrderPizza 언제쯤 도착해 … … … CheckOrder 피자 언제쯤 받을 수 있어 … … … CheckOrder 배달 몇 시에 와 … … … CheckOrder 배달 도착 시간 … … … CheckOrder 100점 만점에 80점!
  • 18. 18 / 48 NLU 기술: 기계 학습 ‘빌드’ 과정 중에는 무엇을 할까? 3. 가설을 조금씩 수정한다. (모의평가 성적이 높아질 수 있는 쪽으로…) 단서: 단어 “페퍼로니” 등장  (1) OrderPizza: -3.3점  (2) InformPizza: +10.2점  (3) CheckOrder: -3.2점 단서: 단어 “피자” 등장  (1) OrderPizza: +1.9점  (2) InformPizza: +0.9점  (3) CheckOrder: +0.1점 단서: 단어 “얼마” 등장  (1) OrderPizza: -3.1점  (2) InformPizza: +6.3점  (3) CheckOrder: -3.2점 단서: 단어 “배달” 등장  (1) OrderPizza: -2.6점  (2) InformPizza: -3.2점  (3) CheckOrder: +5.7점
  • 19. 19 / 48 NLU 기술: 기계 학습 ‘빌드’ 과정 중에는 무엇을 할까? 1. 가설을 세운다. (적당히…) 2. 가설을 이용해 자체 모의 평가를 한다. 3. 가설을 조금씩 수정한다. 2. 바뀐 가설을 이용해 모의 평가를 한다. 3. 가설을 조금씩 수정한다. 2. 바뀐 가설을 이용해 모의 평가를 한다. 3. … ……반복 (점수가 최대한 높아질 때까지)
  • 20. 20 / 48 NLU 기술: 기계 학습 Slot 추출: 원리는 비슷 • Prediction 단위 • (한중일 언어) 대세는 문자 단위로 prediction • (알파벳 계통의 언어) word 단위로 prediction • 단서로 삼는 정보 • Prediction 대상 전후 n개(window) 내부의 문자열 • Predicted sequence가 유사한지/자연스러운지? *훈련용 말뭉치(Training Corpus) 불고기 피자 한 판 주문해줘 콤비네이션 한 판 주문해 페퍼로니 두 판은 얼마나 해 피자 언제쯤 받을 수 있어  리치골드피자 주문해라 ! ! ! ? (단서)
  • 21. 21 / 48 NLU 기술: 기계 학습 학습에 도움이 될 만한 정보 보충 • 형태소 분석 정보 • 동사/명사가 조사/어미보다 더 중요한 정보라는 걸 스스로 파악하게 되는 건 아니지만… • 동음이의어를 분간해내거나, 동사/형용사의 원형을 기준으로 비교할 수 있게 되어 공통점/차이점 찾기가 수월해지는 효과 볼륨 올려  볼륨/NOUN 올리/VERB+어/EOMI 볼륨 올리세요  볼륨/NOUN 올리/VERB+세요/EOMI 볼륨 올려 ≒ 볼륨 올리세요
  • 22. 22 / 48 NLU 기술: 기계 학습 학습에 도움이 될 만한 정보 보충 • Slot candidate 정보 • Slot DB 정보 (built-in slot, extension-specific slot) • Regex를 이용해 추출한 built-slot 정보 대표값 동의어/유의어 불고기피자 불고기 콤비네이션피자 콤비네이션, 콤비네이숀, 컴비네이션 페퍼로니피자 페퍼로니 리치골드피자 리치골드 루꼴라피자 루꼴라 … … <PIZZA_TYPE> <Clova.NUMBER> def CNUM 한:1|두:2|세:3|네:4|… ; def DIGIT 1|2|3|4|5|6|7|8|9 ; def UNIT 판|개 ; slot <number value=[CNUM|DIGIT] unit=UNIT> ; 불고기 피자 한 판 주문해줘 ≒ 리치골드 피자 두 판 주문해줘 페퍼로니 피자 얼마야 ≒ 루꼴라 피자 얼마야
  • 23. 23 / 48 NLU 기술: 기계 학습 장점 • 훈련 말뭉치에서 본 적 없는 표현도 분석 가능 • 구어체/대화체 발화는 표현 방식이 다양하며, 음성인식 오류가 더 많기 때문에 특히 중요 단점 • 훈련 말뭉치의 빈도 및 밸런스가 중요함 • 실 사용자들의 표현 빈도를 따라간다면 이상적 • 제공된 카테고리와 무관한 문장의 경우, 어떤 카테고리로 분류될지 예측 불가 • N개의 보기 중에 답이 하나는 있겠지… (‘보기 중에 정답 없음’은 잘 안 찍게 됨)
  • 24. 24 / 48 NLU 기술: 기계 학습 단점 • 제공된 카테고리와 무관한 문장의 경우, 어떤 카테고리로 분류될지 예측 불가 • N개의 보기 중에 답이 하나는 있겠지… (‘보기 중에 정답 없음’은 잘 안 찍게 됨) 배고파 야 이 멍청아 볼륨 올려 티비 채널 내려 안녕 무한도전 틀어줘 뽀로로 보고싶어 아이유 노래 도미노피자 주가 지금 미세먼지 어때 나루호도… 엄마한테 전화좀 문좀 닫아라 이불펴 빨래좀 개 생수 주문해 BMW 가격 영미!! 경덕님 축하 메일 읽어줘 오늘 메뉴 뭐야 오꾸닭 메뉴 뭐있어 도미노피자 얼마야 배달 얼마걸려 반반무많이 주문취소 암호는 xxxx 소리 꺼
  • 25. 25 / 48 NLU 기술: 기계 학습 단점을 극복(?)하는 방법 • invocation name을 불렀을 때만 CEK 실행 • 사용자가 의도적으로 호출한 것이므로, 서비스 범위 밖의 ‘돌발 질문’은 적게 할 것 • Amazon에서 처음 도입: 기술의 한계를 기획/서비스로 커버한 케이스 클로바, 배달의민족에서 치킨 시켜줘
  • 26. 26 / 48 3 Interaction Model(NLU) 제작 노하우
  • 27. 27 / 48 Interaction Model(NLU) 제작 노하우 NLU를 잘 만들기 위해서는? • 말뭉치 잘 만드세요 • 훈련용 문장을 정성 들여 제작하세요 • 그니까 Intent별 발화 예시를 잘 적어줘요 • 사용자 발화 문장 많이 써내시구요 • 표현 문장을 다양하게 작성해주세요 …그러고도 여력이 된다면 딥러닝 공부해서 열심히 모델링해보고, 파라미터 튜닝해보세요.
  • 28. 28 / 48 Interaction Model(NLU) 제작 노하우 데이터만 잘 만들면 다 되나?  네, 성능의 90%는 훈련 데이터가 좌우합니다.  레스토랑: NLU 재료: 말뭉치 요리사: 기계학습 모델
  • 29. 29 / 48 Interaction Model(NLU) 제작 노하우 데이터만 잘 만들면 다 되나?  좋은 데이터를 만드는 쪽이 훨씬 쉽습니다.  전문지식/기술 없이도 가능하구요.  레스토랑: NLU 재료: 말뭉치 요리사: 기계학습 모델
  • 30. 30 / 48 4 Interaction Model(NLU) 데이터 제작 노하우
  • 31. 31 / 48 Interaction Model(NLU) 데이터 제작 노하우 아까의 예제는 뭐가 문제였을까…? • “페퍼로니”가 (2)에만 100% 등장 • “한 판”이 (1)에만 100% 등장 • “얼마”라는 표현은, • (3)에도 나올 수 있을 텐데 (ex. “얼마나 걸려?”) • (2)에만 높은 빈도로 등장하고 있음 (1) OrderPizza 불고기 피자 한 판 주문해줘 콤비네이션 한 판 주문해 하와이안 피자 한 판 배달 치즈피자 한 판 시켜줘 포테이토피자 한 판 갖다줘 (2) InformPizza 페퍼로니 피자 얼마야 페퍼로니 두 판은 얼마나 해 페퍼로니 가격 페퍼로니 피자 사려면 얼마 내야해 페퍼로니 금액 알려줘 (3) CheckOrder 배달 언제쯤 와 언제쯤 도착해 피자 언제쯤 받을 수 있어 배달 몇 시에 와 배달 도착 시간
  • 32. 32 / 48 Interaction Model(NLU) 데이터 제작 노하우 아까의 예제는 뭐가 문제였을까…? (1) OrderPizza 불고기 피자 한 판 주문해줘 콤비네이션 1판 주문해 하와이안 피자 두 판 배달 치즈피자 세 판 시켜줘 포테이토피자 2판 갖다줘 (2) InformPizza 페퍼로니 피자 얼마야 루꼴라 피자 두 판은 얼마나 해 트리플 치즈 피자 가격 미트볼 피자 사려면 얼마 내야해 콤비네이션 금액 알려줘 (3) CheckOrder 배달 얼마나 걸려 언제쯤 도착해 피자 언제쯤 받을 수 있어 주문한 거 몇 시에 와 아까 시킨거 도착 시간 (1) OrderPizza 불고기 피자 한 판 주문해줘 콤비네이션 한 판 주문해 하와이안 피자 한 판 배달 치즈피자 한 판 시켜줘 포테이토피자 한 판 갖다줘 (2) InformPizza 페퍼로니 피자 얼마야 페퍼로니 두 판은 얼마나 해 페퍼로니 가격 페퍼로니 피자 사려면 얼마 내야해 페퍼로니 금액 알려줘 (3) CheckOrder 배달 언제쯤 와 언제쯤 도착해 피자 언제쯤 받을 수 있어 배달 몇 시에 와 배달 도착 시간 BEFORE (나쁜 예) AFTER (좋은 예)
  • 33. 33 / 48 Interaction Model(NLU) 데이터 제작 노하우 데이터는 양보다 질입니다. • 물론 품질이 좋다면 양도 많은 게 좋습니다. (관리도 힘들고, 훈련도 오래 걸리긴 하지만…) • 금지: 엑셀 파워핸들로 모든 표현 조합 만들기. 그럴 거면 그냥 정규표현식을 쓰세요… (1) PlayAnimalSound 개소리 틀어 개소리 틀어라 개소리 틀어줘 개소리 틀어주세요 개소리 틀어봐 개소리 틀어봐라 개소리 듣고 싶다 개소리 들려줘 개소리 들려줘라 개소리 들려주세요 개소리 들려줘봐 개소리 들려줘봐라 개소리 내 개소리 내라 개소리 내줘 개소리 내주세요 개소리 내봐 개소리 내봐라 (1) PlayAnimalSound 개 소리 틀어주세요 고양이 소리 들려줘 늑대 우는 소리 내봐 까치 소리 듣고 싶어 소 울음 소리 좀 내줘 멍멍 짖어봐요 나쁜 예: 가능한 모든 조합을 기계적으로 생성 좋은 예:
  • 34. 34 / 48 Interaction Model(NLU) 데이터 제작 노하우 좋은 데이터로 학습하면, 양이 적더라도 처음 보는 문제 역시 잘 맞출 수 있습니다. (1) PlayAnimalSound 개 소리 틀어주세요 고양이 소리 들려줘 늑대 우는 소리 내봐 까치 소리 듣고 싶어 소 울음 소리 좀 내줘 멍멍 짖어봐요 (2) Blarblar … (3) FooBar … (학습) 샐리야, 고양이 울음소리 틀어봐 “고양이” “울음 소리” “소리/NOUN 틀다/VERB” 전부 다 (1)에서 본 표현… 야옹~ 이야아아옹
  • 35. 35 / 48 Interaction Model(NLU) 데이터 제작 노하우 의미/형태가 거의 같은 문장이, 서로 다른 카테고리에서 등장하지 않도록 주의합니다. (분류 기준에 일관성이 있어야 합니다.) (1) FastForward 20초만큼 앞으로 가줘 10초 뒤로 점프해줘 30초 후부터 재생 1분 뛰어넘고 플레이 (2) Rewind 5분 앞으로 가줘 15초 뒤로 가기 10초 되감기 해줘 3분 전 지점부터 재생 (사람A가 작성) (사람B가 작성) “만큼”이 있으면 (1)인가??? “20초”가 있으면 (1)이고 ”5분”이 있으면 (2)인가?? 몰라요… 나쁜 예: 비슷한 문장이 양쪽에 등장
  • 36. 36 / 48 Interaction Model(NLU) 데이터 제작 노하우 Slot 역시 기준에 일관성이 있어야 합니다. • slot range와 slot name을 정하는 기준이 일관돼야 합니다. • 참고: slot 추출기 학습엔 intent 상관 없이 모든 데이터를 한꺼번에 사용합니다 (1) turnoff <device>에어컨</device> 꺼줘 두 시에 <device>불</device> 소등 <device>공기청정기</device> 끄자 <device>선풍기</device> 그만 돌려 (2) checkStatus <target>에어컨</target> 상태 알려줘 <target>전등</target> 지금 무슨 색이야 <target>공기청정기</target> 켜졌니 <target>선풍기</target> 꺼있어? “선풍기” 뒤에 “그만”이 있으면 “선풍기”는 <device>이고, ”선풍기” 뒤에 “꺼”가 있으면 “선풍기”는 <target>인가??? 샐리야, 선풍기 꺼 지원하지 않는 기기입니다 나쁜 예: intent별로 slot name을 다르게 정의 #turnoff_fan(device_slot) turnoff_fan(target_slot) DM: 응답:
  • 37. 37 / 48 Interaction Model(NLU) 데이터 제작 노하우 Slot 역시 기준에 일관성이 있어야 합니다. • DB 및 말뭉치 양이 많을 경우 ‘고난도 변별력 기르기 문제’도 함께 학습시키면 좋습니다. (1) playMusic 노래 재생 <genre>클래식</genre> 틀어줘 <composer>베토벤</composer>의 <genre>클래식</genre>으로 들려줘 영화 <movie>클래식</movie> <genre>OST</genre> 틀어줘 <music>재생</music>이라는 노래 재생해줘 <singer>멜로망스</singer>의 <music>좋아요</music> 재생해줘 (2) likeMusic <singer>멜로망스</singer>를 좋아요 해줘 <singer>아이유</singer>의 <music>좋은날</music> 찜해줘 지금 노래 즐겨찾기에 등록해줘 이 노래에 좋아요 표시해둬 좋은 예: 변별력 기르기 문제를 많이 포함 “클래식”은 <genre>일 때가 많지만 “영화”가 붙으면 <movie>가 돼. “재생”이 문장 끝에 올 때는 slot이 아니지만, “재생” 뒤에 “이라는 노래”가 오면 <music> slot으로 봐야겠네
  • 38. 38 / 48 Interaction Model(NLU) 데이터 제작 노하우 Unseen slot 추출 • Unseen slot이란? • Slot DB에 등장한 적 없는 slot을 말합니다. • Unseen slot은 ‘대표값’ 정규화가 불가능합니다. • DM에서 slot의 대표값을 이용하고자 한다면, DB에 최대한 동의어를 등록 해두는 게 좋습니다. 대표값 동의어/유의어 TV 티비, 티브이, 테레비, 텔레비전, 텔레비젼 에어컨 에어콘 전등 불, 등, 형광등, 백열등 … … <DEVICE> 클로바, 티비 켜줘 네, TV를 켤게요 클로바, 전구 켜줘 지원하지 않는 기기에요
  • 39. 39 / 48 Interaction Model(NLU) 데이터 제작 노하우 Unseen slot 추출 • Unseen slot이란? • Slot DB에 등장한 적 없는 slot을 말합니다. • Slot DB가 너무 크다면, 사람이 동의어를 모두 등록해줄 수 없습니다. (music, movie, POI, …) 대표값 동의어/유의어 거꾸로 강을 거슬러 오르 는 저 힘찬 연어들처럼 거꾸로 오르는 연어들처럼, 강물 을 거꾸로 오르는 힘찬 연어처럼, 거꾸로 강물을 오르는 연어, … 솔아솔아 푸르른 솔아 … … <MUSIC> 클로바, 강물을 거슬러 오르는 연어들처럼 틀어줘 찾을 수 없는 곡이에요 솔아 푸른 솔아 틀어줘 몰라요
  • 40. 40 / 48 Interaction Model(NLU) 데이터 제작 노하우 Unseen slot 추출 • Unseen slot이란? • Slot DB에 등장한 적 없는 slot을 말합니다. • Slot DB에 일일이 나열할 수 없는 slot은 무조건 Unseen slot이어야 합니다. (wildcard-slot) (1) sendMessage 시금치 한 단만 사오라고 동생한테 문자해줘 올때 메로나라고 엄마한테 톡해줘 두시 반에 만나자고 애인한테 메시지 보내 대표값 동의어/유의어 시금치 한 단 사오기 시금치 한 단만 사오기, 시금치좀 한 단 사오기, 시금치 한 단 사기, 시금치 한 단만 사기, … 올때 메로나 오면서 메로나, 올때 메로나 사기, 올때 메로나 사오기, … … … <MESSAGE_CONTENT> …이런 slot DB 작성은, 절대로 가능하지 않습니다.
  • 41. 41 / 48 Interaction Model(NLU) 데이터 제작 노하우 Unseen slot 추출 • Slot DB 크기가 작은 경우 • 훈련 말뭉치에서 Unseen slot 비율을 0%로 만들어줍시다. (1) turnon TV 켜줘 에어컨 틀어줘 공기청정기 돌려 스피커 키세요 (2) turnoff 보일러 꺼줘 전구 소등해줘 선풍기 끄자 스피커 턴오프 대표값 동의어/유의어 TV 티비, 티브이, … 에어컨 에어콘 전등 불, 등, 전구, … 공기청정기 공청기 보일러 온돌 스피커 선풍기 <DEVICE> Slot DB에 없는 이름을 Slot이라고 분석해낸 사례가 하나도 없어. Slot DB에 없는 이름은 Slot일 가능성이 정말정말 적어 좋은 예: Small DB 사용 시 Unseen slot 미포함
  • 42. 42 / 48 Interaction Model(NLU) 데이터 제작 노하우 Unseen slot 추출 • Slot DB 크기가 아주 큰 경우 • 훈련 말뭉치에 Unseen slot도 일부(5~10%?) 섞어줍시다 (1) playMusic 아이유의 좋은날 재생해줘 언니쓰 맞지 틀어라 빨간맛 들려줘 거꾸로 강을 거슬러오르는 연어 노래 틀어줘 라 벤타나 음악 재생 Slot DB에 일치하는 항목이 없어도 Slot일 가능성이 조금은 있네. 글자 뒤에 “틀”, “노래 틀”이나 “재생” 같은 단어가 있으면 되나… Comment.  Unseen slot을 섞어 학습하려면 훈련 문장이 굉장히 많이 필요합니다. (최소 수백 문장 이상 권장)  ‘Slot DB와 일치 여부’라는 단서는 비교적 쉽고도 명료했으나, ‘단어 앞뒤 문맥’이라는 단서는 경우의 수가 많기 때문입니다. 좋은 예: Large DB 사용 시 Unseen slot 포함
  • 43. 43 / 48 Interaction Model(NLU) 데이터 제작 노하우 Unseen slot 추출 • Wild-card slot을 쓸 때 • Slot DB를 아예 비워 둡시다. (‘문맥’ 단서만 100% 학습하도록) • 기계학습보단 정규표현식을 쓰는 게 나을 수도 있습니다. (추후 기능 지원 예정) (1) translate 안녕하세요를 영어로 번역해줘 두시에 점심 먹어요를 통역해봐 버스타는곳 알려주세요를 중국어로 뭐라그래? 덮밥에 김 얹어주세요를 일본어로 말해줘 공부가 프랑스어로 뭐야? 좋은 예: Wildcard-slot은 모두 Unseen slot으로 작성 대표값 동의어/유의어 <PHRASE> “~를 {language}로” 형식에선 앞에 오는 “~” 구절이 slot이야
  • 44. 44 / 48 Interaction Model(NLU) 데이터 제작 노하우 Intent or Slot? • 가급적 명사(또는 명사구)만을 Slot으로 설정합시다. • ‘명사형’이 아닌 구절을 Slot DB 동의어로 전부 작성하려면 힘들어요. • Slot range 잡기도 애매해요. (1) informDate 동생 태어난 날이 언젠지 알아? 용희 생일이 언제야? 부모님 결혼기념일이 언제지 세종대왕은 언제 출생했을까 애플이는 태어난지 얼마나 됐을까 대표값 동의어/유의어 생일 탄신일, 태어난 날, 태어난지, 출생 일, 출생한 날, 태어, 출생, … 결혼기념일 결혼한 날, 결혼한 날짜, 결혼 <SPECIAL_DATE> 나쁜 예: 동사/형용사를 Slot으로 설정  훈련 데이터 작성할 때 실수로 일관성을 지키지 못 하는 일이 많아집니다. 어떤 문장은 “태어”까지만 <special_range> slot으로 설정하고, 어떤 문장은 “태어난지”까지를 <special_range> slot으로 설정했습니다.  일관성이 없는 데이터로 훈련하면, 분석 결과도 일관성이 없게 됩니다.
  • 45. 45 / 48 Interaction Model(NLU) 데이터 제작 노하우 Intent or Slot? • 어떤 개체의 속성이나, 문장 전체의 서술어에 해당하는 부분은 Intent category로 나타내는게 낫습니다. • 예외: 한 문장 안에 속성/서술어가 둘 이상인 경우 • 둘 중 하나는 slot으로 정의해야 할 때도 있습니다. • 표현 다양성이 적은 쪽을 slot으로 설정합시다. (1) InformBirthday 동생 태어난 날이 언젠지 알아? 용희 생일이 언제야? 애플이는 태어난지 얼마나 됐을까 (2) InformWeddingAnniversary 부모님 결혼기념일이 언제지 우리 결혼한 날짜 알려줘 나 결혼식이 언제였을까 좋은 예: 동사/형용사를 intent로 구분 (1) informDate 동생 태어난 날이 몇월 며칠인지 알아? 용희 생일이 언제야? 부모님 결혼기념일이 언제지 (2) countDownDate 유진이 5살 되려면 얼마 남았어 내 생일까지 며칠 남았지 엄마 생신이 얼마 뒤에 있지? 부득이한 경우: 동사/형용사가 둘 이상이어서 하나를 slot으로 설정한 경우
  • 46. 46 / 48 Interaction Model(NLU) 데이터 제작 노하우 필요한 데이터의 양 (참고: 절대적인 수치는 아닙니다) • Intent 하나 당 적정 문장 수: 20문장~ • Slot name 하나 당 적정 문장 수 • Small DB Case: 20문장~ • Large DB Case: 수백 문장~ • Wildcard-Slot Case: 50문장~  Slot name당 문장 수는 이렇게 샙니다. <composer>: 1문장 <genre>: 2문장 <movie>: 1문장 <music>: 3문장 <singer>: 3문장 (1) playMusic 노래 재생 <genre>클래식</genre> 틀어줘 <composer>베토벤</composer>의 <genre>클래식</genre>으로 들려줘 영화 <movie>클래식</movie> <genre>OST</genre> 틀어줘 <music>재생</music>이라는 노래 재생해줘 <singer>멜로망스</singer>의 <music>좋아요</music> 재생해줘 (2) likeMusic <singer>멜로망스</singer>를 좋아요 해줘 <singer>아이유</singer>의 <music>좋은날</music> 찜해줘 지금 노래 즐겨찾기에 등록해줘 이 노래에 좋아요 표시해둬
  • 47. 47 / 48 Interaction Model(NLU) 데이터 제작 노하우 정리하면, • 기계학습 특성 및 원리를 이해하고 고려하면 더 좋은 데이터를 만들 수 있습니다. • ‘단서’들이 나타나는 빈도, 그 밸런스가 중요합니다. • 결코 중요하지 않은 단어/글자/구절을, 중요한 단서로 학습하게 만들지 않도록 주의합니다. • 초기 데이터를 작성한 뒤, NLU에 다양한 테스트 문장을 입력해보며 원하는대로 분석되는지 확인해봅시다. • 분석 안 되는 문장 위주로 꾸준히 추가합시다.