여러분들이 생각하시는 챗봇이란 무엇인가요?
제가 내린 정의는 이렇습니다.
챗봇은 시나리오 기반의 대화형 인공지능 시스템
그렇다면 기계와 사람이 대화하기 위해선 사람이 쓰는 말을 기계가 이해하는 것이 필요합니다.
그것이 NLU라고 부르는 기술이죠. 개념이 잡히셨다면 나에게 필요한 챗봇을 직접 만드는 방법을 얘기 해 볼께요.
처음 챗봇을 만들어 보시는 분들을 위해 차근차근 기획해 봅시다.
챗봇 용어를 잘 모르겠어요!
제가 잘 설명해 드릴께요!
● 메시지
메시지는 환영메시지, 이해 못한 메시지로 나눕니다.
환영메시지의 경우 봇을 처음 시작할 때 나오는 안내 메시지를 설정할 수 있습니다.
이해하지 못한 메시지에서는 무슨 말인지 알아듣지 못할 때마다
"다시 한번 말씀해 주실래요?" 라는 메시지가 나오도록 등록해 두면
오류발생이라는 말보다는 조금 더 완곡한 메시지가 되겠죠.
● 엔티티
엔티티는 사람의 발화 의도 중에 주요 키워드를 파악해 내기 위해 등록합니다.
예를 들어 피자, 음료수, 지불 등의 단어가 엔티티가 될 수 있습니다.
● 인텐트
인텐트는 말하는 사람의 의도 입니다.
하나의 인텐트에 여러 문장을 등록할 수 있습니다.
기본적으로 Intent와 Entity가 정의가 되면 어떤 흐름으로 구성이 될지 흐름을 정의해야 합니다.
● 스텝
스텝은 시나리오를 구성하는 한 단위의 기능단위 입니다. IF/Then 블록들로 구성되 있죠.
앞에서 등록한 인텐트와 엔티티는 스텝안의 IF블럭에서 조건으로 쓰입니다.
각각의 블록은 어떤 조건을 인식하고 분기 할 지, 조건을 정의합니다.
그리고 값이 들어왔을 때 어느 슬롯에 값을 채울지를 정의할 수 있습니다.
그리고 시나리오 의도대로 분기하게 됩니다.
● 시나리오
흐름을 정의하는 것이 시나리오 입니다.
첫 스텝부터 종료 스텝까지, 사용자가 원하는 결과를 얻어낼 때까지 대화가 이루어 집니다.
시나리오는 목적에 맞는 대화의 흐름의 틀을 만들어 주는 역할을 하게됩니다.
● IRQA
IRQA는 검색기반의 유사도 알고리즘을 사용한 QA엔진입니다.
IRQA는 시나리오 대화에서 벗어났을 경우를 대비하여 자주질문을 할만한 유형의 질문을 등록하는 용도로 쓰입니다.
예를들어, 게시판에서 FAQ내용을 가져와 자주묻는 질문에 대한 답변을 입력해 두면 대응하기 편해질 것입니다.
IRQA가 어떻게 작동하는지 볼까요?
원본 : 밀가루 원산지가 어디인가요?
변형문1 :밀가루 원산지가 어디죠?
말을 다르게 해보아도 유사도가 높은 문장이기 때문에 답변을 합니다. 하지만 이렇게 물어볼까요?
변형문2 : 치즈 원산지가 어디에요?
다른 문장이기 때문에 답변을 하지 않습니다.
● 배포
봇을 다 만들고 나서 배포를 하게 되면 서버에 바로 배포를 진행할 수 있습니다.
배포를 하고 나면 배포된 채팅 서버들에 대한 링크가 나타나게 됩니다.
그 채팅링크를 클릭하면 사용자가 보는 화면이 나오게 됩니다.
사용자들은 실제로 이 링크에 접속을 해서 대화를 생성합니다.
챗봇 빌더를 보여주세요!
엔티티 사전을 한번 등록해볼까요?
엔티티 사전을 챗봇 빌더에 넣었을 때의 모습입니다.챗봇에서 값을 불러 와 볼께요.
인원수 "2명" 이라고 했을 때, 엔티티이름은 "인원수"이고 속성이 "몇명"인 @{인원수.몇명} 가 인식되겠죠?
사용자 발화 문장을 입력해 볼까요?
"전화번호 알려 줘" 라는 문장을 입력하면 다음과 같이,
사용자 발화를 기계가 이해할 수 있도록 NLU 분석을 합니다.
챗봇은 이렇게 사용자의 발화의도를 입력해 준 후에야 작동을 할 수 있습니다.
즉, 봇 빌더중에서 인텐트의 역할은, 사용자의 발화를 기계가 이해할 수 있도록
문장을 등록해 주어야 하는 부분이라고 이해를 하시면 됩니다.
전화번호, 알려줘, 로 토크나이징 되어있죠?
부연설명을 하자면,
토크나이징 이란 이란 문서나 문장을 분석하기 좋도록 토큰으로 나누는 작업입니다.
대화모델을 작성해 볼까요?
한 칸의 스텝은 시나리오를 구성하기 위한 한 단위의 노드가 됩니다.
스텝은 IF/Then 블록들로 구성되어 있습니다. 만약 A라는 조건이 들어오면 B라는 액션을 취하고 C라는 다음스텝으로 이동해라는 블럭들이 모여 분기하게됩니다.
B라는 액션에 해당하는 부분이 THEN 칸입니다. 조건을 인식하고 답변(액션, 액션스크립트, 텍스트, 스마트카드)을 제공했을 경우 이동할 다음스텝을 지정하여 이동할 수 있습니다.
시나리오를 완성하면 보아는 화면에서처럼 흐름도가 나오게 됩니다.
스텝은 시작과 끝을 명시적으로 설정해주어야 시스템이 인식할 수 있습니다.
초록색 스텝이 시작, 주황색 스텝이 종료스텝, 회색이 비즈니스 스텝이에요.
시나리오를 구경하고 싶어요!
시나리오A 테스트 화면입니다.
시나리오B 테스트 화면입니다.
챗봇을 잘 만들고 싶어요!
챗봇 작성 tip 대방출~!
1. 사용자에게 사용법 가르치기
초반에는 인사말과 함께 정체성이 드러나는 자기소개를 해줍니다.
2. 사용자가 챗봇의 유용함을 인지
전문적으로 알고있는 지식, 기능을 안내하여 사용자가 익숙하게 봇을 이용하도록 유도해주는 것이 중요해요.
3. 말투와 성격 설정하여 일관성, 친절함 유지
챗봇이 이런 답변을 한다고 상상해볼께요
"그런데?시른데? 잘모르겠는데?"
이렇게 대답한다면요?
나랑 싸우자는 거냐?!
가 되는 거죠. 심지어 욕해주는 챗봇도 같이 욕하는 대상한테는 가차없이 욕해도 사용자에게는 공손합니다.
그래서 우리가 챗봇의 말투를 등록할때 이점을 꼭 명심해주셨으면 합니다. 오는말이 고와야 가는말도 곱다.
오는말이 험해도 가는말은 고와야 한다는 점을 인지하고 친절함을 잃지 않도록 답변을 구성해야겠죠?
4. 언제든지 그만하기
솔트룩스 챗봇에는 '글로벌 스텝'이라는 장치가 있어요. 전역변수라고 하면 이해하실까요? 글로벌스텝의 IF/THEN 블럭에 #{그만하기} 인텐트를 등록하여 종료스텝으로 연결해 두면 언제든지 그만두게 할 수 있는 유용한 기능이에요.
5. 주제에 미리 예정된 스토리 내장
시나리오 B를 읽어볼까요? 다이어트 비법을 알려주겠다며 찜질방으로 유도하고 있죠?
사용자가 찾고 싶은 정보를 딱 알려줬다 싶을때 관광지/숙소 정보를 제공합니다.
이러한 스토리가 내장되어 있어야 계속해서 고객을 유입을 시킬수있겠죠?
6.데코레이션
대화모델을 사전읽듯이 안내했다간 금방 흥미가 떨어지고 말겁니다. 다음 예시를 보면 차이가 느껴질 거에요!
무덤덤한 예
뉴욕 155 5번가로 에스프레소
한잔 맞습니까?
데코레이션한 예
뉴욕은 사랑스러운 곳이죠…
뉴욕 155 5번가로 에스프레소
한잔 맞습니까?
7. 명시적 확인 & 암묵적 확인
입력한 내용이 제대로 처리되었는지 사용자에게 확인하거나, 동작을 위해 필요한 권한을 요청하는
작업이 수반되어야 해요!
명시적 확인
문의주신 분의 주소를 강남구 역삼동으로 설정하려고 합니다. 맞습니까?
암묵적 확인
예약날짜를 12월 4일로 설정하겠습니다.
8. 질문 및 제안으로 참여를 유도하기
사용자의 반응을 살펴요!
문의한 내용을 메일로 보내 드릴까요?
챗봇은 사람인가요?
챗봇 대답이 느린 것 같아요!
9. 흐름이 끊겼을 때 메뉴카드 대응하기
사용자가 뭐라고 말할지 모를 시점에 가이드 메뉴 카드를 띄워주면 흐름이 끊기지 않겠죠?
10. 에러처리
- 방법 1 : 사용자를 기획된 대화 흐름으로 끌어당기기
가이드 메뉴 카드를 띄워주는 방법이 있죠
- 방법 2 : 사람이 개입
실제 감독관이 개입하는 서비스체계가 있을 때, 챗봇이 답변을 못할 때 대응방법으로 좋습니다.
- 방법 3 : 대화를 다시 시작하기
안내해줄 정보가 없거나 답변을 못할 때 무조건 처음으로 보내버리는 방식입니다.
- 방법 4 : 봇이 답할 수 없는 질문에 다른 챗봇 연결
내가 만든 챗봇중에 여러서비스가 있다면 전문 챗봇으로 연결해서 보내는 방식입니다.
11. 랜덤화
패러프레이징한 문장을 랜덤하게 보여줍니다. 맥락은 유지하지만 도돌이표같다는 느낌은 없앨 수 있어요.