본문 바로가기

deeplearning

BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension (Lewis et al., 2020)

ACL 2020에 Facebook이 발표한 논문

 

 

1. Introduction

 

Transformer 기반 모델을 Self supervised learning을 통해 Pre-training하는 방법은 최근 다양한 NLP tasks에서 큰 성공을 보이고 있다.

 

대표적으로 Transformer의 인코더를 pre-training(MLM)하여 이용하는 BERT와 디코더를 pre-training(Next Word Prediction)하여 이용하는 GPT가 있다. 하지만 BERT의 경우 완전히 Bidirectional 하게 모델이 설계되어있기 때문에 generation task에서는 성능이 상대적으로 낮다. 그리고 GPT의 경우 Autoregressive하게 설계된 모델이기에 전체적 맥락을 처리하는 task에 어려움이 있다.

 

BART도 이들과 같이 최근 NLP분야에서 꾸준히 이용되고 있는 Transformer 기반 아키텍처를 이용한다. 단, seq2seq Transformer (Vaswani et al., 2017)의 인코더나 디코더 중 하나만 이용하는 것이 아니라 전체 구조를 기반으로 한다.

BART의 경우 Bidirectional Encoder와 Autoregressive Decoder를 모두 이용하면서 self supervision을 pre-training 단계에서 진행하기 때문에 더욱 다양한 테스크에서 높은 성능을 보일 수 있도록 한다.

 

 

 

BART는 손상된 text를 입력받아 bidirectional한 encoder로 인코딩하고, 정답에 대한 likelihood를 autoregressive decoder로 계산한다. 따라서 다양한 noising 기법이 이용 가능하다는 장점이 있다. 이 논문에서는 문장 순서를 바꾸거나 임의 길이의 토큰을 하나의 mask로 바꾸는 등의 여러 noising 기법을 활용한다.

 

 

 

 

2. Model

 

2.1 Architecture

 

BART는 기존 seq2seq Transformer 기반의 모델이며 GPT처럼 ReLU activation function 대신 GeLU를 이용한다는 점만 다르다.

 

BART_base의 인코더와 디코더의 레이어 수는 각각 6개 씩이며 large의 경우 12이다.

이는 BERT에서 활용하는 레이어 수와 연관이 있다(BERT_base는 12 layers, BERT_large는 24 layers).

 

디코더의 각 레이어에서는 기존의 트랜스포머와 동일하게 인코더의 마지막 hidden layer와 cross-attention을 한다.

BERT처럼 word prediction을 위해 추가로 feed-forward 레이어를 이용하지는 않는다.

 

 

2.2 Pre-training BART

 

 

BART는 손상된 텍스트와 손상되지 않은 텍스트(원본) 간의 loss를 줄이며 학습하는데, 이 때 다양한 방식으로 손상(noise)을 줄 수 있다는 장점이 있다.

 

이 논문에서는 그림과 같이 5가지의 noise 기법을 사용했다.

 

1. Token Masking: BERT처럼 랜덤 토큰을 masking ([MASK] 토큰으로 대체)하고 이를 복구하는 방식이다.

 

2. Token Deletion: 랜덤 토큰을 삭제하고 어떤 위치에서 토큰이 지워졌는지 찾아낸다.

 

3. Text Infilling: 포아송 분포를 따르는 길이의 text span을 생성해서 이를 하나의 [MASK] 토큰으로 masking 한다(단, 길이가 0인 경우 그냥 [MASK]토큰을 삽입한다). 즉 여러 토큰이 하나의 mask 토큰으로 바뀔 수 있다. 이러한 span에 대한 마스킹은 SpanBERT에서 아이디어를 얻었는데 SpanBERT는 span의 길이를 알려주었으나 여기서는 알려주지 않는다. 그리고 얼마나 많은 토큰이 빠졌는지 그 갯수를 예측하게 한다.

 

4. Sentence Permutaion: Document를 문장 단위로 나눠서 섞고 올바른 순서를 찾아낸다.

 

5. Document Rotation: 토큰 하나를 정해서 문서가 그 토큰부터 시작하게 하도록하고 문서 내 문장의 순서를 바꾼다. 모델은 문서의 시작점을 찾도록 학습한다.

 

 

 

3. Fine-tuning BART

 

Pre-training 이후에는 특정 테스크에 대해 잘 작동하도록 하기 위해 Fine-tuning을 진행해야하며, 아래는 서로 다른 다양한 테스크에 대한 Fine-tuning 방법들에 대해 논한다.

 

3.1 Sequence Classification Tasks

 


동일한 input을 encoder와 decoder에 넣고 디코더의 마지막 토큰의 final hidden representation을 linear classifier에 넣어 클래스를 반환한다. (BERT에서 [CLS]토큰을 쓰듯 마지막 위치에 end 토큰을 하나 추가하여 진행)

 

 

3.2 Token Classification Tasks

 

전체 document를 인코더와 디코더에 입력한다. 디코더의 마지막 hidden state를 각 단어에 대한 representation으로 사용한다. 그리고 각 토큰의 representation을 token classification에 사용한다.

 

 

3.3 Sequence Generation Tasks

 

BART는 autoregressive 디코더를 갖고 있으므로 바로 fine-tuning이 가능하다. 인코더에 input이 주어지면 디코더에서 output을 autoregressive하게 만든다.

 

 

3.4 Machine Translation

 

 

 


pre-training된 BART를 디코더로 사용하고 새로운 인코더를 추가해서 인코더-디코더를 fine-tuning 한다. 새로운 인코더는 외국어를 BART가 pre-training 단계에서 학습한 언어로 denoising 할 수 있도록 돕는 역할을 한다. 새로운 인코더는 두단계로 학습되며 모두 cross-entropy loss로 backpropagate 한다.

1. 대부분의 BART 파라미터는 그대로 두고(freeze) 새로 추가된 인코더와 BART의 position embedding과 BART 인코더의 첫번째 레이어의 self-attention input projection matrix만 학습

2. 전체 파라미터에 대해 fine-tuning

 

 

 

 

4. Tasks

 

논문에서는 BART가 다양한 테스크에 적용될 수 있는 언어모델임을 보여주기 위해 다양한 실험을 진행하였다.

  • SQuAD: Extractive QA task. 주어진 document에서 정답을 추출한다. BERT와 유사하게 질문과 document를 concatenate해서 BART 인코더, 디코더 입력으로 준다. Classifier를 포함하는 모델이 정답의 시작과 끝 토큰 인덱스를 예측한다.
  • MNLI: Bitext classification task다. 두 문장의 의미적 관계 분류. 두 문장을 concatenate하고, eos 토큰을 추가해서 BART 인코더 디코더에 입력한다. eos 토큰의 representation이 문장의 관계를 예측하는데 사용된다.
  • ELI5: Abstractive QA. 질문과 document를 활용해 정답을 생성한다.
  • Xsum: Abstractive 요약
  • ConvAI2: 맥락과 페르소나를 활용하는 대화 생성
  • CNN/DM: 뉴스 요약

 

 

5. Results

 

BART에 Pretraining Methods를 적용하고 위에 언급한 Tasks에 대하여 실험해본다.

Base_size model로 실험을 진행(6 encoder, 6 decoder, 768 hidden size)

 

확실한 비교를 위해 기존에 자주 사용된 Pre-training Methods 들을 활용한 모델도 실험한다

 

 

 

 


모델의 Pre-training 방식이 task에 대한 모델의 성능에 큰 영향을 미친다.

 

Document rotation이나 sentence shuffling 기법만 사용했을때 성능은 안좋았다. Token deletion이나 masking 방법을 사용한 것이 더 좋은 성능을 보였고 generation task에서는 deletion이 masking 보다 더 좋은 성능을 보였다.


Left-to-right pre-training이 generation 성능을 향상시킨다. Masked Language Model과 Permuted Language Model은 다른 모델에 비해 generation 성능이 떨어진다. 그 이유를 논문에서는 left-to-right auto-regressive 모델링이 포함되지 않았기 때문이라고 주장한다.


SQuAD에는 Bidirectional 인코더가 중요하다. 이후 문맥의 정보(future context)가 중요하기 때문에 이 정보를 얻지 못하는 left-to-right 디코더는 성능이 좋지 않다.

 

BART는 Text Infilling을 했을 때 가장 좋은 성능을 보이며 가장 일관성 있게 높은 성능을 보여준다.

 

 

 

6. Large-scale Pre-training Experiments

 

모델 사이즈를 키우고 큰 batch size와 corpora를 사용해 pre-training하면, 모델이 다운스트림 테스크에 대해 향상된 성능을 보인다는 것이 최근 연구들을 통해 드러났다. 이를 실험하기 위해 BART를 RoBERTa 모델과 같은 규모로 실험했다.

 

BART_large 모델은 12레이어, 1024 hidden state를 갖도록 설정한다. RoBERTa처럼 batch size로 8000을 설정했고, 모델을 50만번 학습했다. Document는 GPT2와 같은 byte-pair encoding을 사용해 토크나이징했다. 위의 실험 결과를 참고해 Text infilling과 sentence shuffling을 섞어서 pre-training 했다. 각 document의 30% 토큰을 masking 했고, 모든 문장을 섞었다. 마지막 10%의 training step에서는 dropout을 적용하지 않았다. RoBERTa와 같은 데이터를 사용했다.

 

 

SQuAD, GLUE에 대해 BART 성능을 측정했다. 같은 데이터를 사용해 다른 방법으로 학습한 RoBERTa와 비교해보면 큰 차이가 없음을 보였다. BART는 generation task에서 성능 향상을 이루면서 classification task에서도 경쟁력을 유지했다.

 

 

 

Generation Task(Summarization, Abstractive QA etc)에 대해서도 실험을 진행하였고 높은 성능을 보였다.

 

Summarization

 

 

Conversational Response Generation

 

 

Abstractive QA

 

 

7. Conclusion

 

BART는 분류 테스크에서 RoBERTa와 비슷한 성능을 내면서 동시에 생성 테스크에서도 높은 성능을 보였다.