brunch

You can make anything
by writing

C.S.Lewis

by UX 컨설턴트 전민수 Nov 25. 2016

챗봇은 어떻게 만들까?

UX 디자인 배우기 #79

Today UX 아티클


Medium Chatbots Magazine에 게재된 Aerolab의 글 How to build a ChatbotPart1을 원저자의 허락을 받아 번역한 글입니다. 


저희는 완전히 자연 언어 처리(NLP, Natural Language Processing)를 기반으로 하는 챗봇을 만드는 방법에 대한 초보자 가이드를 만들기로 했습니다.


마침내 AI가 진정 주류가 되기 시작했으며 2017년도는 새로운 기술과 플랫폼으로 가득해질 것으로 예상됩니다. 지난 한 해 동안 Open AI(이미 상당히 흥미로운 페이퍼들을 내놓고 있죠) 이 문을 열고, 스타트업 등 AI를 다루는 많은 신생 회사들이 등장했으며, 무인 자동차와 전지전능한 챗봇의 등장을 걱정하는 엄청난 두려움, 불확신, 의문 등도 보입니다. 


이전에 수많은 기술이 대중화되던 때와 마찬가지로, 과대광고에 몰입해서 잘못된 믿음으로 무장해버리는 사람들은 언제나 존재합니다. AI가 어떻게 인간을 쓸모없게 만드는지에 대한 이야기가 돌고, 공중을 떠다니는 거대한 머리들이 우리가 가진 것을 내놓으라고 하게 될 시대가 코앞으로 다가왔다고 말하기도 합니다. 



하지만 현실은 이와 다소 다릅니다. 물론 정말 인상적인 기술과 플랫폼을 이 우주에서 목격하기도 합니다. 하지만 AI는 (상대적으로) 젊은 분야임을 기억하는 것이 중요합니다. 생후 1일 된 자바스크립트 라이브러리가 실제로 가능하지 않은 일을 할 것이라고 기대하기 쉽겠지만, 사실은 그저 형편없는 제품을 만들게 할 뿐입니다. 


이런 이야기는, 당연하게도, 챗봇이라는 주제로 넘어가게 해줍니다. Slack, Facebook, Telegram 뿐만 아니라 비밀 NLP(자연 언어 처리) 소스를 다루는 Wit.ai and Api.ai 등과 같은 회사에서 각자 플랫폼을 오픈한 덕분에 챗봇은 점점 더 유명해지고 있습니다.


저희 Aerolab의 경험


저희 Aerolab에서는 언제나 새로운 것을 탐구하고 기술이 어떻게 사용자 경험에 영향을 미치는지 알아내려고 노력하고 있습니다. 그래서 저희는 챗봇과 관련한 이런 새로운 패러다임을 활용할 수 있는 방법, 즉 대화식 UI(Conversational UI)를 이해하고 싶었습니다.


저희는 언제나 새로운 제품을 디자인할 때면, 유저와 유저의 멘탈 모델 그리고 유저가 세상을 생각하고 해석하는 방식을 이해하려고 노력합니다. 그다음에 이 지식을 활용해서 인터페이스를 만드는데 만일 제대로 일을 했다면 유저는 저희 앱을 사용하기 쉽다고 생각하게 될 것입니다. 


이는 과학보단 예술에 가깝지만, 중요한 것은 지난 30년간 우리가 UI에 대한 전면적 통제를 가지는데 익숙해져 버렸다는 점입니다.  전통적인 앱에서는 어떤 버튼이 제품에 들어가고 그 버튼이 무슨 일을 할지 정확히 알 수 있었습니다. 의도적으로 그 자리에 그 버튼을 넣었기 때문입니다. 개발적 측면에서 봤을 때 예측 불가능성은 거의 없었으며, 발생할 수 있는 최악의 상황이라고 해봤자 유저가 기능 중 하나의 이용 방법을 이해하지 못할 수 있다는 것 정도였습니다. 


대화식 UI는 이러한 생각을 완전히 뒤집어엎습니다. 우리는 이제 언어를 작업해야 하는데, 이는 예측 불가능할 뿐만 아니라 컴퓨터가 이해하기 매우 어렵습니다. 심지어 최신 AI를 사용해도 마찬가지입니다. 

이 모든 것들은 우리가 익숙한 것보다 훨씬 적은 통제권과 오류의 여지를 주는데, 이는 곧 디자인 프로세스의 아주 초반부터 이러한 제약을 가지고 작업을 해야 한다는 뜻입니다. 

이런 새로운 패러다임을 대상으로 일을 하는 데는 매우 특수한 도전 과제들이 있습니다. 그래서 수많은 테스트와 실험을 한 후, 저희는 온전히 자연 언어 처리(NLP)를 기반으로 하는 제품을 디자인하고 만드는 방법에 대한 초보자 가이드를 드리기 위해 시리즈로 글을 쓰기로 결정했습니다. 이 가이드가 우리의 삶에 보다 긴밀하게 통합된 사용자 경험으로 향하는 길을 깔아줄 것이라고 믿습니다.  



이야기를 담아 디자인하기


대화식 UI는 글이나 말로 하는 언어를 이용해 컴퓨터와 우선적으로 상호작용하는 방식입니다. 대화식 UI의 전형적인 사례는 Siri, Google Now, Cortana 등으로, 목소리를 이용해 간단한 것을 폰에게 요청할 수 있게 해주는 플랫폼들입니다. Messenger, Telegram, Slack, 그 외 다른 플랫폼에도 이와 비슷한 태스크를 수행하는 수많은 챗봇이 있습니다. 일단은 텍스트 기반 챗봇을 집중적으로 살펴보겠습니다. 가장 인기 있으면서도 새로운 개발자들이 접근할 수 있기 때문입니다. 


대화의 문제는 굉장히 예측 불가능하다는 점입니다. 앱을 만들어본 경험이 있으시다면, 예측 불가능성은 개발자와 디자이너들의 철천지원수라는 점을 알고 계실 겁니다. 때문에 우리가 여기서 가장 먼저 해야 할 일은 대화를 우리가 작업을 할 수 있는 더 작은, 한 입 크기의 조각으로 쪼개는 것입니다. 이렇게 하면 대화식 UI 뒤에 숨은 메인 디자인 콘셉트, 즉 대화식 스토리로 다가가게 됩니다. 


스토리는 대화 디자인의 와이어프레임입니다. 스토리는 유저와 기본적으로 나누는 대화의 작은 조각으로, 여기서 우리는 적절한 대답을 제공할 수 있도록 유저가 의도하는 바를 이해하려고 노력합니다. Wit.ai를 만들면서 이런 개념을 알게 되었으며, 이는 어느 정도 시각적인 방식으로 대화에 대해 생각해 볼 수 있는 멋진 방법이라고 확신합니다.  


이 뒤에 깔린 생각은 실제로 유저와 나누는 대화 전체의 스크립트를 쓸 수도 없고 그 어떤 변형도 불가능하다는 것입니다 (데모를 면밀하게 시연해 보고 제품에 믿기 어려울 정도로 대단한 기술을 쓰지 않는 이상 말입니다). 하지만, 우리가 할 수 있는 (그리고 해야 하는) 것은 길고 복잡한 대화를 여러 가지 작은 대화로 쪼개는 것입니다. 예를 들면 만나서 나누는 인사, 간단한 질문에 대한 답, 작별인사, 그리고 그 외 아주 주의 깊게 디자인하고 수정할 수 있는 작은 대화 단위 등으로 쪼개는 겁니다. 


이러한 내장형 스토리를 많이 추가하면, 챗봇이 긴 대화를 한 번에 조금씩 다룰 수 있도록 도와줄 수 있으며, 이를 제대로만 한다면 빈틈없이 잘 디자인된 제품을 만들 수 있게 될 것입니다. 긴 대화라고 할지라도 말입니다. 


이는 새로운 개념으로, 몇 가지 사례로 시작하는 것이 더 나을 것입니다. 다음은 간단한 대화입니다.


유저: 안녕하세요!

챗봇: 안녕하세요! 무엇을 도와드릴까요?


발생할 수 있는 최악의 일은 아래와 같이 타이핑하는 것으로 시작하는 것입니다.


if(userSays === ‘안녕하세요!’ ) { send(‘안녕하세요! 무엇을 도와드릴까요?’); }


이렇게 하는 것이 끔찍한 이유는 언어는 매우 잘 변하는 속성을 지니고 있어서모든 것은 겉으로 보기에는 다른 무한 가지 방식으로 말할 수 있다는 뜻입니다. 텍스트를 대조함으로 대화를 간단하게 처리하려고 하는 것은 아무리 좋게 봐도 굉장히 순진한 행동입니다. 


하지만, 이를 다룰 수 있는 방법이 분명 있습니다. 자연 언어 처리(NLP)를 이용하면 AI에게 유저가 말하는 의도가 무엇인지 파악하라고 요청할 수 있습니다. 


우리가 던져야 할 질문은 “유저가 무엇을 입력했는가?”가 아니라, “무슨 말을 하려고 한 것인가?”입니다. 앞에서 언급한 사례로 돌아가 보면, 유저의 메시지가 가지는 의미를 약간 더 깊이 있게 살펴보고 그 의도를 ‘첫인사’라고 분류할 수 있게 됩니다.  


유저: 안녕하세요! [의도:첫인사]

챗봇: 안녕하세요! 무엇을 도와드릴까요? [첫인사에 대한 대답]


스토리는 <<유저가 안녕하세요라고 말했다>>가 아닌 <<유저가 첫인사를 했다>>를 중심으로 구성되는 것입니다. 왜냐하면 누군가에게 첫인사를 던지는 방법은 아주 다양하지만(“안녕!”, “저기요” 등) 이 모든 문장은 첫인사라는 정확히 같은 의미를 담고 있기 때문입니다. 


그러면, 예를 들어, 우리는 같은 대화식 스토리를 매우 다른 메시지에도 적용할 수 있게 됩니다.


유저: 알로하! [의도: 첫인사]

챗봇: 안녕하세요! 무엇을 도와드릴까요? [첫인사에 대한 대답] 


그래도 여전히 첫인사를 받는 것이기 때문에, 유저가 안녕하세요, 안녕, 저기요, 혹은 다른 텍스트를 말해도 안전하게 동일한 대답을 줄 수 있습니다. 빈틈없는 NLP 엔진을 활용함으로, 우리는 “안녕하세요”를 말하는 이 모든 방법이 정확히 같은 방식으로 다룰 수 있으며, 이는 챗봇을 훨씬 똑똑하고 유연하게 만들어줍니다. 심지어 예측 불가능한 인풋을 만나더라도 말입니다. 


의도의 관점에서 생각해보는 것은 문제를 쉽게 만들어 주는 멋진 방법입니다. 단순히 문자열을 대조해보는 대신, 무작위로 복잡한 문자열을 받아 AI에 집어넣으면 AI가 알아서 메시지를 분류하여 주고, 유저의 주된 의도부터 시작해서 날짜와 위치까지 텍스트에서 필요한 정보를 전부 뽑아줄 것입니다. 



다양한 말투 다루기


하지만 보다 창의적인 프롬프트를 시도해 본다면 어떨까요?


유저: 프랑스 여왕으로부터 안부 인사를 드리러 왔습니다.

챗봇: 안녕하세요! 무엇을 도와드릴까요?


프랑스에 여왕이 있는지 잘 모르겠지만 (Gabrielle Gatti에 따르면 프랑스인들은 왕족 관련된 것에 전혀 관심이 없다고 합니다), 이 경우에 챗봇의 응답이 유저가 사용하는 말도 안 되게 격식을 차린 말투와는 맞지 않았습니다. 보통은 그냥 첫인사로 분류하고 그렇게 처리할 수 있지만, 필요에 따라 말투를 바꾸고 싶다면, 일반적인 첫인사와는 다른 방식으로 이런 인사를 처리할 수도 있습니다. 


즉, 새로운 이야기를 만들어야 하며 이런 인사는 ‘격식을 차린 인사’라는 다른 종류의 인사라고 분류해야 한다는 뜻입니다. 이렇게 하면 둘을 구분할 수 있으며 제대로 응답할 수 있게 됩니다.


유저: 프랑스 여왕으로부터 안부 인사를 드리러 왔습니다. [의도: 격식을 차린 인사]

챗봇: 도움을 드리고 싶다는 뜻을 표합니다, 나리. [격식을 차린 인사에 대한 대답]


의도의 관점에서 우리가 받는 메시지에 대해 생각하는 것과 견고한 NLP 엔진을 사용하는 것은 챗봇의 완성을 훨씬 쉽게 만들어줍니다. 스토리는 강력한 디자인 툴이며, 대화를 작은 구성요소로 쪼갤 수 있게 도와주는데, 이렇게 하는 것이 코딩하고, 이해하고, 테스트하기 더 쉽습니다. 


챗봇 생태계는 상당히 새롭긴 하지만, 지난 몇 년간 등장한 디자인 패러다임 중 가장 유망하기도 합니다. 그리고 Wit.ai와 Api.ai 그리고 다른 NLP 플랫폼 덕분에 완전히 새로운 카테고리의 제품을 만들기 시작할 수 있게 되었으며, 이는 저희 제품에 대해 생각하는 완전히 다른 방식을 제공해줍니다. 


 다음 글에서는 머신 러닝, 프로토타이핑, 제품 디자이너로서 우리가 사용할 수 있는 멋진 새로운 툴 등을 더 깊이 살펴보면서 새로운 요소들에 집중할 것입니다. 


계속 관심 가져주세요!




전민수 UX 컨설턴트 소개

https://brunch.co.kr/@ebprux/1332


[실시간 Live 강좌] (PM/PO/UI/UX) 수강생 모집 중 

(이비피알유엑스 라이브클래스에서 매월 Live 최소 1개에서 최대 4개 UX 강좌 (온라인) 줌 Live 강좌 진행하고 있습니다)

https://ebprux.liveklass.com/


[VOD 강좌] (PM/PO/UI/UX) 수강생 모집 중  

(인프런에서 총 20개 UX 강좌: 인터넷/VOD 오픈했습니다)

https://www.inflearn.com/users/196290

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari