본문 바로가기

자연어처리 (NLP)

[NLG] [자연어 생성] [논문 리뷰] Multi-turn Dialogue Response Generation in an Adversarial Learning Framework

arXiv: June 26, 2019 논문 링크

저자: Oluwatobi Olabiyi, Alan Salimov, Anish Khazane, Erik T. Mueller


Abstract:

  • 논문의 contribution은 hredGAN 프레임워크를 통한 multi-turn (멀티턴) 대화 생성입니다.
  • GAN의 generator를 Hierarchical Recurrent Encoder-Decoder 네트워크에서 Local attention을 추가한 모델입니다.
  • Discriminator는 word-level (단어 레벨) bi-directional RNN을 사용합니다.
  • 실험 결과
    • log-likelihood로 optimize 된 모델보다 일반화가 (generalization) 잘되는것을 주장합니다.
    • 제한된 학습 데이터로 학습해도 길고, 일관성 있는 다양한 답변을 생성할 수 있다.

Introduction:

  • 현재 존재하는 대화형 시스템에서의 답변 생성 모델들은 기존 context를 이용하지 못하는 문제와 답변의 다양성 부족 문제가 존재한다.
    • 그러므로 대부분의 답변들이 재미없거나 틀리지 않는 답변으로만 출력하게 되어있다.
  • 기존 대화의 context를 적용하기 위해 Serban et al. (2016) & Xing et al (2017) 논문에서 HRED를 공개했다.
    • Context는 반영했지만 단어들의 diversity가 부족한 문제는 여전했다.
  • 이러한 문제를 해결하기 위해 End-to-End HredGAN을 제안하는 논문입니다.

hredGAN 이란?

  • Hierarchical Recurrent Encoder Decoder 에 GAN을 붙여놓은 모델입니다.
  • Context와 word embedding값을 Generator ←→ Discriminator에서 공유하는 구조.

변수 정의:

  • N = 대화 발화 개수
  • 대화 발화: x = (x_1, x_2, ... X_N)
    • 볼드한 x
  • M = 단어 토큰 수
  • 대화 발화 1개: x_i = {(x_i)^1, (x_i)^2, ... , (x_i)^M_i}
  • 대화 히스토리: xi = (x1, x_2, ... , x_i)
    • 볼드한 x
  • 생성된 답변: y_i = { (y_*i)^*1, (y_*i)^*2, ... (y_i)^ T_i }
    • T = 생성된 토큰 수
    • ^ = 위 첨자
    • _ = 아래 첨자
  • 생성된 답변의 분포: P(y_i)
  • Ground truth 답변: P(x_(i+1))
  • Ground truth 단어토큰: T_i = M_(i+1)

Conditional GAN 모델 설명:

  • G: {x_i, z_i} —> y_i

    • x_i 와 z_i (noise) ←→ y_i 의 매핑을 학습
  • Generator는 y_i 답변을 ground truth와 상당히 비슷하게 생성함으로써 Discriminator를 속여야한다.

  • Generator의 output 분포는 아래와 같다:





  • Generator 모델 파라미터:

    • Autoregressive generative model
    • 현재 단어 토큰의 확률은 기존 생성된 단어 시퀀스에 의존되어있다.
    • 현실적으로 제너레이터 G 를 log-likelihood로 학습시키면 불안정해서 기존 생성된 단어sequence를 ground truth대신 넣어주어 학습한다.
    • 이 방법은 teacher forcing이라고 합니다.

  • Teacher forcing input in GAN

  • 생성된 가짜 답변:


    • teacher forcing input
    • noise z_i
    • fake output (y_i)^j


  • GAN objective:

    • Noise distribution:

    • Ground truth response distribution:


    • Noise를 조절하면서 다양한 답변을 생성하는게 목적입니다.

    • 인퍼런스 때 Discriminator는 생성된 답변을 랭킹해줌으로써 제너레이터의 output을 제어할 수 있습니다.

Paper의 Objective:

  • 우선, condition GAN입니다:

  • G는 작게, D는 크게 하는게 목적입니다.

  • Discriminator는 가짜인지만 판별하면 되는데, Generator는 진짜다운 답변이면서도 ground truth와 가깝게 만들어야 하는게 목적입니다.



  • Conditional GAN에 MLE를 추가해서 학습합니다.

Generator 모델 설명:

  • 추가된 변수 설명:

    • E(.) = Embedding lookup
    • h_i = cRNN ( eRNN (E(x_i), h_(i-1))
    • eRNN (.) = maps input sequence to fixed-length vector
    • h = decoder RNN's hidden state
    • h = context RNN's hidden state

  • HRED (Serban et al, 2016) 모델을 제너레이터로 사용합니다.

    • 3 RNN = encoder (eRNN), context (cRNN), decoder (dRNN)


  • 각 단어토큰의 conditional probability:

    • Multi-resolution HRED에서는 성능을 높히기위해 high-level token을 따로 추출해서 RNN네트워크를 한번더 태웁니다.

  • 하지만, 이 논문에서는 비슷한 효과를 내면서도 효율적이게 하도록 디코더에 local attention을 추가했습니다.


  • attention RNN (aRNN) 을 사용해 attention memory를 context RNN과 다르게 인코딩합니다.

    • context RNN은 global context를 가지고 있는 반면, attention RNN은 local context를 가지고있습니다.




Noise 설명:

  • Gaussian noise를 decoder RNN input으로 추가합니다.
  • word level에 추가한것과 utterance (발화) level에 추가한것을 비교합니다.
    • decoder output:




Discriminator 설명:

  • Context & word embedding 을 generator와 공유하고, word level에서도 판별할 수 있다.
    • word-level 판독은 bi-directional RNN을 사용

    • Syntactic 과 conceptual 차이점을 판별할 수 있도록 학습이 되었습니다.



    • Drnn = word discriminator RNN

    • h_i: encoded vector of dialogue history x_i = output of cRNN(.)

    • J = T_i for generator's output

    • J = M_(i+1) for ground truth


hred + GAN Generator objective function:



  • z_i,l = dialogue i번째의 l번째 noise sample

  • MLE와 adversarial criteria 를 합친 함수이고 y_i,l의 서치 스페이스가 너무 커서 intractable 하다.

  • Approximation function으로 MLE를 사용합니다.

  • Greedy decoding (MLE)은 함수의 첫 부분에서 노이즈샘플 기반의 답변 리스트(L) 를 생성합니다.

  • 노이즈 분포:



  • a > 1.0, noise variance를 올려주는 요소 입니다.

  • L 리스트를 discriminator score 기준으로 랭크해서 제일 높은 점수를 받은 답변으로 대답합니다.

Discriminator ranking 예제:


알고리즘 코드 스니펫:


결과:


Sample:


개인 생각: 

답변은 문맥에 맞게 나오고 word레벨이 더 디테일있게 나오는것을 확인할 수 있습니다. 하지만 이게 서비스가 가능할 수준인지는 깊게 고민해봐야겠습니다.


감사합니다.
//슬릭데브