Feat. IBM Waston Conversation
이번 시간에는, Watson Conversation Service를 이용한 AI 챗봇 만들기를 실습할 것이다.
이번 실습의 목표는 챗봇 제작 및 IBM Cloud 시스템을 사용한 연동, 개발이다.
더 나아가 시간이 허락되면 카카오톡 같은 외부 플랫폼과의 연동 또한 실습해 보도록 하겠다. 이번 실습에서는 작업 환경을 On-premise 환경에서 구축하는 방식이 아닌, IBM의 Cloud 서비스를 기반으로 챗봇을 제작할 것이기 때문에 실습을 완료한 후에는 챗봇뿐 아니라 IBM Cloud에 대한 좋은 경험이 될 것이라 기대해 본다.
본격적으로 실습을 시작하기 전에 기술 소개를 잠깐 하고자 한다. IBM Watson™ Conversation은 자연어를 이해하고 기계 학습(Machine learning)을 사용하여 사람과 같이 대화하는 애플리케이션을 만들 수 있도록 해주는 서비스이다. 여러분은 Conversation Service를 사용하여 다음과 같은 아키텍처의 애플리케이션을 설계할 수 있다.
실습에 있어 아키텍처는 늘 건너뛰고 싶은 부분이다. 하지만 챗봇의 경우 타 시스템에 비해 아키텍처가 직관적이고 단순하다. 아키텍처는 프로그램 개발 시 핵심 로드맵이 되기 때문에 조금 귀찮을 지라도 나중을 위하여 차근차근 분석해 보도록 하자.
왼쪽부터 오른쪽 순으로 설명하자면, 사용자(=Users)들이 이제부터 우리가 개발할 챗봇을 사용하게 될 것이다.
이들은 우리가 구현하게 될 카카오톡뿐 아니라 Facebook 메신저, Slack 등을 통하여 대화 내용을 입력하게 될 것이다. (=Interface) 챗봇 스타일의 시스템이 아닐 지라도 웹 또는 IoT 기기 등을 통하여도 Interface 가능하다. 카카오톡을 예로 들면 “반가워”라는 카톡 메시지를 입력하면 해당 메시지가 카카오톡 서버를 통하여 IBM Application으로 전달 되게 된다.
이렇게 전달된 메시지는 Conversation이라는 IBM Service(=Conversation service)의 Input 값으로 전달되어 이후 적절한 응답을 도출하게 된다.
단순 “반가워”라는 input만 있는 경우는 “저도 반갑습니다.” 정도의 Output을 나타내면 되지만, 음성을 사용하고 싶거나 해당 음성에 다양한 사람의 억양 또한 적용하고 싶은 경우 Text to speech, Tone Analyzer라는 Conversation 이외의 IBM Service (=Other Watson service)를 사용해야 한다.
여기에 “비행기 스케줄 조회해줘” 등의 전문 지식을 요구하는 명령을 Input 값으로 입력하는 경우, 스케줄을 조회할 수 있는 비행기 시스템(=Back-end Syetem)에서 결과 값을 받아오기 위해 Input 메시지를 항공사 시스템이 이해할 수 있는 명령어로 변환 및 Parsing 하여 전송해 주어야 한다.
이후 해당 시스템은 해당 프로그램에서 미리 짜인 프로그램을 통하여 적절한 결과를 Return, 처음 Input을 입력 한 사용자에게 Output으로 응답해 주게 된다.
결과적으로 사용자 입장에서는 내가 어떠한 값을 입력했는데 인공지능 챗봇이 자동으로 적절한 답을 제시해 주는 것과 같은 느낌을 받게 된다. 이것이 챗봇 제작의 전체적인 시스템 아키텍처이며 향후 어떠한 챗봇을 개발한다 할 지라도 이 틀에서 벗어나는 것은 거의 없을 것이다. 따라서 본격적인 개발에 앞서 반드시 관련 내용을 숙지하도록 하자.
오늘 우리가 실습할 내용은 위 그림 중 Conversation service (아래 사진 참고) 제작이다. 이 서비스가 하는 역할은 사용자가 입력한 Input 값에 대한 의도를 학습, 파악하여 Output을 구성하는 것이다.
* 우리가 진행할 실습은 다음과 같은 내용을 포함하고 있다.
. 이번 시간 실습
- IBM Watson Conversation을 활용한 AI Chatbot 빌드
. 이후 실습
- Node.js앱 생성
- Local에서 앱을 수정 및 테스트하는 방법
- 타 메신저 (카카오톡, 페이스북 메신저 등)와 연동 (미정)
1. Watson Conversation 시작하기
1.1 소스코드 다운로드
- InnovationNews-sources.zip 파일을 다운로드한다. (별도 문의)
1.2 Bluemix에서 IBM Watson Conversation 서비스 작성
- 웹브라우저에서 http://bluemix.net 에 접속하여 회원 가입을 한다. 가입 후 로그인하면 아래와 같은 화면이 나온다. 지역은 미국 남부로 선택 (다른 지역을 선택해도 상관없으나 추후 작업 시 내가 작성한 지역을 기준으로 개발 목록이 관리가 되므로 신중히 선택하도록 한다.) 그다음 왼쪽 위에 있는 햄버거 메뉴를 누르면 IBM Cloud에서 사용 가능한 항목들이 Catalog 형식으로 나오게 된다.
- 햄버거 버튼을 누르면 아래와 같이 IBM 서비스들이 나오며 우리가 이번 실습을 통해 체험하게 될 서비스는 이 중 아래 빨간색 박스로 표기된 Watson 서비스이다.
- 화면 오른쪽 위에 보면 카탈로그라는 항목이 있는데 이를 클릭하면 사용 가능한 IBM Cloud Service들이 나오게 된다.
여기서 플랫폼 – Watson – Conversation 항목으로 들어간다.
- Conversation을 클릭하면 아래 그림과 같은 화면이 보인다.
원하는 서비스 이름을 등록한다. (ex. Conversation-innovation)
여기서 아래로 내려보면 가격 정책이 있는데, Lite 플랜으로 선택해야 한다. (default로 자동 선택되어 있음)
IBM Service는 Lite 플랜으로 하면 한 달 무료 사용이 가능하며 이후는 금액이 청구되어 신용카드 등록을 해야 사용 가능하다. 처음에는 아래 그림의 빨간 박스 내 작성이 비 활성화가 되어 있지만, 가만히 기다려 보면 작성이 활성화된다. 이후 “작성” 클릭
- 작성 버튼을 클릭하면 대시보드에 내가 생성한 Conversation 서비스가 보인다.
빨간 박스의 이름 ( Ex. Conversation-innovation ) 클릭.
- Launch tool 클릭.
- Workspaces는 대화 로직을 구성하기 위한 작업공간 개념이다.
아래 사진을 참고하면 자동차 관련 대화에 대한 샘플이 “Car Dashboard”로 있다. “Get started”로 테스트해 볼 수 있다. 새로운 workspace를 만들기 위해 화면 내의 “Create”를 클릭하여 생성해도 되지만, 기존에 만들어진 것을 export 한 Json 파일을 다시 import 할 수 있다. 이번 시간은 Intent, Entity, Dialog 생성 시간을 단축하기 위해 기존에 만들어진 Json 파일을 Import 해 보도록 하겠다.
아래 빨간 박스 클릭하여 Import workspace를 진행한다.
- ‘Choose a file’ 버튼을 클릭한 후 소스코드 디렉터리의 ‘./training/sample.json’ 파일을 선택하고 ‘Import’를 클릭. ( Intent, Entity, Dialog 등이 미리 만들어진 내용이며, 굳이 Import 하지 않고 수동으로 만들어도 관계없다.)
- Import가 끝나면 아래와 같이 Workspaces 공간에 회의실 관리 앱 하나가 추가된 것을 알 수 있다.
- 회의실 관리 앱을 클릭하면 Intents, Entities, Dialog 탭에 이미 몇 가지가 완성되어 있는 것을 볼 수 있다.
Intent와 Entity 관련 내용은 지난 시간 인공지능 챗봇(Chatbot) 프로그램 개발 (1) 참고.
- Intent 하나를 추가해보기 위해 Add intent 버튼을 클릭.
- 이름을 묻는 intent를 추가하기 위해 Intent name에 통성명을 입력 후 Create intent 버튼 클릭.
- Add user examples에 이름을 묻기 위한 질문을 등록한다.
샘플로 한 10개 정도 넣어주면 된다.
* 반드시 여기에 등록된 질문에만 답을 할까? 대답은 “등록되지 않은 질문도 비슷하면 답할 수 있다”이다. IBM Conversation과 구글, MS과 같은 챗봇의 가장 핵심 기능은 “자연어 처리 능력”이다. 여기서 말하는 자연어 처리 능력이란 똑같이 등록되지 않은 질문도 비슷하면 이를 파악할 수 있는 능력이다. 그 비슷함을 파악하는 방법은 각 사 마다 자신들의 알고리즘을 가지고 있을 것이며, 한국어가 언어 중 가장 자연어 처리가 힘들다고들 한다.
- 질문 입력이 끝나면 Dialog 탭 클릭. 아래와 같은 화면이 나오면 Add node 버튼 클릭
- Add node 버튼 클릭 후 아래 그림의 오른쪽 박스에 있는 If bot recognizes에 Intent명 Then respond with에 응답받기 원하는 멘트를 입력.
- 입력 후 Dialog 탭 화면 오른쪽 위에 아래와 같은 대화 풍선 그림 클릭
- 입력 한 대화를 테스트해볼 수 있는 창이 열린다.
빨간색 박스를 참고하면 비슷한 질문을 해도 통성명이라는 Intent를 인식하며 사전에 저장 해 둔 응답을 말하는 것을 알 수 있다.
노란색 박스의 경우 “네 이름은?”이라는 질문을 했으나, 제대로 된 의도를 파악하지 못한 것을 알 수 있다.
이는 사전에 등록한 Intent에서 <너, 넌>은 등록이 되었지만 <네>라는 단어를 한 번도 등록한 적이 없기 때문이다. (위에 예시문 입력 사진 참고)
지금까지 Watson Conversation Dialog 생성 예제를 살펴보았다.
이번 실습을 통해 만든 Dialog는 나의 Workspace에서만 작동하기 때문에 조금 심심할 수 있다.
우리의 최종 목표는 IBM Conversation을 활용한 카카오톡 or 페이스북 메신저를 활용한 인공지능 비서(스케줄 관리 챗봇) 개발이기 때문에, 다음 시간에는 IBM Cloud 웹 서버 생성 및 연동, 날씨 API를 사용하여 나의 Workspace를 벗어나 웹 화면에서의 챗봇 테스트를 실습해 보겠다.