프로그래밍/이것저것_개발일지

Aibril 소프트웨어로 아주 쉽게 챗봇 만들어보기 - T아카데미 세미나

inspirit941 2017. 9. 29. 23:43
반응형

17.09.27 T아카데미 캠퍼스특강 ‘Aibril을 활용한 챗봇 개발’
본 강의의 영상본은 아래 주소에서 확인할 수 있다.
https://tacademy.sktechx.com/live/player/listOnline.action







강연을 해주신 연사님은 SK C&C에서 Aibril Evangelist라는 직함으로 일하시는 류승균 선임이셨다. 

Evangelist의 사전적 정의는 ‘전도사’인데, 

Aibril 생태계와 환경을 조성하기 위해 사람들에게 Aibril이라는 소프트웨어를 알리고 가르치는 역할이라고 한다.






Aibril은 SK에서 개발한, IBM Watson에 기반한 AI플랫폼을 말한다. AI +Brilliant의 줄임말인 Aibril은 IBM 왓슨의 api를 기반으로 지도학습에 강점을 가지고 있다. 개발 단계에서부터 한국어를 학습했기에, 현재까지 한국에 출시된 AI플랫폼 중 가장 한글 지원이 강력한 플랫폼이라고 한다. 한글 기반으로 제공할 수 있는 서비스들 중 강연에서 소개한 몇 가지를 정리하자면,


Watson Conversation: 인공지능 바탕 챗봇 서비스 가능


Watson NLC: 한글 자연어 의미 분류 기능. 문맥에 따른 대화의 의도를 분류해낼 수 있다고 한다. (이를테면 같은 ‘밥 먹으러 가자’의 말도 어느 장소에서 누가 말하느냐에 따라 맥락의 의미가 다른데, 이 의미차이를 파악할 수 있다는 의미라고 함.)

Watson Personality Insight(PI): 최소 200단어 이상, 1600~3000단어 정도의 글을 읽고, 글에서 나타나는 저자의 Big5 성격, 욕구, 중요가치, 소비성향 등을 파악해서 알려준다.

Watson R&R: 특정 산업분야의 전문가가 업무 관련 문서들을 업로드하여 왓슨을 학습시키면, 나중에 업무 문서를 업로드했을 시 카테고리를 자동으로 분류하고 유사한 성격의 자료들을 자동으로 찾아 준다. 문서들의 추천 순위도 조절 가능하다고 한다.

Document Conversion: html이나 pdf와 같이 텍스트 기반의 파일을 처리할 때 쓸모없는 코드나 태그를 제거하고 쓰기 쉬운 텍스트 형태로 파일을 변환하는 기능.

Visual Recognition: 사진들을 특정 카테고리로 분류해 학습시킬 경우, 새로운 사진을 업로드하면 해당 사진이 어느 카테고리와 가장 유사한 특징을 보이는지 알려주는 기능.


PI의 예시로는 문재인 대통령의 트위터를 분석한 결과를 보여줬다. 물론 문재인 대통령을 개인적으로 알지 않는 이상 해당 내용이 전부 일치하는지는 알 수 없다. 다만 PI에서 제공하는 결과값과 심리실험 테스트의 분석결과를 SK 직원 500여명을 대상으로 비교한 결과 95% 이상의 일치도를 보였다고 한다.


자주 쓰이는 단어들, 해당 단어들의 성향을 한 눈에 볼 수 있었다.



https://www.aibril.com/web/main/getMain.do

https://www.aibril.com/web/community/blog/getBlogList.do
Aibril의 공식 사이트에서 더 자세한 정보를 얻을 수 있다. 왓슨 기반의 AI에 관심이 있다면 들어가서 확인해봐도 좋을 것 같다.





Aibril을 활용한 챗봇 제작하기.


T아카데미에서 제시한 챗봇 사전학습 자료들.


챗봇 시장상황과 각 플랫폼별 특징
https://tacademy.sktechx.com/live/player/onlineLectureDetail.action?seq=107
대화형 챗봇 설계의 과제
https://gist.github.com/haje01/7fc9d1b1fc1b6c8c9b7918abf5407a86



cf. 강연에 참여했던 사람들에게는 10월 10일까지 Aibril서비스를 무료로 쓸 수 있는 계정을 지급해 줬었다. Aibril 서비스 자체는 유료다. 아래에 설명할 과정을 따라 실행하는 과정에서 과금이 될 수도 있다.



Aibril 홈페이지에서 계정을 만들고, '내 프로젝트' 로 들어가서 프로젝트를 만든다.



프로젝트 생성을 누르면 새 프로젝트를 만들 수 있다. 만약 프로젝트 생성이 안 보이면 화면에서 Console을 한 번 눌러주자.




오른쪽 상단의 '서비스 신청'을 들어가면




어떤 서비스를 사용할 지 선택할 수 있다. 챗봇은 왼쪽 상단의 '대화'다. 앞에서 말한 Watson 기반 서비스들을 여기서 신청할 수 있다.




챗봇 서비스를 클릭해서 들어가는데 다시 로그인하라고 뜰 수도 있다. 본인의 계정 ID와 비밀번호를 다시 입력해주면 된다.




대화 서비스를 신청한 다음 프로젝트의 Workspace로 들어간다. Create로 새 챗봇을 만들면 된다.




언어는 한국어로 설정.




여기 창까지 왔으면, 준비는 끝이다.






왓슨의 Conversation API를 활용하는 데 필요한 구성요소는 크게 세 개다.
1. Intents
2. Entity
3. Dialog



1. intents: 의도. 


같은 말이라도 어떤 상황과 어떤 공간에서 쓰이는지에 따라 의미가 다르기 마련. 어떤 의도를 나타내기 위한 단어들은 보통 동사이므로, 동사를 의미한다고 이해하면 좀 쉽다.
단어들을 여기에 인식시키면, 이 단어들을 형태소 분석한 후 비슷하게 활용 가능한 Sample words들을 알아서 왓슨이 학습한다. 인간이 생각할 수 있는 변형을 거의 다 커버하기 위해서는 40~50개 정도의 샘플을 학습시키는 것을 권장한다고 한다.




이런 식으로, '아니다' 라는 의미를 인식시키기 위한 유사 단어들을 집어넣는다.




2. Entity: 요소.


특정 단어나 의미를 표현하기 위한 요소들을 말한다. 이를테면 '사과'를 설명하기 위한 특징은 '빨갛다'는 색깔, '동그랗다'는 모양. '달다'는 맛 등의 특징이 있다. 이런 특징들을 설명할 수 있는 단어와 그 유사어들을 학습시키는 작업이 필요하다.


망고, 한라봉, 포도, 배... 등등의 단어를 묶는 범주에 '과일' 이라는 이름을 달았다.





동그랗고, 빨갛고, 달콤한 것, 사과. 이 네 가지 범주를 @사과 라는 이름으로 묶었다.


유의할 점은, Create new에서 설정한 이름(여기서는 @사과)은 말 그대로 구분을 위한 '이름' 일 뿐이라는 것이다.  

아래의 그림을 보면



@사과 의 특징인 동그랗다, 빨갛다, 달다는 특징만을 범주로 담았다. 이 경우 왓슨은 '빨갛다', '동그랗다', '달다' 라는 유형의 단어를 '@사과' 라는 범주 이름으로만 인식할 뿐, 이 단어들이 '사과'의 특징을 의미한다고 인식하지 못한다. 골뱅이 표시(@)는 단지 우리가 보기 편하게 이름을 짓는 것일 뿐, 왓슨이 의미를 이해하는 대상이 아니다. 
그렇기 때문에, '동그랗다' '빨갛다' '달다'는 범주를 가진 대상이 무엇인지를 인식시키려면 범주 안에 '사과'라는 단어도 넣어 주어야 한다.



3. Dialog


Intents와 Entity로 단어의 의미를 분류하고 범주화했으면, 컴퓨터가 순차적으로 챗봇 기능을 이행할 수 있도록 Node를 구성하고 순서를 짜 주는 것을 말한다.



처음 들어오면 'welcome' 이라는 부분이 있다. 챗봇을 시작하면 가장 먼저 시행될 부분이다. 인사를 하거나 특정 행동을 요구하거나 할 수 있다. 실습에서는 '과일 가게 안내'의 컨셉이었다. 스크롤을 내리면 And then [선택 가능한 상황] 이 있는데, Wait for response는 사용자가 채팅을 칠 때까지 기다리는 것, jump to는 다른 Node로 바로 이동하는 것이다.



이해를 돕기 위해 챗봇 try out을 옆에 띄웠다. 화면 왼쪽 상단에 파란색 말풍선 모양을 클릭하면 된다. 

말풍선을 처음 누를 경우 왓슨이 Learning을 하는 중이라는 보라색 표시가 뜨는데, 

그 때는 어떤 명령어를 입력해도 듣지 않는다. 

명령어들을 마구 넣었다가 오류가 날 수도 있다고 하니, 왓슨이 학습을 마칠 때까진 기다려 주자.


우선 과일가게 안내를 받았으니, 어떤 과일을 원하는지 사용자 입력을 받는다. 입력을 받고 나면 다음과 같은 창을 뜨게 만든다. 나는 '사과'라는 단어를 입력했다.



아까 Entity에 @과일 에 해당하는 단어들을 입력해 뒀다. 

만약 입력받은 단어가 @과일 범주 안에 들어가 있지 않으면 아래 '기타' 의 anything_else로 바로 jump to 된다. 

'무슨 말인지 알아듣지 못했어요' 등의 표시와 함께.
지금의 경우 왓슨이 '사과'라는 단어가 Entity @과일 범주 안에 있는 단어 '사과'를 인식했고, 

인식했기 때문에 Respond의 표현을 출력했다.





사용자에게 입력받은 단어(여기서는 '사과')를 그대로 호출하는 json 문법이 있어 소개한다. 

원래 Open Json code를 누르면 나오는 기본 명령어를 아래와 같이 변경하면 된다.

{ "context": { "Entity이름": "<? @Entity이름 ?>" }, "output": { "text": { "values": [ "<? $Entity이름 ?>을(를) 찾으셨군요. 맛이 어떤가요?" ], "selection_policy": "sequential" #참고로, 여기의 sequential의 의미는 values에 있는 표현을 위에서부터 순서대로 출력한다는 의미다. #몇 개의 말을 설정해 놓고, 그 중에 아무거나 랜덤으로 챗봇이 출력하게 하려면 sequential을 random으로 바꾸면 된다. } } }




맛이 어떤지를 요청했고, 맛있다는 취지의 반응을 입력하면 의미를 알아서 인식한다. 지금과 같은 경우 Intents의 #맞다 의 범주에 들어가 있는 단어 중 하나로 인식했고, #맞다 intents를 인식했으니 '다행이네요. 감사합니다'의 반응을 보였다.





And then에서 jump to '환영 인사'로 돌아가게 설정했고, 환영인사 node의 Respond(어떤 과일을 원하는지 묻기)를 바로 실행하도록 설정했기 때문에, 챗봇이 결과를 받은 다음 다시 처음으로 돌아간다.




이번엔 다른 과일인 '배'를 입력해 봤다. @과일 Entity에 '배'가 등록되어 있으므로 챗봇이 '배'가 @과일범주 안에 있음을 인식했고, '맛없어' 라는 단어를 #아니 라는 intents로 인식했기 때문에 '다음에 더 맛있는 과일을 가져오겠다'는 반응을 내놓는다.




꼭 기계처럼 단어만 입력하지 않아도 된다. '사과 먹고 싶어' 라는 문장을 입력했을 때, '사과' 라는 단어에서 @과일:사과 Entity를 인식했고, '먹고 싶어' 에서 #먹다 라는 intents를 인식했다. Intents와 Entity에 충분한 학습량(40여 개의 다른 단어)을 제공할 수 있다면, 챗봇 인공지능이 꽤 정교하게 문장을 인식하는 걸 확인할 수 있다.





개인적으로 챗봇을 만들어 본 것도 처음이고, 인공지능을 활용해 본 것도 처음이었다. 많은 코딩과 알고리즘을 내가 직접 짜거나 모듈을 찾아서 하나하나 설계해야 하는 걸로 생각하고 있었는데, Aibril에서 제공하는 챗봇 프레임워크는 상당히 쉬웠다. 컴퓨터가 어떻게 작업을 인식하고 동작하는지만 어렴풋이 알고 있어도 사용에는 무리가 없는 수준이었다. 게다가 GUI 형태이다 보니 몇 번 클릭하고 챗봇 명령어를 넣으면서 피드백을 받다 보면 어떻게 작동하는지 파악하기 아주 쉬웠다. Watson 인공지능의 정확성이나 편리성도 꽤나 인상적이었다. KoNLP 수준의 형태소 분석보다 훨씬 정교한 매커니즘을 사용하기 때문에 분석 정확도도 상당히 높다.


챗봇 과금 기준이 'workspace에서 챗봇을 열어 대화를 주고받는 건수' 였기 때문에, 만약 개인 아이디로 챗봇을 실행할 경우 순전히 재미로 이것저것 입력해 보다가 이용요금을 청구받을 수도 있다고 한다. 조심하시길. 


반응형