목표
작성된 시나리오를 기반으로 Dialogflow를 이용해서 인공지능 챗봇을 구현하기 위해 기본 지식과 사용법에 대해서 알아보겠습니다.
목차 클릭하면 해당 목차로 이동합니다.
개요
콘도 예약을 위한 인공지능 챗봇을 개발하는 것이 궁극적인 목표입니다.
인공지능 챗봇이 무엇인지, 왜 필요한지에 대해 알아보고 어떻게 구현할지 시나리오를 작성했습니다.
인공지능 챗봇을 개발하는 것을 도와주는 챗봇 빌더는 IBM 왓슨, Chatfuel, Dialogflow 등 여러 가지가 있습니다.
IBM 왓슨은 고성능이지만 유료이고, Chatfuel은 간단하지만 한글을 지원하지 않습니다.
Dialogflow는 우리가 필요한 기능을 무료로 사용할 수 있고 한글도 지원하기 때문에 아주 적합합니다.
따라서, 구글에서 제작한 챗봇 API인 Dialogflow를 통해서 시나리오 챗봇을 구현하겠습니다.
초기 환경 설정
Dialogflow를 사용하기 전에 배경 지식을 쌓아야합니다. Intent가 무엇인지, Entity와 같이 필요한 내용을 알아보겠습니다.
우선, 다음 링크를 통해서 Dialogflow 콘솔에 접속합니다.
https://dialogflow.cloud.google.com/
접속해서 로그인을 하면 왼쪽 상단에 "Create Agent" 버튼이 있습니다. 그 버튼을 누르면 다음과 같은 화면이 뜨게 됩니다.
Agent는 쉽게 프로젝트라고 생각하시면 됩니다. 우리가 만들 챗봇을 생성하는 것입니다.
상단 Agent name에 이름을 입력하고 언어를 한글(Korean), Time Zone을 Asia/Tokyo 로 설정하고 CREATE 버튼을 누르면 됩니다.
위와 같은 화면이 나왔다면 Agent가 제대로 생성된 것입니다.
왼쪽 메뉴를 보면 Intents, Entities 등이 보이는데요. 챗봇을 만들기 위해 필요한 것들입니다. 어떤 것인지 알아볼까요?
Intent (의도)
Intent는 문장이 무엇을 의미하는지 문장의 의도를 파악하는 것입니다.
챗봇에게 말을 걸면 Agent(프로젝트)내에서 가장 유사한 Intent(인텐트)를 찾아서 매칭시킵니다.
예를 들어, "오늘 날씨 어때?" 라는 문장을 입력하면 만들어진 인텐트 중 일기 예보와 관련된 인텐트를 찾아서 매칭시킵니다.
위 사진은 Agent 생성 시 기본으로 생성되는 Welcome Intent입니다.
Training Phrases(문장 학습)를 보시면 "오랜만이야", "안녕", "저기"와 같은 인삿말들이 학습되어 있는 것을 볼 수 있습니다.
챗봇에게 "안녕" 이라고 입력하면 이 Welcome Intent와 매칭되어 다음과 같이 미리 지정된 응답을 하게됩니다.
"안녕!", "안녕하세요!" 가 Responses(응답)으로 미리 정해져 있는 것을 볼 수 있습니다.
챗봇에게 "안녕" 이라고 입력하면 "안녕!" 이라는 응답을 하게 되는 것입니다.
만약, 챗봇이 문장을 이해하지 못한다면 어떻게 해야할까요? 이런 상황을 대비해서 Fallback-intent라는 것이 존재합니다.
시나리오를 진행하기 위해서 순서대로 진행을 할텐데, 그에 맞는 답변을 얻지 못한다면 Fallback-intent로 넘어가게 됩니다.
Fallback-intent로 넘어가는 등 항상 순서대로 Intent가 진행되는 것이 아니기 때문에 대화의 흐름을 제어할 필요가 있는데요. 이는 Context를 이용합니다
Context
Intent에는 input-Context와 Output-Context가 존재합니다. 마치, 함수의 입력값과 출력값을 생각하시면 좋을 것 같은데요.
다음 예시를 보겠습니다. 제가 멘토링을 진행하면서 생성했던 인텐트 중 일부입니다.
보시면 input-Context에 2개, output-context에 2개씩 있는 것을 볼 수 있습니다.
먼저, output-Context는 이 인텐트가 정상적으로 작동하고 챗봇이 응답하면 챗봇은 이 output-Context를 기억하고 있습니다.
제가 네모박스 친 곳 보이시나요? 20이라고 설정해놓았습니다. 이 부분은 Lifespan(수명)입니다.
대화를 20번 하는 동안 이 Context를 기억하고 있는 것입니다. 20번이 지나면 이 내용을 기억하지 못합니다.
(어떤 내용인지는 조금 있다가 나옵니다.)
인텐트를 실행하기 위해서 챗봇이 알고 있어야 하는 Context입니다.저 2개의 Context를 알고 있어야 이 인텐트를 실행하게 됩니다.
이렇게 Context를 조절해서 대화의 흐름(순서)을 제어할 수 있습니다.
이렇게 Intent는 문장의 의도를 파악하고 그에 맞는 응답을 하는 부분입니다.
인삿말만 해도 "안녕", "하이~" 와 같이 다양하게 존재하는데요. 챗봇의 정확성을 높이기 위해서는 다양한 문장을 학습하는 것이 중요합니다.
특히, 한글같은 경우에는 띄어쓰기도 다른 문장으로 받아들이기때문에 더욱 정교한 학습이 필요합니다.
Entity (개체 정보)
챗봇에게 "콘도 예약해줘"라고 입력하면 이게 콘도를 예약해달라는 뜻인지 어떻게 알 수 있을까요?
그러기 위해서는 "콘도"와 "예약"이라는 단어를 학습시켜야합니다.
이런 매개변수같은 역할을 하는 것이 Entity입니다. 한 번 직접 Entity를 생성해보겠습니다.
마찬가지로 왼쪽의 Entites를 눌러 상단의 "Create Entity"를 누르면 다음과 같은 화면이 나오게 됩니다.
상단에 Entity name을 입력하면 됩니다. 저는 "condo_type"으로 생성해보겠습니다.
이름 입력하는 곳 밑에 "Define synonyms"가 체크되어 있는데, 이는 동의어를 설정하겠다는 의미입니다.
이 설정은 직접 만들면서 자세히 보도록하고 옆에는 "Allow automated expansion"이라는 설정이 있습니다.
이건 자동 의미 확장이라는 뜻인데, "1, 2, 3···"과 같이 일정한 순서를 갖는 Entity는 자동으로 확장하겠다는 뜻입니다. 동의어만 체크하고 넘어가겠습니다.
Entity를 생성하기 위해서 중간에 "Click here to edit entry"를 클릭하면 다음과 같이 변합니다.
그럼 "Enter reference value" 와 "Enter synonym"으로 나뉘어 입력할 수 있게 됩니다.
챗봇은 sysnonym에 적은 내용들을 reference value로 인식하게 됩니다. 한마디로 내용과 이름이라고 할 수 있겠네요.
콘도 타입(종류)는 서울한화콘도, 제주신화콘도, 강원롯데콘도가 있다고 생각하고 작성해보겠습니다.
보시면 오른쪽에 적은 "서울 한화 콘도", "한화콘도" 이 모든 말들을 "서울한화콘도"로 받아들이겠다는 의미입니다.
동의어 설정을 체크했기 때문에 여러 종류의 동의어를 한 개의 뜻으로 받아들일 수 있습니다.
저장하면 위와 같이 Entity가 생성됩니다.
아까 Context에 대해 얘기할 때, 인텐트의 내용을 기억하고 있다고 말씀드렸습니다.
챗봇과 얘기할 때, 사용자가 "서울한화콘도"를 선택한다고 말하면 "condo_type"의 값은 "서울한화콘도"가 되는 것입니다.
이 내용을 Context의 Lifespan의 수 만큼 기억하고 있는 것입니다.
Training Phrase(문장 학습)
Dialogflow를 사용하기 위해 꼭 알아야하는 Intent와 Entity에 대해서 알아보았습니다.
정확도가 높고 편리한 챗봇을 만들기 위해서는 다양한 종류의 문장을 많이 학습해야합니다.
사실, 자연어 처리를 통해서 문장을 학습하는 것은 상당히 까다로운 부분입니다. 특히나 한글은 더더욱 그런데요.
이 부분을 구글이(Dialogflow가) 대신 해주는 것입니다. 문장 학습은 대화의 의도를 파악하는 인텐트를 생성할 때 문장 학습이 진행됩니다.
인텐트를 생성하면 중간에 "Training Phrases"라는 부분이 있습니다.
"Add user expression"에 문장을 입력하면 보시는 것처럼 Entity를 자동으로 필터링하는 것을 볼 수 있습니다.
당연히 100% 정확하지는 않습니다. 잘못 인식된 부분을 마우스로 드래그하면 원하는 Entity로 설정할 수 있습니다.
말씀 드렸듯, 한글은 띄어쓰기도 구분해야하고 표현이 매우 다양하기 때문에 많은 문장을 학습시켜야 사용하기 좋습니다.
이렇게 문장을 학습하면 그 다음 "Action and parameters"에서 Entity들이 Parameter(매개변수)로 분리되는 것을 볼 수 있습니다.
REQUIRED, PARAMETER NAME, ENTITY, VALUE, IS LIST, PROMPTS 총 6개의 섹션으로 분리되어 있습니다.
REQUIRED : 이 인텐트에서 꼭 필요한 값 (입력되지 않으면 재입력 요구)
PARAMETER NAME : 대화 중 입력받은 데이터(콘도종류)를 외부 서버나 API로 전송할 때 사용되는 변수이름
ENTITY : 해당 Entity
IS LIST : Entity 값이 여러 개일 경우 리스트 형식으로 입력 받을 수 있게합니다.
PROMPTS : REQUIRED 설정이 체크되어 있을 경우, 꼭 필요한 Entity가 입력이 되지 않았을 때 재입력을 요구하는 메세지
이렇게 문장 학습을 마치고 챗봇의 Response(응답, 대답)을 설정하면 인텐트 생성이 완료됩니다.
당연히 작성을 완료하고 상단의 "SAVE" 버튼 누르는 것을 잊으시면 안됩니다!
결과 확인
필요한 Intent, Entity를 생성하였으니 결과를 확인해봐야겠죠?
화면의 오른쪽에 문장을 입력하면 현재까지 작성된 챗봇을 테스트 해볼 수 있습니다.
"Try it now"에 문장을 입력해서 챗봇이 정상적으로 작동하는지 확인할 수 있습니다.
제가 멘토링 중 작성했던 챗봇의 결과화면입니다.
챗봇이 인텐트에 설정된 응답을 제대로 하고, 설정된 output-Context를 갖고 있는 것을 확인할 수 있습니다.
또한, 정상적으로 Entity에 값이 저장 되는 모습을 확인할 수 있습니다.
이렇게 중간에 오른쪽에 문장을 입력해서 제대로 작동하는지 확인할 수 있습니다.
Fullfillment
Fullfillment는 외부 서버와 챗봇을 Restful API로 정보를 주고 받을 수 있게 하는 것입니다.
json 형식으로 데이터를 주고 받거나 java script를 통해서 설정할 수 있습니다.
Webhook을 통해서 DB나 외부 API와 연동할 수 있습니다.
Dialogflow는 위와 같은 아키텍처를 가지고 동작합니다.
자세한 내용은 기본적인 챗봇을 구현하고 나서 다루도록 하겠습니다.
Integration
Integration은 만들어진 챗봇을 메신저나, 웹, 음성 비서 등과 연동하는 것을 제공합니다.
역시 구글 답게 많은 슬랙, 페이스북과 같은 서비스와 연동할 수 있도록 기능을 제공합니다.
Dialogflow는 텍스트 기반 챗봇 뿐만 아니라, 음성인식도 가능한데요. 빅스비와 같은 음성비서도 연동이 가능합니다.
지금 진행하고 있는 콘도 예약 챗봇은 텍스트 기반 챗봇이기 때문에 Web Demo를 이용하여 구현된 챗봇이 제대로 작동하는지 확인할 예정입니다.
지금 Knowledge를 생략하고 넘어갔는데, 웹페이지에서 정보를 찾아서 전달하는 기능입니다.
현재 베타버전이고 영어만 가능하기 때문에 한글 기반 챗봇인 저희는 사용하지 않는 설정입니다.
정리
이번 포스팅에서는Dialogflow를 사용하기 위한 배경 지식을 쌓는 시간을 가졌습니다.
Dialogflow는 여러가지 장점이 있지만 문서가 한글로 잘 정리되어 있는 것도 큰 장점입니다.
문서를 참조해서 자세한 내용을 읽어보는 것도 많은 도움이 될 것이라고 생각합니다.
Dialogflow 공식 문서 : https://cloud.google.com/dialogflow/es/docs
다음 포스팅에서는 이번에 배운 내용을 가지고 직접 콘도를 예약하는 챗봇을 설계해보도록 하겠습니다.
읽어주셔서 감사합니다.
'프로젝트 > 인공지능 챗봇(AI Chatbot)' 카테고리의 다른 글
[인공지능 챗봇] 콘도 예약 챗봇 최종 기획서 및 회고 (1) | 2021.08.18 |
---|---|
[인공지능 챗봇] Dialogflow로 콘도 예약 챗봇 구현하기 - (2) (0) | 2021.08.09 |
[인공지능 챗봇] 인공지능 챗봇 시나리오 작성, Decision tree란 (0) | 2021.07.15 |
[인공지능 챗봇] 인공지능 챗봇 기획, 기획서 제안 (0) | 2021.07.14 |
[인공지능 챗봇] 인공지능 챗봇의 정의, 종류, 특징 (0) | 2021.07.13 |