ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 대화형 챗봇 (Conversational AI with Transfer Learning)
    Artificial Intelligence 2020. 11. 24. 21:10

    여러분은 다양한 챗봇을 쓰고 있으신가요? 만약 그렇다면 어떤 챗봇을 어떠한 용도로 사용하고 있으신가요?

    생각보다 우리 주변에는 다양한 챗봇이 존재하고 있습니다. 카카오톡에서 제공하는 봇 이외에, 식당, 예약, 콜센터 등 다양한 곳에서 챗봇을 사용하고 있습니다. 하지만, 이런 챗봇을 사용하며 어떤 느낌/정서를 경험하셨나요?

       "너무 단순해.",  "말귀를 전혀 못알아듣잖아!",  "기계적이야"라는 느낌을 받진 않으셨나요?

     

    기능형(특수 목적형) 챗봇은 앞서 여러분들이 느낀 것과 같은 부정적인 사용 경험을 고객에게 주고 있어요.

    이러한 부정적 정서에 반복적으로 노출되게 되면, 사용자들은 챗봇이 유용한 기능을 제공할지라도 금새 싫증을 챗봇 서비스를 지속적으로 사용하지 않는 문제가 생겨요. 이를 극복하기 위해서는 챗봇이 어느 정도 사람다운 특성을 지니고, 사람다운 대화를 할 수 있어야 해요.

    앞서 언급한 기능형 챗봇을 closed-domain chatbot이라고 한다면, 사용자와 자연스러운 대화를 이끌 수 있는 챗봇을 open-domain chatbot이라고 학계/산업계에서는 말해요.

     

    그렇다면, open-domain 챗봇을 어떻게 만들 수 있을까요? 다양한 세계 각지의 대학/기업에서 많은 연구를 하고 있어요.

    우리에게 친숙한 구글, 페이스북 뿐만 아니라, 국내의 유수 기업에서도 open domain 챗봇에 대해 연구/개발을 하고 있어요.

    그 중에서 오늘은 "huggingface"에 소개된 "🦄 How to build a State-of-the-Art Conversational AI with Transfer Learning" 란 포스팅을 살펴보고자 해요.

     

    위에 보이는 데모가 이번에 소개드릴 대화형 챗봇 모델이에요. 성격(personality)에 따라 응답이 맞춤으로 나오는 것을 확인할 수 있어요. 예를 들어, 책을 읽는 것을 좋아하는 성격을 가지는 봇에게 "너 뭐하니?"라고 물으면, "책을 읽고 있어요"라는 응답을 할 가능성이 높아요. 이 성격은 open-domain 챗봇에서는 페르소나(persona)라고 말하기도 해요.

     

    Huggingface는 NIPS 2018에서 개최한 dialog competition에 입상한 모델(이하, ConvAI)을 이번 포스팅에서 소개하고 있어요. 포스팅 내용도 구체적이며, 소스코드도 깔끔하게 리팩토링되어 있어 레퍼런스 자료로 검토하기에 적절해요.

     

    , 그럼 ConvAI는 어떤 특징이 있는지부터 알아볼까요?

     

    하나, 대용량 코퍼스로 사전 학습(pre-trained)한 언어 모델을 활용한 전이 학습(transfer learning) 전략

    여러분도 아시는 것과 같이, 대용량 코퍼스를 구하는 것도 어려우며 이를 활용하여 언어 모델을 사전 학습하는 것은 엄청난 리소스를 필요로 하죠. 그렇기에, huggingface는 기존에 오픈소스로 풀린 OpenAI GPT, GPT-2 pre-trained model을 활용했어요.

     

    둘, 성격(persona)를 가지는 챗봇

    어떤 성향/타입의 사람을 응대하는지에 따라, 챗봇이 맞춤형 성격을 가지고 응답할 수 있다면 더욱 사용자 경험이 향상될 수 있어요.

     

     

     

    ConvAI 모델은 아래와 같은 scheme을 가지고 있어요.

    일반적인 generative model 방식의 챗봇과 동일하게 고객의 input(uttererance)를 받은 후 응답 문장을 생성하는 방식이죠.

    여기서 조금 눈여겨 봐야할 부분은 Knowledge Base(이하, KB)를 사용한 점이에요.

     

    이제는 ConvAI 모델이 어떻게 KB 정보를 학습하는지 그 방법에 대해서 알아보도록 해요.

    (아래 설명은 Transformer와 BERT 모델에 대한 개념을 숙지하고 있다고 가정한 상태로 진행합니다 ^-^)

     

    모델의 목적은 챗봇을 쓰는 사용자에게 특정 persona를 갖는 적절한 대답(reply)을 생성하는 것이에요.

    이 목적을 달성하는 모델을 학습하기 위한 input으로 persona, history, reply라는 각기 다른 세가지 데이터를 활용해요.

    BERT와 동일하게 3가지 임베딩(word, positional, segment)으로 구분하여 그 합을 모델의 input으로 사용합니다. 

     

     

     

    다음으로 ConvAI 모델 학습을 하기 위한 objective function에 대해서 살펴볼까요?

    ConvAI는 multi task loss 구성을 채택하고 있어요. 일반적인 Language model에서 각 단어를 생성할 때 발생하는 loss 이외에 next sentence prediction task를 부가적으로 수행해요. 이렇게 구성한 두 개의 objective function은 다음과 같은 역할을 수행할 수 있어요.

        - 하나, 답변(reply)를 생성하기에 적절한 개별 토큰(단어)을 생성할 수 있도록 함

        - 둘, 대화형 챗봇을 구성하기 위한, (질문-응답) pair에 대한 신뢰성 확보

    이러한 multi-task loss를 구성하기 위해서, ConvAI는 huggingface에서 제공하는 "OpenAIGPTDoubleHeadsModel"을 사용했어요.

    이로써 모델은 서로 다른 두 개의 loss를 반환하여 최적화를 시도해요.

     

    dialog data를 가지고 모델을 fine-tune(train)를 할 때는 reply가 없는 텅빈 상태로부터 시작해요. 즉, 사용자의 첫 발화(e.g. "Hello, how are you?")만 history에 존재하고 Reply는 텅빈 상태로부터 시작합니다. 엄밀히 말하면 완전 빈(empty) 상태는 아니라, <SOS> token만 존재하는 상태이죠. <SOS> token부터 시작해서 생성되는 token을 iterative하게 모델의 reply sequence에 추가하며 다음 단어를 생성해요. 이는 기존의 여러 생성 모델에서의 방식과 동일한 것으로 모델 학습 단계에서는 teacher forcing 등의 개념을 동일하게 사용할 수 있어요.

    (history에는 챗봇 사용자의 utterance부터 시작해서 고객과 챗봇의 대화 기록들이 차곡차곡 누적되는 형태에요)

     

     

     

    끝으로 inference에 대해서 살펴보도록 해요.

    text generation에서는 다양한 decoding methods이 존재해요.

    각 스탭별로 최고의 확률을 가지는 단어를 선택하는 greedy search 방식 이외에, beam search, top-k, top-p sampling 등 다양한 방법이 있어요. 다행이라고 해야할까요? 이런 다양한 decoding methods를 huggigface에서는 자유롭게 사용할 수 있도록 부모 클래스에서 선언되어 있어요. 그렇기에 우리들은 특정 목적을 가지는 "나만의" 커스텀 모델을 해당 부모 클래스를 상속하여 모델링을 한다면 더욱 생산성을 향상 시킬 수 있어요. (decoding methods에 대해서는 별도의 포스팅으로 정리 계획이에요.^-^)

     

     

     

    많은 분들이 대화형 챗봇이라면 이걸 도대체 어떻게 만들 수 있을까 하는 고민을 하실 수 있을 것 같아요.

    하지만, 지금까지 보신 ConvAI는 특별하고 복잡한 모델 아키텍쳐를 사용하지 않고도 상당한 수준까지 generative model 성능을 향상시킬 수 있음을 보여주고 있어요. 이 포스팅을 읽고서 generative conversational model에 대한 막연한 어려움이 있었다면 훌훌 털어버리셨길 바래요. 원본 포스팅과 소스코드는 아래 링크에 있으니 더 깊은 이해를 위해서는 꼭 보시는 것을 추천드려요.

        - medium.com/huggingface/how-to-build-a-state-of-the-art-conversational-ai-with-transfer-learning-2d818ac26313 

Designed by Tistory.