Search
⛈️

[논문리뷰] ERNIE-GEN: An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation

Created
3/7/2021, 12:26:24 PM
Tags
Generation
💡
논문 리뷰: ERNIE-GEN

논문 정보 (URL, 저자 등)

Baidu

개요

Self-Supervisied Generation 모델을 학습할 때 직전 Ground-Truth 토큰을 입력으로 주는 것이 문제가 있다고 주장 (Teacher Forcing 을 사용 함으로서 발생하는 학습과 추론 사이의 괴리)
실제로 inference 를 할 때에는 이전 단어를 생성해서 이를 다시 입력으로 넣어 주는데, 이 때 단어가 잘못 생성되면 그 뒤의 문장들이 크게 영향을 받음.
하지만 학습 과정에서는 teacher forcing 을 사용하기 때문에 학습 과정에서 이러한 문제가 발생하지 않음
Infilling Generation
어떤 토큰을 decoding 할 때에 직전 ground-truth 단어를 입력으로 넣어 주지 않고, [ATTN] 단어를 넣어줌
[ATTN] 단어를 넣어 줌으로서 모델이 decoding 시에 마지막 단어에 집중하는 것이 아닌, 전체 문맥에 보다 집중을 하는 효과를 강제로 만들수 있음
단어가 실수로 잘못 생성 됨으로서 발생하는 error propagation 을 문제를 어느정도 개선시킬 수 있음
Noise-Aware generation
T 번째 토큰을 예측할 때 이전에 추론된 T-1 ~ 0 번째 토큰을 입력으로 넣어 주는 방식이 대부분임
이 방법은 T-1 ~ 0 번째 토큰들 중에서 일부분을 random 토큰으로 치환하는 방법.
효과 : decoding 실수를 하는 상황에 익숙하게 만들어, 앞의 턴의 토큰들이 잘못 생성 되었더라도 이후 토큰들의 문장들을 잘 생성할 수 있도록 학습할 수 있음.
Span-by-Span Generation Task
pretraining 과 fine-tuning 시에 masking 된 span을 한번에 예측하도록 학습을 진행함 (예 span 이 3개의 토큰으로 이루어져 있으면, 한번에 3개의 토큰을 모두 예측해야 함)
semantically-complete span 예측을 학습 함으로서 보다 사람 같은 텍스트를 생성할 수 있도록 하였음.
예측할 대상의 span 을 추출할 때에는 random 하게 추출하지 않고, 미리 대량의 bi-gram, tri-gram, unigram vocab 을 만들어 놓고, 랜덤하게 뽑힌 span 이 해당 vocab 에 속하는 경우에만 span 으로 사용함
word-by-word generation task 와 같이 joint learning 을 함.

모델

전체 학습 구조

Pretraining
1.
Pretraining 시에 Masking 할 Fragment 들을 Sampling 합니다.
2.
T번째 토큰을 Decoding 시에 입력으로 줄 T-1~0 번째 토큰에 Noise 를 줍니다 (random replace)
3.
학습 시에 span-by-span / word-by-word infilling generation 을 multi-task 로 학습합니다.
Fine-tuning
1.
위 과정으로 학습된 Pretraining 모델을 사용합니다.
2.
T번째 토큰을 Decoding 시에 입력으로 줄 T-1~0 번째 토큰에 Noise 를 줍니다 (random replace)
3.
Pretraining 과 다르게 masking 과정 없이 바로 target 문장을 생성합니다.

1. Multi-Granularity Target Fragments (마스킹 할 대상 선정)

여러 개의 span fragments 들을 샘플링 하는(Masking 할 대상을 선정하는) 작업이 필요로 함.
Multi-Granularity 는 큰 뜻은 아니고, 여러 세그먼트를 예측 + 다양한 길이의 토큰의 의미 인거 같음
P = {U(1, 4), U(4, 32)} 로 랜덤 길이 분포를 설정하고, 각각 0.4 , 0.6의 확률로 두 분포중 하나에서 길이를 뽑음. 첫번째 길이 1~4 는 짧은 세그먼트를 위한 분포이며 4~32 는 긴 세그먼트를 위한 분포
작은 fragment 를 통해서는 단어 간의 sementic 한 관계를 배울 수 있음
긴 fragment 를 통해서는 자주 사용하는 표현이나 문장들을 배울 수 있음
Masking 된 Fragment 들은 [MASK] 토큰으로 치환하지 않고, 그냥 Source Sequence 에서 삭제

2. Infilling-Generation (마스킹된 대상을 Decoding)

이렇게 뽑은 Segment 에 대해서 원본 텍스트 S 에서 Masking 을 진행하여 S' 을 만듬
MASS 나 UniLM 과 다르게 하나의 fragment 만 예측하는 것이 아니라, 여러개의 fragment 를 예측함
예측하고자 하는 Segment 의 Position id 를 Decoding 시에 입력으로 넣어 줌

3. Multi-Flow Attention (Word-by-Word Decoding + Span-by-Span Decoding)

span-by-span prediction 에서 attention mask로 에서 동일한 span 끼리는 참조하지 못하게 만듬
입력 문장 S, 이전 턴의 토큰들을 Key, Value 로 주고 Query 로 Decoding 하고자 하는 위치의 [ATTN] Embedding + Position Embedding 을 넣어 줌
(도와주세요 ㅠㅠ) 왜 a에 대한 representation 을 따로 계산하는지 모르겠음. t로 decoding 하면 안되나?

4. Infilling Decoding

5. Training Objective

데이터

Pretraining

Wikipedia + BookCorpus = totaling 16GB (BERT, UniLM 과 동일)
Nvidia Tesla V100 GPU x 32 장으로 4일 학습 (Base 모델)
Nvidia Tesla V100 GPU x 64 장으로 7일 학습 (Large 모델)

Fine-Tuning

총 5가지 테스크에 대해서 성능 실험을 진행하였음.
Gigaword Dataset (Summarization, headline generation)
CNN/Daily Mail (Summarization)
SQuAD Question Generation
Persona-Chat (Dialog Generation)
CoQa (Dialog QA Geneation)

실험

Gigaword Dataset

10k training samples:
동일한 데이터, 동일한 모델 크기 (UniLM, 340 param, 16G Data) 임에도 월등한 성능을 보임
3.8M training samples
PEGASUS(3.8T) 보다 적은 양의 데이터(16G)와 파라미터를 사용했음에도 불구하고 성능이 높음

CNN/Daily Mail

본 테스크에서도 UniLM, MASS 보다도 성능이 우수하고, 심지어 T5 (11B 파라미터) 보다도 성능이 좋음.

SQuAD Queestion Generation

Persona-Chat

CoQA

Ablation Study

위에서 제시한 각 방법들이 얼마나 효과가 있는지 검증하는 실험을 진행하였음.
a) 실험에서는 Infilling Generation 방법과 일반적인 generation 방법간의 성능 비교
b) 실험에서는 Noise-Aware Generation 방법과 일반적인 generation 방법간의 성능 비교
c) 실험에서는 ERNIE-GEN 에서 각각 Noise-Aware generation, Infilling Generation 을 제외했을 때 성능

관련된 논문

MASS 와 UniLM
encoder와 decoder 를 다른 self-supervised task 에 대해 jointly pretraining 하는 방법에 집중하고 있음. 하지만 이 논문들은 exposure bias (학습과 추론간의 불일치) 에 대한 이슈를 다루지 않았음
두 논문은 n-gram masking 을 진행할 때, 하나의 n-gram segment 만 masking 하여 예측을 하였음. 본 논문에서는 여러개의 segment 가 타겟으로 지정될 수 있음.