brunch

You can make anything
by writing

C.S.Lewis

by 박성준 Feb 08. 2018

비목적성 대화형 AI 에이전트의 개발 -1-

딥러닝 기반 챗봇을 만들어보자!

인간 수준의 대화가 가능한 대화형 AI 에이전트를 만들기 위해서, 다양한 분야의 사람들은 많은 노력을 기울이고 있습니다. 일명 챗봇이라고 불리는 대화형 시스템이 가진 가능성은 무궁무진하기 때문입니다. 예를 들면, 사람들의 질문에 대한 답을 효과적으로 제공할 수 있는 Q&A시스템이나, 음성 인식 기반의 AI 비서 서비스와 같은 많은 AI 기반 어플리케이션들이 사용자와 편리한 상호작용 및 자동화를 위해 이러한 기능을 만들고 있습니다. 챗봇은 오래 전부터 다양한 방법을 이용해 개발되어 왔으며, 이번 포스팅에서는 그 중에서도 순환형 인공신경망 모형(RNN)을 이용한 기계학습 기반 챗봇의 동작 원리에 대해 살펴보려고 합니다. 



대화 모델링: 입력에 대한 적절한 응답 찾기


2014년에 들어서면서, 기계번역 분야에서는 Sequence-to-Sequence 모델이 널리 사용되기 시작했습니다. 이 방식은 아래의 그림과 같습니다.


출처: https://www.tensorflow.org/tutorials/seq2seq


먼저, 파란색 박스로 표시된 인코더(Encoder)는 내가 입력한 문장(I am a student)을 읽어들이는 역할을 합니다. 인코더는 일반적으로 순환형 인공신경망(Recurrent Neural Network)로 구성되며, 이 신경망은 입력 문장의 각 단어를 순차적으로 읽어들여서 문장의 정보를 기억합니다. 문장의 정보는 그림 중간에 표시된 벡터의 형태로 저장되며, 문장의 입력이 끝나면 이제 디코더(decoder)가 번역된 문장을 산출하기 시작합니다. 인코더와 마찬가지로, 디코더는 인코더가 저장한 정보를 바탕으로 번역된 문장의 각 단어를 순차적으로 산출합니다. 


이처럼 큰 틀에서 보았을 때, 이 방법은 입력 시계열 자료(sequence)를 출력 시계열 자료(sequence)로 매핑(mapping)하기 때문에 "Sequence-to-Sequence" 모델이라고 부르게 되었습니다. 이 방식의 장점 중 하나는 내가 이 모델의 세부적인 구조를 매우 유연하게 바꿀 수 있다는 점입니다. 즉, 인코더와 디코더를 실제로 구현할 때, 풀고자 하는 문제에 적합하게 다양한 요소가 고려될 수 있다는 것입니다. 인코더는 어떤 순차적 입력에 대한 정보를 기억하기만 하면 될뿐, 구체적으로 그것을 어떻게, 어떤 구조로 기억하게 만들 것인가는 자유롭게 선택할 수 있습니다. 디코더 또한 마찬가지입니다. 내가 원하는 정보를 어떻게 산출하게 만들 것인가도 내가 가진 데이터를 기반으로 자유롭게 구성하면 됩니다.


이렇게, 인코더의 정보를 바탕으로 원하는 시계열 자료(sequence)를 생성하는 구조는 기계번역뿐만 아니라 다양한 자연어처리 과제에 적용될 수 있었기 때문에, 이를 대화 모델링(conversation modeling)에 적용해보고자 하는 움직임이 생겨나기 시작했습니다. 물론, 인간의 대화를 기계번역처럼 "적절한 입력"에 대한 "적절한 응답"을 생성하는 것이라고 바라본다면 말이죠. 


사실, 사용자가 입력한 대화에 대해 적절한 답을 찾는 것은 매우 어렵고 다양한 가능성을 탐색해야 하는 일이었기 때문에, 기존의 대화 모델링은 주로 특정한 영역 내에서 특수한 목적달성을 위해 시도되어 왔습니다. 우선 사용자가 어떤 말을 입력할지 예측하는 것은 매우 어려울 뿐만 아니라, 그에 대한 만족할 만한 대답이 어떤 것인지 정의하는 것 또한 어려웠기 때문에, 지금까지는 복잡한 전처리과정이 요구되는 것이 일반적이었습니다.


그런데 대화 모델링을 위해 Sequence-to-Sequence 모델을 적용하면 복잡한 전처리 과정을 생략할 수 있다(end-to-end learning)는 장점이 있습니다. 뿐만 아니라, 모델의 유연성과 단순함 덕분에, 좀 더 복잡한 응답이 요구되는 상황에 따라서 맞춤형 모델을 구성할 수 있다는 것입니다. 실제로, 연구자들은이 모형을 IT 헬프데스크 데이터셋과 영화 자막 데이터셋으로 학습시켜서, 사람과의 대화 내용을 시범을 보인 바 있습니다 [1].



맥락을 기억해보자


Sequence-to-Sequence 모델을 이용해 사용자의 입력에 대해 적절한 응답을 찾을 수 있다는 것을 보였지만, 이 모형의 한 가지 단점은 사용자가 입력했던 이전의 대화 내용을 기억할 수 없다는 점입니다. 사람들은 상대방과 대화를 할 때 과거의 이야기했던 내용을 기억하면서 대화를 풀어 나가는데, 간단한 Sequence-to-Sequence 모델은 이를 반영할 방법이 없었습니다. 그래서 이런 가정을 추가한 새로운 방법이 아래 그림에 있습니다. 이 모형은 HRED (Hierarchical Recurrent Encoder-Decoder)라고 불립니다 [2].


Building End-To-End Dialogue SystemsUsing Generative Hierarchical Neural Network Models (AAAI 2016)


위 모델은 비목적성 대화 시스템 개발을 위한 모델로써, 사용자의 이전입력과 과거 대화 내용을 기억하면서 현재 입력에 대한 응답을 산출하는 모델입니다. 구체적으로 모델은총 3가지 구성요소로 이루어져 있습니다.


인코더 순환형 신경망(encoder RNN): 사용자가 현재 입력한 내용을 처리하는 부분입니다. 사용자의 입력을 단어 단위로 쪼개어, 순차적으로 이를 받아들인 다음 사용자가 어떤 말을 했는지 내용을 기억합니다. 


디코더 순환형 신경망(decoder RNN): 맥락 RNN이 기억한 정보를 바탕으로 사용자의 입력에 적절한 응답을 생성합니다. 이는 단어 단위로 순차적으로 이루어집니다.


맥락 순환형 신경망(context RNN): 사용자의 과거 대화를 기억하는 역할을 합니다. 인코더 순환형 신경망이 처리한 현재까지 사용자 입력의 내용을, 대화가 진행되는 동안 계속해서 기억하고 있습니다. 그래서 대화 맥락을 기억하고 있다는 의미에서 ‘맥락(context)’ RNN이라 부릅니다. 이는 사용자의 과거 입력 정보를 기억하고 있다가, 이번 시점에서 사용자가 입력한 내용을 더하여 디코더 순환형 신경망으로 넘겨줍니다.


이 모형을 영화 자막 데이터셋을 이용해 학습한 결과, 예상했던 것과같이 기존 방법들보다 더 나은 성능을 보이는 것으로 나타났습니다. 다만, 이 모형을 만든 연구자들은, 이 모델이 잘 동작하려면 다양한 추가 작업이 더해져야한다는 것 또한 실험결과로 보였습니다. 예를 들면, 모델을 다른 대화 데이터셋에서 미리 학습하거나(pre-training), 대화 속에 나타난 각 어휘에 대해 이미 학습된 어휘 임베딩을 적용하는 것이 그것입니다.



다채로운 대화를 만들어보자


그럼에도 불구하고, 위 모형은(HRED) 여전히 한계점을 갖고 있었습니다. 모형의 학습은 주어진 대화를 보고 다음에 어떤 말이 나올지예측하는 ‘정답 찾기’와 같은 방식으로 이루어졌기 때문에, 모델이 산출한 대화는 ‘사람이 보기에 그럴듯함’과는 다소 거리가 있는 경우들이 있었습니다. 예를 들어, 자주 나타나지 않았던 대화 패턴에 대해서 ‘잘 모르겠어(I don’t know)’라고 대답하는 것은 매우 일반적인(generic) 응답이기 때문에, 모형의 입장에서는 ‘안전한’ 응답이지만, 사람이 보기에 그럴듯한 응답을 만들어낸 것은 아닙니다. "나는 잘 모르겠다"는 말을 지나치게 자주 사용하는 챗봇은 아무리 비목적성 AI라고 할지라도, 사람들이 이 봇과 대화하는 것에 흥미를 쉽게 잃어버릴 것입니다.


그렇기 때문에, 이러한 문제점을 극복하려면 동일한 입력이 주어지더라도 좀 더 다채로운 답변을 만들어내는 방법이 필요했습니다. 그 방법은, 위에서 살펴봤던 모형에 확률적 잠재변수를 추가하는 것입니다 [3]. 이러한 변수를 인공신경망 모형에 추가하여 학습하는 방법은 Variational Autoencoder (VAE)의 방식을 따르고 있습니다.

A Hierarchical Latent Variable Encoder-DecoderModel for Generating Dialogues (AAAI 2017)


모형은 앞서 살펴보았던 것과 동일하며, 다만 유일하게 달라진 점은 무선잠재변수“z”가 디코더에 영향을 준다는 것입니다. 즉, 사용자의 입력을 바탕으로 모형이 적절한 응답을 생성할 때, 무선변수(random variable)이 영향을 함께 주기 때문에 디코더가 좀 더 다양한 답변을 생성할 여지가 생긴 것입니다. 이 모형 역시 영화 자막 데이터셋에 대해서 학습되었고, 연구자들은이 모형이 생성해낸 응답의 질을 사람들이 직접 평가하도록 했습니다. 그 결과, 이 모형이 만들어낸 응답은 기존 모형들이 만들어낸 응답보다 더 많이 사람들에게 적절한 응답으로 선택되었습니다.



사용자가 기계와 사람을 구분할 수 없을 때까지


비목적성 챗봇이 도달해야할 최종적인 목표는 인간 수준의 대화 능력을 갖추는 것입니다. 사용자가 어떤 질문을 해도 맥락에 적절한 응답을 하고, 사용자와의 대화가 끊기지 않도록 잘 이어나갈 수 있다면 성공적으로 기능하는 챗봇을 구현했다고 할 수 있을 것입니다.


그리고 이러한 챗봇 시스템이 텍스트 기반 온라인 상담 서비스에 갖는 의미 또한 상당합니다. 이러한 모델을 활용하여 챗봇을 만다는 것 뿐만 아니라, 내담자의 대화에서 중요한 정보를 추출하여 상담자가 좀 더 나은 상담 서비스를 제공할 수 있도록 도울 수 있고, 내담자의 기존 대화에서 나타난 패턴을 분석하여 정신건강에 도움을 줄 수 있는 다양한 컨텐츠를 제공하는 기반이 될 수 있을 것으로 기대하기 때문입니다.



※ 이 글은 https://brunch.co.kr/@trost/ 에서 동시에 연재되고 있습니다. 많은 구독 바랍니다 :)



[참고문헌]


[1] A Neural Conversational Model, ICML 2015 Workshop.


[2] Serban, Iulian Vlad, et al. "Building End-To-End Dialogue Systems Using Generative Hierarchical Neural Network Models." AAAI. Vol. 16. 2016.


[3] Serban, Iulian Vlad, et al. "A Hierarchical Latent Variable Encoder-Decoder Model for Generating Dialogues." AAAI. 2017.

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