레플리
글 수 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
제목 글쓴이 날짜sort 조회 수
챗봇을 기획해보자 - 플로우차트 작성하는 방법들 깊은바다 2021-05-10 1467
사람들은 AI와 대화를 얼마나 잘할까? - 이루다 베타테스트 분석 깊은바다 2020-11-07 664
슈퍼휴먼 AI를 꿈꾸는 루다의 대화 구성 깊은바다 2020-10-14 584
카카오 i, 누구냐 넌 - 페르소나 구체화 방법 깊은바다 2020-08-09 779
롯데의 인공지능 디스플레이, 샬롯홈의 UX 개발기 깊은바다 2020-03-20 588
친근하고 귀여운 챗봇 디자인 - 핑퐁의 파이팅 루나 깊은바다 2020-02-04 674
Vivibot을 만든 UX writer의 경험 - 챗봇의 성격이 중요 깊은바다 2020-01-10 444
핑퐁을 디자인하고 만드는 사람들…AI 디자이너, 머신러닝 엔지니어 깊은바다 2019-12-03 456
구글 UX디자이너가 사이트 챗봇화로 배운 교훈 깊은바다 2019-11-25 559
인공지능 UX디자이너가 말하는 초개인화 깊은바다 2019-04-08 1042
단비(danbee) 챗봇 빌더의 코스 교정 기능 file 깊은바다 2019-03-07 958
스타트업 기획자의 월화수목금 - 타로챗봇 라마마 개발기 깊은바다 2019-03-04 922
대화 디자인 방법 - Conversational UI design process 깊은바다 2019-01-21 1100
프로야구봇 기획자를 만나다 깊은바다 2018-10-27 644
챗봇 에이전트 정체성에 따른 사용자의 인식 및 행동 차이에 대한 연구 file 깊은바다 2018-09-25 464