레플리
글 수 40

FSM 기반의 챗봇 대화 구조

조회 수 12621 추천 수 0 2017.11.30 00:29:10


챗봇을 구현할때 시나리오에 따라 대화의 흐름을 제어할 필요가 있습니다. 이때 많이 사용하는 방법이 유한상태기계(FSM)입니다. FSM은 상태를 변화시키며 그에 맞는 행동을 수행하는데, 특히 게임에서 캐릭터 인공지능에 유용하게 사용됩니다.

 

 

 

ndc-2009-8-638.jpg

(출처 : https://www.slideshare.net/yonghakim900/2009-ndc)

 

위의 그림은 게임에서 몬스터 인공지능을 FSM으로 구현한 것입니다. 'IDLE, COMBAT, RETREAT' 세가지 상태로 되어있고 각각의 조건에 따라 상태를 전이합니다. 그리고 현재 상태에 따라 몬스터의 행동을 결정할 수 있습니다. 예를 들어, IDLE일때는 주변을 배회하도록 움직이고 COMBAT일때는 적을 공격하도록 합니다.

 

 

 

untitled.jpg

 

피자 배달 챗봇을 FSM으로 구현하는 예를 들어보겠습니다. 최대한 간단하게 하기위해 '인사, 메뉴소개, 주문'의 세가지 상태만 존재합니다. 

 

 

 

유저 : 안녕

챗봇 : 안녕하세요. 저는 피자주문 챗봇입니다.

상태 : Main(인사), Sub(None)

변수 : None

 

유저 : 무슨 피자 있어?

챗봇 : 불고기피자, 페페로니피자, 치즈피자가 있습니다.

상태 : Main(메뉴소개), Sub(피자)

변수 : None

 

유저 : 불고기피자

챗봇 : 불고기피자는 정통 불고기와 신선한 야채가 어우러져 모두가 좋아하는 맛입니다.

상태 : Main(메뉴소개), Sub(피자)

변수 : Target(불고기피자)

 

유저 : 별로..

챗봇 : 새로 출시된 슈프림피자는 어떠신가요?

상태 : Main(메뉴소개), Sub(피자)

변수 : Target(슈프림피자)

 

유저 : 좋아! 이걸로 주문할래

챗봇 : 슈프림피자를 선택하셨습니다. 전화번호를 입력해주세요.

상태 : Main(주문), Sub(전화번호)

변수 : Slot(피자/슈프림피자, 전화번호/None, 주소/None)

 

유저 : 010-1111-2222

챗봇 : 주소를 입력해주세요

상태 : Main(주문), Sub(주소)

변수 : Slot(피자/슈프림피자, 전화번호/010-1111-2222, 주소/None)

 

유저 : 서울 강남구 신사동

챗봇 : 주문 감사합니다. 곧 배달하도록 하겠습니다.

상태 : Main(주문), Sub(None)

변수 : Slot(피자/슈프림피자, 전화번호/010-1111-2222, 주소/서울 강남구 신사동)

 

 

 

이런 FSM 구조의 장점은 대화의 문맥을 유지할 수 있다는 점입니다. 위의 예시에서 '별로...'라고 말했을때 Main(메뉴소개), Sub(피자)라는 상태를 알고 있기 때문에 새로운 피자를 추천할 수 있었습니다. 문장의 의미를 검사할때 상태에 따라서 좀 더 적합한 대답을 선택할 수 있습니다.

 

하지만 상태가 많아질수록 전체적인 구조를 파악하고 상태간의 전이를 처리하기 힘들다는 단점이 있습니다. 하지만 제한된 범위에서 챗봇을 구현할때 FSM이 유용하게 사용될 것이라 생각합니다.

 

 

 

< 챗봇 개발자 모임 >

- 페이스북 그룹에 가입하시면 챗봇에 대한 최신 정보를 쉽게 받으실 수 있습니다.

https://www.facebook.com/groups/ChatbotDevKR/

List of Articles
제목 글쓴이 날짜 조회 수
구글홈의 대화를 작성하는 Personality Team 깊은바다 2018-09-23 442
챗봇UX 작업기 깊은바다 2018-09-05 921
컨버세이션 디자인: 봇의 좋은 대화는 어떻게 만들어질까 깊은바다 2018-08-28 481
귀와 입만 사용하는 UX: 아마존 에코 깊은바다 2018-08-24 238
AI 스피커의 VUX 설계 시 고려할 것들 깊은바다 2018-08-14 491
챗봇 디자인 UX 팁 6가지 깊은바다 2018-07-18 889
UX 디자인 측면에서 짚어본 챗봇의 다섯 가지 포인트 깊은바다 2018-06-16 513
시나리오 기반의 대화형 UX 기획 및 챗봇 제작 실습 깊은바다 2018-06-08 1664
챗봇은 어떻게 만들까? - 대화식 스토리 깊은바다 2018-06-05 1006
챗봇 기획: 10개의 UX 체크리스트 깊은바다 2018-05-29 723
챗봇이 처리하지 못하는 질문을 받았을 때의 에러 핸들링 깊은바다 2018-05-26 635
메시징 플랫폼, 디자인이 필요할까? 깊은바다 2018-05-18 304
챗봇 분석: 챗봇에서 나오는 데이터와 인사이트 깊은바다 2018-05-08 881
100일 간의 챗봇 디자인 실패기 깊은바다 2018-05-03 627
봇 설계는 이렇게 한다 file 깊은바다 2018-03-18 6044