SW이야기 이동 SW칼럼 이동 SW칼럼

카카오톡 '챗봇' 으로 우리동네 알리미 만들기

SW중심사회 2017-10-30 5039명 읽음

 

 

부산모아는 카카오톡 기반의 생활정보 챗봇 서비스입니다.  자유로운 대화 형식의 챗봇으로, 부산의 대중교통 정보나, 맛집, 카페 추천, 관광지 안내, 날씨, 주차장, 미세먼지 등의 생활 정보를 제공하고 있습니다.

 

현재 부산모아는 카카오톡 친구 추가 후 바로 서비스 이용 가능합니다.
http://plus.kakao.com/home/@부산모아 를 클릭하셔서 친구 추가할 수 있습니다.

 

 

부산모아를 개발하면서 겪었던 시행착오와 교훈을 중심으로 제작기를 써보았습니다.
챗봇 도입을 고려하시는 모든 분들에게 도움이 되는 글이었으면 좋겠습니다. 

 

미세먼지 알리미를 만들자

 

 

 

2016년 4월, 매일 아침 운동 겸 집 앞 하천을 따라 산책을 했는데 미세먼지 농도가 짙은 날이 많아서 운동을 못 한 날이 많았습니다. 그래서 저는 아침에 일어나자마자 '미세먼지 농도'를 확인해 보곤 했습니다. 하루하루가 지나자 미세먼지 확인하는 것이 귀찮아지기 시작했고, 그래서 아침 7시마다 미세먼지 정보, 운동 가능 지수, 날씨 등을 정리해서 푸시 알림 해주는 애플리케이션을 만들어 보자라는 생각을 하게 되었습니다.

 

애플리케이션 개발에 앞서서, 앱스토어에 등록된 미세먼지, 날씨 등의 애플리케이션을 다운로드하여 설치해 보았습니다. 이미 많은 개발자 분들이 제가 고민하던 문제를 해결하기 위해 알림 기능, 조회 기능 등을 많이 구현해 두셨습니다. 그래도 내 입맛에 맞는 애플리케이션이 없어서 직접 개발을 하자고 결심을 하고 개발을 시작했습니다.

 

저장공간이 부족하여 앱이 정상 작동하지 않을 수 있습니다. 저장공간을 확인해주세요

 

개발을 시작하고 얼마 뒤, 제 아이폰에서 저장용량이 부족하다는 경고창을 보게 되었습니다. 시장 조사를 위해 설치해뒀던 많은 애플리케이션들 때문에 16GB 아이폰이 용량 부족 경고를 띄우기 시작했습니다.

 

경고창을 보고 난 뒤, 애플리케이션 개발이 과연 최선일까?라는 고민에 빠지게 되었습니다.

 

1. 스마트폰 저장용량이 부족한 사람들은 애플리케이션 설치에 부담감을 가질 것이다.
2. 애플리케이션을 많이 설치하다 보면, 스마트폰 성능 저하의 원인이 된다.
3. 과연 신뢰도가 없는 애플리케이션을 사용자들이 설치를 하고, 자주 사용할 것인가? (보안 이슈)

 

고민 끝에, 애플리케이션 개발을 하지 않고, 내가 원하는 미세먼지나 날씨 정보를 알려줄 수 있는 방법이 없을까? 생각하게 되었습니다.

 

카카오톡 자동응답 API의 활용

새로운 애플리케이션을 설치하지 않고, 정보를 제공할 방법을 찾다가, 카카오톡 옐로아이디 자동응답 API를 찾게 되었습니다. 대한민국 스마트폰 사용자 대부분이 설치하고 이용하는 카카오톡 채팅창에서 미세먼지, 날씨 등의 생활 정보를 받아 볼 수 있으면 편할 것이라고 생각했습니다.

 

카카오톡 옐로아이디
https://yellowid.kakao.com/

 

카카오톡 자동응답 API
https://github.com/plusfriend/auto_reply

 

사용자들이 카카오톡 옐로아이디를 친구 추가 후, 원하는 정보를 채팅창에 물어보면 자동으로 실시간 응답해주는 개념으로 서비스 기획을 시작했습니다.

 

부산의 생활 정보들을 모아서 채팅으로 제공해준다는 목표 아래 서비스명을 '부산모아'라고 정하고  옐로아이디를 개설 신청했고 이틀 후 계정 개설 승인을 받았습니다.

 

개발 환경으로 PHP + MySQL을 선택했습니다. 언어 선택에 특별한 이유가 있었던 것은 아니고, 비교적 쉬운 서버 세팅(국내 웹호스팅 업체 이용 가능)과 제게 익숙한 언어가 PHP였기에 빠른 프로토타입 제작을 위해 선택했습니다.

 

개발환경 세팅 후, 실시간 미세먼지 정보, 날씨, 대중교통, 공영주차장 정보 제공을 목표로 서비스 개발에 돌입했습니다.  공공데이터 포털의 API 등을 활용하여서 첫 번째 버전의 부산모아가 탄생하게 되었습니다.

 

공공데이터 포털
http://data.go.kr/

 

2016년 5월 10일, 페이스북 개인 타임라인에 첫 부산모아 소개 게시물을 올리고, 서비스 홍보를 시작하였습니다. 페이스북 게시물을 올린 그 날, 혼자만의 상상을 하면서 마음을 졸이고 있었습니다.

 

"사용자가 갑자가 늘어서 서버가 다운되면 어떻게 하지?
공공데이터 API 호출 건수가 초과해서 서비스가 다운되면 어떻게 하지?"라는 걱정을 했습니다.

 

하지만,
그런 일은 일어나지 않았습니다.
서비스 공개 첫날, 가입자 수는 57명이었습니다.

 

사용자는 기획 의도대로 사용하지 않는다.
페이스북 페이지도 만들고, 홍보 게시물을 올리면서 본격적으로 서비스 홍보에 나섰습니다. 조금씩 가입자가 늘기 시작하였고, 하루에 사용자들이 보내는 메시지의 양도 늘어나기 시작했습니다. 하지만 사용자가 늘어나면서 사용자 불만도 증가하기 시작했습니다.

 

 

위의 메시지 목록은 브런치에 공개할 수 있을 정도의 메시지만 선별하였고, 공개할 수 없는 수준의 심한 욕설도 많이 들어왔습니다.

 

서비스 소개글에 부산 지하철, 버스도착 정보, 날씨정보, 미세먼지 정보만을 제공하고 있다고 설명을 했지만, 실제 사용자들은 그 외의 다양한 정보를 묻는 메시지를 보내기 시작했고 '부산모아'는 "알아듣지 못했습니다"라는 메시지만 답장해주다 보니 사용자들의 불만이 계속 증가했습니다.

 

또 다른 원인으론 서비스 기획 의도대로 사용자들이 사용하지 않는다는 점이었습니다.
버스정류장의 고유번호인 "09070" 등의 번호를 입력하면 해당하는 버스 정류장의 버스 도착정보를 알려주는 형식으로 기획했지만 사용자들은 "09070 버스도착", "버스 언제와?" "버스 언제 와요?" 등의 메시지를 보냈습니다.

 

날씨의 경우에도 부산 날씨, 해운대 날씨라고 보내면 날씨정보를 알려주는 형식이었지만 실제 사용자들은 "부산 날씨 말해봐", "오늘 춥나", "오늘 덥냐고" 등 실제 일상생활에서 사용하는 방식으로 질문 메시지를 보냈습니다.

 

매뉴얼을 만들어 놓으면 사용자들은 매뉴얼을 읽고, 그 매뉴얼에 맞게 사용할 것이라고 생각하고 서비스를 기획 제작했지만 실제 사용자는 그렇지 않다는 점을 배울 수 있었습니다.

 

서비스의 보완 - 응답률을 높이자
사용자들의 일상 대화 형태(자연어) 메시지를 정확하게 답변할 수 있도록 서비스 보완을 시작했습니다. 서비스 보완을 위해서 다음 두 가지에 집중하였습니다.

 

1. 사용자들의 오타 메시지를 예측 가능한 대체어로 바꿔서 응답을 해주자.
2. 자연어 처리를 위해서, 형태소 분석과 기능별 의미 분석 모듈을 만들자.

 

메시지 분석을 하다 보면 많은 사용자들이 오타 메시지를 보낸다는 점을 알 수 있었습니다. 해운대를 해운댜, 서면을 서먄, 날씨를 날싸 널씨 등의 오타 메시지가 많았고, 예측하지 못한 오타들은 작동 오류를 내고 있었습니다. 그래서 사용자들이 보내온 오타 데이터들을 가공하고, 예측되는 오타들과 그 대체어들을 모두 모아서 DB에 입력했습니다. 이 과정을 통해서 오타로 인한 동작 오류를 많이 줄일 수 있었습니다.

 

하지만 오타 메시지를 대체어로 바꾼다고 해도 정확한 서비스 응답에는 한계가 있었습니다. 사용자가 보내온 문장의 의미를 정확하게 파악하기 위해선 문장을 단어 단어로 쪼개는 과정이 필요하다고 생각했습니다. 그래서 형태소 분석응 통해서 사용자의 메시지를 1차적으로 가공을 했습니다.

 

나 지금 서면인데 맛집 좀 알려줘

나  -> 대명사
지금 ->  성분부사/시간부사
서면 -> 명사/지명
인데 -> 긍정지정사/연결어미
맛집 -> 일반명사
좀 -> 성분부사/시간부사
알려줘-> 동사+연결어미+보조용언+연결어미/알리+어+주+어

 

형태소 단위로 쪼개진 단어들을 기능별 의미 분석을 통해서, 사용자의 의미를 파악할 수 있도록 했습니다.

 

지역명인 '서면'을 인식하고 '맛집'이라는 기능과 '알려줘'라는 의도를 파악해서 
이 사용자는 서면 맛집 정보를 원할 확률이 얼마인지를 계산하는 방식으로 의미 분석 모듈을 제작했습니다.

 

위와 같이 오타 메시지를 대체어로 바꾸고, 메시지 의미 분석을 통해서 답변의 정확도를 높이는 방식으로 서비스 오류를 줄일 수 있었습니다.

 

기능의 확장 - 대학생 사용자를 늘리자
사용자들의 불만족을 줄이기 위해서 서비스의 정확도를 높이는 작업을 거쳤지만, 사용자 가입과 사용률은 크게 증가하지 않았습니다. 그래서 기존에 있던 기능에서 좀 더 사용자가 필요로 하는 기능을 추가해보기로 결정하고 사용자를 분석해보았습니다. 분석 결과 90% 이상이 20대 초반의 대학생으로 파악이 되어 대학생들이 필요로 하는 기능 위주로 서비스 확장을 진행하였습니다.

 

부산에 있는 대학교의 학교 식당 메뉴 정보, 도서관 열람실 현황(좌석 정보), 순환버스(셔틀버스) 도착정보, 학사일정 등의 기능을 추가하였고, 이후 사용자들이 증가하기 시작하였고, 1일 메시지 건수가 증가하기 시작하였습니다.

 

신기함에서 불편함으로의 변화
시간이 지나면서 부산모아 서비스를 지속적으로 사용하는 사용자들의 사용 패턴이 변화하기 시작했습니다. 처음엔 해운대 지하철 언제와?라고 메시지를 보내던 사용자가 사용 패턴이 완전한 문장 형태가 아니라, 해운대 지하철, 해운대 등으로 단어 키워드 위주로 바뀌는 점을 찾아내었습니다.

 

처음 사용할 때는 지하철 언제와? 날씨는 어때? 등으로 질문을 하고 답변을 받으면 신기함을 느꼈던 사용자들인데 지속적으로 서비스를 이용하는 사용자 입장에선 완전한 문장 형식으로 메시지를 보내는 것이 새로운 부담감으로 작용하기 시작했습니다.

 

그래서 사용자들의 반복된 메시지 전송이나, 완전한 문장 작성에 대한 부담감을 줄여주기 위해서 버튼을 통한 객관식 답변을 유도하기 시작했습니다. 객관식 답변을 하다보니 서비스 답변의 정확도가 향상되고, 사용자 입장에선 번거로운 타이핑 과정을 피할 수 있어서 만족도가 높은 기능 개선이었습니다.

 

 

나의 즐겨 찾는 키워드
부산모아는 생활정보를 제공하는 챗봇이다 보니, 개인별로 챗봇을 사용하는 방법의 특이점이 나타나기 시작했습니다. 사용자별로 자주 사용하는 기능과 시간대가 다양하였습니다.
자신이 자주 이용하는 지하철역이나, 버스정류장이 각각 달랐고, 매일 똑같은 기능을 재사용하는 특징이 있었습니다.

 

그래서 사용자가 채팅창에 타이핑해서 서비스를 이용하는 번거로움을 줄이기 위해서 사용자가 직접  즐겨 찾는 키워드를 등록할 수 있도록 기능을 개선했습니다. 등록된 즐겨 찾는 키워드를 클릭해서 원하는 정보를 빠르게 받아 볼 수 있도록 하였습니다. 

 

사용자들의 즐겨 찾는 키워드 등록 건수가 계속 증가하는 것을 근거로 본다면, 사용자가 좀 더 쉽게 원하는 정보를 찾을 수 있도록 설계하는 것이 챗봇 서비스 만족도를 높일 수 있는 방법이라고 생각됩니다.

 

 

글을 마치며
한국어 자연어 처리와 의미 분석 기술이 완벽하지 않아서, 영화에 나오는 자비스처럼 모든 사람의 말을 완벽하게 알아듣는 챗봇을 만들기엔 아직까진 기술의 한계가 있다고 생각합니다.

 

지능형 서비스도 중요하지만, 사용자가 원하는 정보를 최대한 짧은 과정을 통해서 정확하게 전달하는 것이 중요하다고 생각되어집니다. 자연어 처리와 버튼식의 객관식 질문(리스트 UI)을 적절하게 융합하여 서비스를 제작하는게 좋을 것 같습니다.

 

 
지금까지 챗봇 서비스를 운영하면서 겪었던 시행착오와 그에 대한 개선 사례들을 적어보았습니다. 
이 글이 앞으로 챗봇 도입을 고려하시는 모든 분들에게 도움이 되는 글이었으면 좋겠습니다. 

 

챗봇 서비스에 대해 문의사항 있으시다면
donghyeok.ahn@gmail.com 으로 메일 보내주시면 성실히 답변해 드리겠습니다.

 

※전문가 칼럼의 내용은 SW중심사회의 편집 방향과 다를 수 있음을 밝힙니다

홈페이지 만족도

콘텐츠 내용에 만족하십니까? 현재 페이지의 만족도를 평가해 주십시요. 의견을 수렴하여 빠른 시일 내에 반영하겠습니다.

등록