티스토리 뷰
이제 대화 중에 숫자를 계산해야 하는 경우를 생각해 보자. CS에서는 두 가지 방식으로 숫자를 계산할 수 있는데 첫째는 수식을 직접 작성하는 방식이고 두 번째는 함수를 이용하는 방식이다. 수식을 직접 작성하여 그 결과값을 변수에 기억시켜 놓고 활용하는 방식은 우리가 수기로 방정식을 작성하는 형식과 유사하다. 예를 들어 사용자와 챗봇이 가격 흥정을 하는 아래와 같은 상황을 가정해 보자.
A. u: (얼마에요) 정가 1만원인데 10%할인해서 9천원에 드릴께요
a: (천원만 더 깎아주세요) 8천원에 달라고요? 저는 남는 게 없어요.
a: (좀 깍아주세요)
위의 예제에서 “8천원에 달라고요?” 라고 챗봇이 말하기 위해서는 사용자가 말한 “천원”이라는 문자숫자를 아라비아 숫자 “1,000”으로 변환하고 이를 내부에서 실시간으로 계산할 수 있어야 가능하다. 이는 3단계로 나눠서 준비할 수 있는데, 3장에서 “나이”를 설명할 때와 중복되는 부분이 있지만 복습 차원에서 차근차근 따라가 보기로 하자.
1단계는 화폐 단위를 사전(dictionary)에 등록하는 일이다. 여기서는 ~가격 이라는 컨셉으로 만들어 보겠다.(아래의 B 참조) 2단계는 canon 명령문으로 기본형을 지정해 주는 단계이고(아래의 C참조),
B. concept: ~가격 NOUN ( 천원 이천원 삼천원 사천원 오천원 )
C. canon:
천원 1000
이천원 2000
삼천원 3000
사천원 4000
오천원 5000
3단계는 사용자 입력문을 받아 계산하는 단계이다.
D. a: ( _~가격 깍아* ) $price = 9000 - _0 $price원에 달라고요? 저는 남는 게 없어요.
룰D는 다소 낯설어 보이지만 하나씩 읽어 보면 매우 간단하다. 이 룰은 패턴, 계산식, 출력의 세 부분으로 이뤄져 있는데 먼저 패턴을 보면, 사용자의 문자숫자를 입력 받아 임시 저장(언더바 변수)하고 있다. 만약 사용자가 문자숫자나 아라비아숫자를 사용하지 않는다면 이 패턴은 매칭에 실패하고 다른 룰로 넘어갈 것이니 사용자가 숫자를 입력하지 않으면 어쩌나 하는 걱정은 하지 않아도 된다. 계산식 부분에서는 _0를 호출하여 사용자가 입력한 문자숫자를 가져와 9천원에서 뺀다. 9천원은 앞의 대화에서 언급한 금액이다. 그리고 그 뺄셈 결과를 price라는 변수에 저장한다.
$price = 9000 - _0
이 형태는 우리가 작성하는 수식과 매우 닮았다. 그리고 이 변수를 출력문에 포함시키면 이 변수의 값이 출력되는 것이다.
숫자를 계산하는 두 번째 방식은 함수를 이용하는 방식인데, 위의 룰D에서 계산식 부분을 아래와 같이 ^compute 함수로 작성할 수 있다. ^compute 함수는 ^compute(숫자 연산자 숫자)의 형식이다.
E. a: ( _~number) $price = ^compute(9000 - _0) $price원에 달라고요? 저는 남는 게 없어요.
숫자를 계산하는 두 가지 방식의 기능이나 효과는 동일하므로 더 간편한 방식, 더 가독성이 높은 방식을 사용하면 될 것이다.[1]
'4장. 응용 대화 가르치기' 카테고리의 다른 글
6. 사용자가 동일 질문을 반복해 올 때 (0) | 2016.05.18 |
---|---|
5. 같은 말 반복하지 않기 (0) | 2016.05.18 |
3. 모를 때만 질문하기 (0) | 2016.05.16 |
2. 대화 내용을 오래 기억하기 (1) | 2016.05.14 |
1. 상대방의 말을 잠시 기억하기 (1) | 2016.05.14 |
- Total
- Today
- Yesterday
- 한국어챗봇
- Chatscript AI 인공지능 챗봇 chatbot
- 소프트봇 채터봇
- 한글챗봇 우리말챗봇 인공지능챗봇 ai챗봇
- 챗봇개발 채팅로봇 한국챗봇
- chatscript chatbot 챗봇 한국어챗봇 ai 인공지능
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |