본문 바로가기
대학원 이야기/논문 리뷰

[논문 리뷰] TransferTransfo: A Transfer Learning Approach for Neural Network Based Conversational Agents (NIPS 2019)

by misconstructed 2020. 11. 12.
728x90

Dialogue generation을 통해 사람과 대화는 나누는 Conversational agent에 대한 논문이다.

Transformer와 전이 학습(Transfer learning)을 통해서 모델을 구성한다.

원본 논문의 원본은 여기에서 볼 수 있고, Transformer에 대한 글은 여기에서 볼 수 있다.

Huggingface에서 제공하는 TransferTransfo의 코드는 여기 GitHub에서 확인할 수 있다. 


Non-goal-oriented dialogue system(chatbots, open domain dialogue generation)은 다양한 NLP system에서 사용될 수 있는 시스템이다. 최근에 많은 데이터셋의 사용이 가능해지면서 다양한 conversational model에 대한 시도가 있었지만, 직접 사람과 대화하는 경우 그렇게 만족스럽지 못한 결과를 제공한다는 한계가 있었다. 이러한 대화 모델을 통해서 생성된 답변들을 사람이 부족하다고 느끼는 가장 큰 이유는 다음과 같다.

  1. 대화하는 상대(대화 모델)의 personality가 일정하지 않다. (예를들어, "너의 직업이 뭐야?"라고 물어봤을 때, 처음에는 "나는 의사야"라고 대답했다가, 나중에는 "나는 선생님이야"라고 대답하는 경우 등이 있다. )
  2. 과거 대화에 대한 기억이 짧다. 대화가 길어질수록, 과거에 했던 대화에 대한 내용을 유지하지 못한다.
  3. 너무 일반적인 대답을 제공한다. (예를들어, I dont know.)

이번 논문에서는 다음과 같이 3부분에 있어서 기존의 seq2seq 모델의 성능을 끌어올린 TransferTransfo 라는 모델을 제안한다.

  1. 응답과 대화 문맥의 관련성
  2. 사전에 정의된 personality와 이전 대화 내용에 대한 일관성
  3. 문법적으로 올바르고, 유창한 대화 제공

[표-1]

TransferTransfo는 PERSONA-CHAT dataset을 통해서 학습한다. PERSONA-CHAT dataset은 두 사람이 서로에 대해서 알아가는 대화를 기록한 데이터셋인데, 조금 특별한 점은 대화에 참여하는 두 사람에 대한 profile이 몇 개의 문장으로 정의된다는 것이다. [표-1]을 보면, Persona 1, Persona 2 에 대한 profile이 각각 5개의 문장으로 정의되어 있고, 두 사람은 해당 Profile을 기반으로 서로 알아가기 위한 대화를 진행한다.

Automatic evaluation 방식은 크게 3가지를 사용했다.

  1. language modeling : perplexity(PPL)
  2. next utterance retrieval task : 19개의 임의로 골라진 대답 중에서 다음으로 오는 정답 대답을 골라내는 task (Hits@1)
  3. generation task : 실제 정답과 예측된(생성된) 정답 사이의 F1 score (F1)

위의 3가지 방식 외에도 사람이 직접 평가하는 human evaluation 도 반영했는데, human evaluation에서는 fluency, consistency, engagingness를 기준으로 평가했다.

# 모델 구조

TransferTransfo는 12-layer decoder-only transformer를 사용했다. 추가적으로, self-attention을 수행할 때, 현재 입력의 왼쪽으로만 (미래의 결과에 대해서는 attention을 수행하지 못하도록) attention을 적용할 수 있도록 masked self-attention을 수행한다. 전체적인 구조는 기본적인 Transformer(github.com/huggingface/pytorch-openai-transformer-lm)의 decoder와 동일한 구조를 갖는다. 입력으로 사용되는 토큰은 bytepair encoding(BPE)를 사용했다. 

# 학습 과정

Pre-training : GPT와 동일하게 BooksCorpus dataset을 사용했다. ELMo의 학습 과정에서 사용된 Billion Word Benchmark의 경우, 다양한 문장들이 섞여서 구성된 데이터셋이기 때문에, long-range information에 대한 학습을 하기에 적합하지 않다고 판단했다. 반면에, BooksCorpus datatset은 document-level corpus이기 때문에 (문장 단위로 섞인 데이터가 아닌) long-range information을 학습하기 적합하다.

Fine-tuning : Fine-tuning은 PERSONA-CHAT dataset 으로 진행한다. Pre-training 과정에서는 단일 화자가 혼자 말하는 데이터인 반면, PERSONA-CHAT dataset은 두 사람이 대화하는 데이터이고, 두 사람의 profile을 명시하는 문장들도 함께 제공하기 때문에, 입력 방식에 있어서 변화를 주어야 한다. 입력은 단순하게 profile 문장들을 모두 연결하고 이후에 모든 대화 내용을 연결하는 방식으로 제공한다. 하지만, 이렇게 연결만 하는 방식으로는 어떤 문장까지가 profile이고, 대화 과정에서 어떤 문장을 어떤 화자가 한 것인가에 대한 정보가 없기 때문에 dialogue state embedding을 새로 추가한다. Dialogue state embedding은 현재 입력으로 제공되는 토큰이 profile 문장인지, 첫 번째 화자(PERSON1)의 문장인지, 두 번째 화자(PERSON2)의 문장인지를 구분해서 표시한다. 최종적으로 생성된 token embedding은 word embedding + dialogue state embedding + positional embedding 을 모두 더한 값으로 생성된다. 추가적으로, personality(profile) sentence의 순서가 결과에 영향을 주기 않도록 하기 위해서 모든 personality sentence에 동일한 positional embedding을 부여한다. 

32개의 sequence를 하나의 batch 로 지정하고 총 200,000 step 동안 학습을 진행했다. (대략 2 epoch 정도) Adam을 사용했고, learning rate는 6.25e-5 로 시작해서 0으로 수렴하도록 지정했다. 모든 층에 0.1의 dropout을 적용했고 relu를 사용했다. K80 GPU에서 10시간 동안 학습을 진행했다. 

[그림-1]

Multitask learning : 두 개의 손실 함수로 학습을 진행한다. 첫 번째는 next utterance classifiaction loss 이다. [그림-2]와 같이 정상적인 다음 utterence를 마지막에 append한 입력과, 잘못된 utterence(빨간색으로 표시된 글자)를 append한 입력 (2 ~ 6개) 중에서 정상적인 입력을 (장상적인 다음 utterance) 찾아내는 classification task이다. 제일 마지막에 classification을 위한 [CLS] 토큰(파랑 박스)을 사용해서 softmax layer를 통해 결과를 예측한다. 두 번째로는 language modeling loss 이다. Language modeling loss는 기본적인 cross-entropy loss로서 마지막 hidden state가 softmax를 통해 다음 생성될 단어를 예측한다. Negative log-likelihood loss를 사용한다.

[그림-2]

Decoding : Beam size가 4인 beam search 를 진행했다. 추가적으로 n-gram filtering을 수행해서 personality sentence나 과거 utterance를 그대로 가져와서 사용하지 않도록 했다. 최종 문장은 length-normalized utterance probability와 next-utterance classification score의 조합으로 점수를 매겼다. Next-utterance classification score의 비중을 크게 잡을수록, personality 를 더 적극 반영하는 반면에, 대화의 diversity (다양성) 는 감소하게 된다. 

[표-2]

TransferTransfo의 성능은 [표-2]와 같다. 위에서 언급한 automatic evaluation 을 이용해서 평가를 진행했다. PPL은 낮을수록, Hits@1과 F1은 높을수록 성능이 좋다. 


# 참고 논문

  1. A Neural Conversational Model : seq2seq을 이용한 dialogue generation (리뷰)
  2. Neural Net Models for OpenDomain Discourse Coherence. : 대화 모델의 일정하지 않은 personality에 대해서 다룬다. (리뷰)
  3. Improving Language Understanding by Generative Pre-Training. : GPT (리뷰)
  4. Attention Is All You Need. : Transformer (리뷰)
  5. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. : BERT (리뷰)
  6. Neural Machine Translation of Rare Words with Subword Units. : Byte-Pair encoding(BPE) (리뷰)
  7. Deep contextualized word representations. : ELMo (리뷰)
  8. How NOT To Evaluate Your Dialogue System: An Empirical Study of Unsupervised Evaluation Metrics for Dialogue Response Generation. : Dialogue Generation의 적합하지 않은 기존의 평가 방법 (리뷰)
  9. Personalizing Dialogue Agents: I have a dog, do you have pets too? : personalized dialogue agent + PERSONA-CHAT dataset (리뷰)

 

728x90

댓글