논문 링크
https://arxiv.org/abs/1910.13461
오늘은 바트에 대래 리뷰해보려고 한다. 나는 졸업작품에서 BART를 사용했다. 하지만 Architecture에 대해 모르고 그저 성능이 좋다고 사용했는데, 이번에 기회가 되어서 리뷰를 했었고 그에 대해 정리를 해서 블로그에 업로드해보려고 한다. 그리고 논문에 내용을 최대한 함축해서 핵심만 설명하려고 한다.
Introduction
BART Architecture가 나오기 이전에 유명한 2가지 모델이 BERT(Bidirectional Encoder Representations from Transformer)와 GPT(Generative Pre-Trained Transformer)이었다. 이에 대해 간략하게 소개해본다.
BERT
자세한 설명은 여기를 참고하기 바란다.
특징은 다음과 같다.
- Transformer의 Encoder 부분만 이용
- 양방향으로 Pre-Training하도록 2가지 기법을 사용
- MLM(Masked Language Model) : Token을 임의적으로 Masking 하여 Mask 토큰 예측
- NSP(Next Sentence Prediction) : 2개의 문장이 다음 문장이 맞는지 다른지 예측
- Classification 관련 Task에 SOTA를 달성했음
- Generation Task를 수행할 수 없음(Encoder만 있는 Architecture의 한계)
GPT
특징은 BERT와 반대라고 생각하면 된다.
- Transformer의 Decoder 부분만 이용
- 단방향으로 Pre-training하도록 기법을 사용
- Auto-Regressive : 입력과 출력이 동일하게 예측하도록 함
- Classification Task 보단, Generation Task(Summarization)에 특화
About BART
BART(Bidirectional and Auto-Regressive Transformers)는 BERT와 GPT를 합친 Seq-2-Seq Architecture이다. BART가 다른 모델과 다른 특징으로는 다음과 같다.
- Seq-to-Seq Architecture : Sequence 입력 시 Sequence 출력
- Denoising AutoEncoder : 입력에 Noise를 추가해서 Encoder에 입력하고 노이즈를 제거하여 Decoder가 출력
- BERT와 다르게 Encoder의 Final Hidden Layer에 FFNN(Feed Forward Neural Network)가 존재하지 않음
- BERT보다 10% 많은 Parameter의 수
BERT와 GPT와 다른게 크게 4가지 특징이 BART의 핵심이라고 볼 수 있다. 다음은 BART의 Pre-training 기법과 Fine-tuning 기법에 대해 살펴보겠다.
BART Pre-training
Pre-training 기법은 5가지가 있다.
원래 Text : ABC. DE.
Mask 토큰은 언더바('_')로 표기한다.
Token Masking
BERT의 Pre-training 방식과 동일하다. 특정 Token을 Mask 토큰으로 대체해서 Mask Token을 맞추는 방식이다.
예시 : ABC.DC. → A_C. _E.
Token Deletion
특정 Token을 삭제하는 방식이다. 삭제한 Token을 맞추면서 훈련을 하는 방식이다.
예시 : A.C.E.
Token Infilling
Token Masking과 비슷하지만 다른 점이 있다. 일단 포아송 분포에 따른 난수를 정한다. 여기서 나온 수를 Span 범위로 정한 뒤, Masking 하는 방식이다. 만약 난수가 0인 경우는 <Mask> Token을 추가하는 방식이다.
예시 : Span이 각각 2와 0이라고 하면, BC를 _로 대체하며, D와 E 사이 <MASK> 토큰을 추가한다. → A_.D_E.
Sentence Permutation
말 그대로 문장을 회전하는 방식이다. 일단, 문장을 정하는 기준은 온점('.')을 기준으로 정한다. 그리고 문장을 임의로 섞는다.
예시 : ABC. 문장과 DE. 문장을 온점으로 나눈 뒤 섞으면 → DE.ABC. 이러한 방식으로 나온다.
Document Rotation
문서를 특정한 위치를 기준으로 회전시키는 방식이다.
예시 : B와 C 사이를 기준으로 문서를 회전시킨 것이다.
BART Fine-tuning
방식은 총 4가지가 있다.
Sequence Classification Tasks
방식은 그림과 같으며 문장이 주어졌을 때, 문장의 문법이 합당했는지 아니면 문장의 감정을 분류하는 것이 있다. Decoder Final Hiddne Layer가 multi-class Linear Classifier에 입력으로 넣어서 분류하도록 한다. 그 이유는 Encoder, Decoder의 모든 정보를 참조하도록 하기 위함이다.
Encoder, Decoder 입력: 동일
Token Classification Tasks
방식은 그림과 같으며, Decoder Final Hidden State를 참고하는 것이다. Sequence Classification Task와 다른 것은 Token 단위로 Classification을 수행한다는 것이다. 예시로는 NER(Named Entity Recognition)등이 있다.
Encoder, Decoder 입력: 동일
Sequence Generation Tasks
방식은 위의 그림이며, 노이즈가 추가되어 있는 입력을 복원하는 방식이다.
Encoder입력 : 노이즈 추가된 Text, Decoder 입력: 노이즈 제거된 Text
Machine Translation
Encoder의 Embedding Layer만 매개변수가 초기화되어있는 Encoder로 교체 후 학습을 진행한다. 그 이유에 대해는 다음과 같다. Embedding Layer를 제외하고는 언어에 대해 이해를 하고 있다. 그래서 다른 Layer는 교체하지 않으며 Embedding Layer만 교체하는 이유는 특정 다른 언어와 영어를 매핑하기 위함이다. 한국어로 예시를 들어보자.
예시 : '나는 학생이다' 문장을 'I am student' 문장으로 매핑하기 위함이다. '나는' 이 단어와 'I'라는 단어 매핑, '학생'이란 단어를 'student'단어에 매핑하기 위함이다.
이러한 이유로 Embdding Layer를 교체한 뒤, self-attention input projection matrix를 학습시키는 데 이것도 특정 언어에 대해 이해를 시키기 위해 학습시킨다.
2가지 과정을 거치면 특정언어(예시 : 한국어)가 영어로 단어별로 매핑이 되었으며, 그래서 적은 수의 반복으로 End-to-End로 학습시킨다.
Comparing Pre-training Objectives
여기에서는 noising 기법에 대해 알기 위해 여러 Architecture 간 비교를 진행한다. Architecture에 대해 간단하게 소개한다.
Model
- Language Model GPT와 유사한, Transformer의 Decoder 구조
- Permuted Language Model : XLnet구조와 매우 유사
- Masked Language Model : BERT구조와 매우 유사
- Multitask Masked Language Model : UniLM기반, Mask Token 예측 및 NER 동시에 예측하는 방식으로 훈련한 모델
- Masked Seq-to-Seq : 입력에서 Span Masking 후 Mask 토큰 예측
Task
- SQuAD : Wikipedia 기반 extractive question answering task
- MNLI : 한 문장이 다른 문장을 함축하는지에 대한 task
- ELI5 : 긴 형식의 extractive question answering task
- XSUM : 뉴스 요약 task
- ConvAI2 : 대화의 답변에 대한 task
- CNN/DM : 뉴스 요약 task
Results
결과는 몇 가지로 나온다.
Token masking은 필수적이다. 문서를 회전시키거나 문장을 순열하는 데 기반한 사전 학습 목표는 단독으로는 성능이 좋지 않으며, 좋은 방법은 token deletion, masking 그리고 self-attention mask를 사용한다.
Left-to-Right 방식의 Training은 성능이 좋다. Masked Language Model, Permuted Language Model은 Generation Task에서 성능이 떨어지기 대문이다.
양방향 Encoder는 SQuAD Task에서 필수적이다. 그 이유로는 미래의 Context도 중요하기 때문이다.
BART가 다른 모델과 달리 일관된 좋은 성능을 달성한다.
Large-scale Pre-training Experiments
GPT 논문에서는 대규모의 Corpus를 사용하여 훈련을 하는 경우, 데이터가 많을수록 성능이 향상되는 것이 밝혀졌으며, 대용량의 데이터로 Training을 하고서 다른 모델과 비교를 진행한다.
Training Info
- Dataset : 160GB 크기의 뉴스, 책, 이야기, 웹 텍스트
- Batch size : 8,000
- Step : 5e6
- Dropout : 10%를 적용하며, 마지막 10%의 training step에서 dropout 적용 X
Results
Classification Task
다음은 Classification Task와 관련된 지표이다. 각 Task별로 SOTA(State-of-the-art)를 달성하는 것은 RoBERTa와 BART가 번갈아가며 성능을 달성하는 것을 통해 그게 성능이 차이는 없는 것을 알 수 있다.
Generation Task
다음은 Generation Task와 관련된 지표이다. 여기서는 BART가 모두 SOTA를 달성한 것을 볼 수 있다. 그 이유로는 BART의 Encoder의 경우 다른 모델보다 정보를 더욱 잘 갖고 있으며 다른 훈련이 Decoder의 성능을 다른 모델보다 이해를 잘하고 있는 것이다.
Conclusion
논문에서 나온 결론이 아닌 내 결론은 이렇다. Classification과 같은 종류의 Task들은 BERT류를 사용할 것 같다. 아무래도 성능은 크게 차이 나지 않으며 Parameter의 수는 10% 정도 적으니 굳이 BART를 사용하지 않을 것 같다. 대신 Generation Task에서는 BART류를 무조건 사용할 것 같다.