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
-
Noise를 조절하면서 다양한 답변을 생성하는게 목적입니다.
-
인퍼런스 때 Discriminator는 생성된 답변을 랭킹해줌으로써 제너레이터의 output을 제어할 수 있습니다.
Paper의 Objective:
-
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
- Multi-resolution HRED에서는 성능을 높히기위해 high-level token을 따로 추출해서 RNN네트워크를 한번더 태웁니다.
-
attention RNN (aRNN) 을 사용해 attention memory를 context RNN과 다르게 인코딩합니다.
Noise 설명:
- Gaussian noise를 decoder RNN input으로 추가합니다.
- word level에 추가한것과 utterance (발화) level에 추가한것을 비교합니다.
Discriminator 설명:
- Context & word embedding 을 generator와 공유하고, word level에서도 판별할 수 있다.
-
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레벨이 더 디테일있게 나오는것을 확인할 수 있습니다. 하지만 이게 서비스가 가능할 수준인지는 깊게 고민해봐야겠습니다.
'자연어처리 (NLP)' 카테고리의 다른 글
NLG 논문 리뷰- The Curious Case of Neural Text Degeneration (2) | 2019.10.24 |
---|