[논문리뷰] BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
prefer_all2023. 1. 2. 09:34
https://arxiv.org/abs/1910.13461
Introduction
1) 논문이 다루는 task
본 논문에서는 seq-to-seq 모델로 만든 denoising autoencoder인 Bidirectional and Auto-Regressive Transformers, BART를 제안한다. - input: 손상된 문장 - output: 복원된 문장
BART의 학습은 아래의 두 단계로 이루어졌다.
임의의 noising function으로 텍스트를 변형시킨다.
이를 원래대로 복원하도록 모델을 학습시킨다.
BART는 Transformer 기반 표준 NMT(Neural Machine Translation) 구조를 가지며 BERT와 GPT 및 많은 사전학습 schemes를 일반화한 모델이라 할 수 있다. BART의 장점은 noising할 때 제약 없이 다양한 function을 사용할 수 있다는 점이다.
(a) BERT는 bidirection하게 인코딩(단어 양 옆 고려). 단어를 <mask>해서 각각 하나씩 예측, 생성할 때는 적합하지 않다 (b) GPT는 이전 단어들을 가지고 autoregressive하게 예측하지만 왼-> 오 방향으로만 학습이 된다. (c) BART는 인코더 input이 디코터 output과 하나 하나 정렬될 필요가 없어 임의의 noist transformation이 가능하다. 인코더: 문장에서 단어가 아닌 span이 하나의 <mask> 토큰으로 대체 (양방향 인코딩이 가능하다) 디코더: 복원 후 원본 문서와의 likelihood를 계산한다 (이때, final hidden state를 이용한다)
⭐encoder로 BERT, decoder로 GPT를 쓴 장점 corruption을 하고 예측하는 Cloze Task를 사용할 수 있다, Generation을 할 수 있다. 1. BERT 보다 좋은 점: Cloze Task를 어떻게 발전시켰는가를 살펴봤을 때, Text를 노이징하는 방법에서 장점이 있다. BART는 B,D를 각자 노이즈해서 예측한다. corrupt를 encoder를 예측하는 게 아니라 generation할 때 복원한다. decoder에서 원본 문장을 잘 받는다. 즉, 인코더가 없어도 디코더에서 인풋을 넣어서 generate하기 때문에 corrupt가 많을 때 robust한 효과가 있다. 가장 중요한 건 Text Infilling이다. 실제로 token을 mask로 가리는 건 BERT와 비슷하지만, 여러 개를 mask로 가리기도 하고 필요가 없는 데도 mask를 하기 때문에,(아무것도 없다는 걸 풀도록 강제시킴) down stream task를 잘할 수 밖에 없게 된다.
💬 span은 언어를 이해하는 데 중요한 키워드이다. Span bert에서 token 하나만 masking하지 않고 여러 개를 mask하고 예측하니까 성능이 좋아졌다. BART, T5는 Span bert에서 아이디어를 얻고 Span으로 마스킹했다.
Span Bert : 연속된 mask -> subword로 끊어져 있는 단어들이 앞 뒤 문맥을 보고 풀어나감 어떻게 Span을 설정하지는 언급 안함. NER로 쪼개서 entity를 쓰는 전략
BART: 랜덤하게 설정 -> 너무 naive한 거 아니냐 -> pmi masking이 제안됨
2) 해당 task에서 기존 연구의 한계점
NLP task에서 MLM 등의 self-supervised 접근법은 좋은 성능을 많이 냈으나, 특정 task에만 집중하여 일반화하기 어려웠다. BERT는 encoder이기 때문에 Generation task에 대응할 수 없다. 그리고 GPT는 decoder만 존재하기 때문에 양방향 문맥 정보를 반영하지 못한다.
Related Work
GPT는 leftward context만 다루기 때문에 몇몇 task에서는 문제가 생긴다.
ELMo는 left-only와 right-only representation을 concatenate하는데 두 표현 사이의 상관 관계는 학습하지 않는다.
GPT2는 아주 큰 language model이 unsupervised, multitask 모델처럼 동작하는 것을 보였다.
UniLM은 BERT를 mask의 ensemble로 fine-tune한 것으로 일부는 오직 왼쪽 방향 context만 허용된다. BART와 같이, UniLM은 generative task와 discriminative task 모두에 사용될 수 있다. 차이점은 UniLM의 예측은 조건부 독립이지만 BART는 autoregressive하게 진행된다.
MASS는 아마도 BART와 가장 비슷한 모델이다. 연속된 span of token이 maked되고 이를 추론하는 사전학습 방식으로 진행되지만 token들이 전혀 겹치지 않게 encoder와 decoder에 들어가 discriminative task에 약하다.
XL-Net은 순서가 섞인 masked token을 auto-regressive하게 예측하는 방식으로 BERT를 확장했다. 이는 왼쪽과 오른쪽 context를 모두 고려할 수 있게 한다. 이에 반해 BART의 decoder는 왼쪽에서 오른쪽 방향만 사전학습 단계에서 고려한다.
제안 방법론
Main Idea
Model
BART는 임의로 변형된 문서를 원래대로 되돌리는 denoising autoencoder이다. 구현은 corrupted text에 대한 bidirectional encoder와 left-to-right autoregresisve decoder로 구성된 seq-to-seq 모델로 이루어졌다. 사전 학습을 위해서는 원본 문서에 대한 NLL loss를 사용하였다.
Architecture
표준 seq-to-seq Transformer을 기반으로 하되 OpenAI GPT처럼 ReLU를 GeLU(N(0,0.02)N(0,0.02))로 바꿔 사용하였다. base 모델은 6 layer encoder, large 모델은 12개를 사용하였다.
구조는 BERT와 비슷하지만, 차이점은
decoder의 각 layer는 encoder의 final hidden layer와 cross-attention을 수행한다.
BERT는 word-prediction을 위해 추가적인 feedforward net을 사용하지만 BART는 그렇지 않다.
전체적으로 BART는 BERT보다 10% 정도 더 많은 pamameter를 갖는다.
💬 BART는 BERT에서 decoder도 추가된 모델인데 왜 10%밖에 많지 않을까?
base 모델 기준 bert는 encoder가 12 layer로 구성되고, bart는 encoder, decoder 각각 6 layer로 구성되기 때문이다. 도합 12 layer로 bert와 구성 layer 수 자체는 똑같다.
Pre-training BART
Corrupted document를 문서를 손상 시킨 다음 recontrsuction loss를 최적화하는 방식으로 사전 학습을 진행하는데, reconstruction loss는 decoder의 출력과 원본 문서 간 cross-entropy를 쓴다.
사전 학습에 사용한 방법은 다음 5가지이다.
Token Masking: BERT와 동일하다. 랜덤한 토큰이 샘플링되어 [MASK]토큰으로 치환된다. 모델은 MASK 토큰이 어떤 토큰이었는지 맞추어야 합니다.
Token Deletion: 랜덤한 토큰들이 input에서 치환되지 않고 제거된다. token을 [MASK] token으로 바꾸는 대신 아예 없애버리는 것으로 모델은 사라진 위치를 찾아야 한다.
Text Infilling: 몇 개의 텍스트 span(0>=의 토큰들)이 샘플링 되고, 한 span의 길이가 λ=3 poisson 분포를 따른다. 각 span은 하나의 [MASK]으로 대체된다. SpanBERT에서 제안된 방식이지만, 다른 점은 SpanBERT에서는 다른 분포에서 샘플링을 하며 정확히 같은 길이의 [MASK] token으로 대체한다. Text infilling은 모델이 span에서 얼마나 많은 token이 사라졌는지 예측해야 한다.
Sentence Permutation: 하나의 문서가 마침표를 기준으로 문장별로 모두 분리되며, 분리된 문장들은 순서가 랜덤으로 섞인다. 모델은 섞인 토큰들을 원래의 순서로 배열해야 합니다. 해당 기법은 XLNet에서 영감을 받았다.
Document Rotation: 하나의 토큰을 랜덤으로 동일한 확률로 선택하고, 문서가 섞여 해당 토큰이 문서의 시작 지점이 된다. 모델은 원래 시작점을 찾아야 한다.
Fine-tuning BART
BART가 생성한 representation은 downstream applications에서 여러 방식으로 사용될 수 있다.
Sequence Classification Tasks
같은 입력이 encoder와 decoder 모두에 주어지고, final decoder token의 final hidden state는 새로운 multi-class linear classifier에 입력으로 주어진다. 이는 BERT의 CLS token과 연관되어 있지만 BART에서는 이 추가적인 token을 끝에 추가하여 decoder에서 token의 representation이 decoder states를 처리할 수 있게 했다. (Figure 3 (a))
decoder의 마지막 출력값의 hidden sate를 bert의 cls 토큰과 유사하게 사용한
SQuAD의 answer endpoint classification와 같이 전체 문서를 encoder와 decoder에 주고 decoder의 top hidden state를 각 단어의 representation으로 사용하였다. 이 representation은 token을 분류하는 데 사용된다.
Sequence Generation Tasks
BART는 autoregressive decoder를 갖고 있으므로 abstractive question answering나 summarization와 같은 생성 task에 바로 적용할 수 있다. 둘 모두 정보를 입력에서 변형된 상태로 복사되며 이는 denoising pre-training objective와 긴밀한 연관이 있다. 여기서 encoder 입력은 input sequence, decoder는 출력을 autoregressive하게 생성한다.
Machine Translation
BART 모델 전체를 하나의 encoder처럼 생각해서 MT에도 적용할 수 있게 하였다. (Figure 3(b))
정확히는, BART의 encoder embedding layer를 랜덤 초기화된 새로운 encoder로 교체하였다. 모델은 end-to-end로 학습되며 새로운 encoder가 외국어 단어를 BART가 de-noise할 수 있는 영어 입력으로 mapping하도록 학습된다. 새로운 encoder는 원래 BART 모델와 다른 vocab을 쓸 수 있다.
source encoder는 2단계로 학습하는데 둘 모두에서 BART 모델의 출력의 cross-entropy loss를 backpropagate한다.
BART를 freeze하고 새로운 encoder, BART positional embeddings, BART encoder의 첫 layer의 self-attention input projection matrix만 update한다.
이후 반복 횟수를 조금만 하여 전체를 update한다.
💬 BART의 Pertrain은 한국어로만(하나의 언어로) 인코더, 디코더가 학습이 되어있다. Machine Translation은 인, 디코더 언어가 다르다.(encoder을 교체한다기 보다는 이해할 수 있도록 하른 encoder을 또 추가한다)
실험 및 결과
목적함수 비교, 데이터셋 및 Task 설명이다.
Comparison Objectives
여러 pre-training objectives( Language Model, Permuted Language Model, Masked Language Model, Multitask Masked Language Model, Masked Seq-to-Seq) 를 최대한 동일하고 공정한 환경에 놓고 비교를 진행했다.
Dataset
SQuAD: Wikipedia paragraphs을 사용하는 extractive question answering task으로, 정답은 주어진 document context에서 추출된 text spans이다.
MNLI: 한 문장이 다른 문장을 수반하는지 아닌지를 판단하는 bitext classifitation task이다.
XSum: 매우 추상적인 요약문을 포함하는 news summarization dataset이다.
ConvAI2: context와 persona 조건을 갖는 dialogue response generation task이다.
CNN/DM: news summarization dataset로, 요약은 보통 source sentence와 깊은 연관이 있다.
결과
사전 훈련 방법의 성능은 TASK에 따라 크게 다르다. Language model 이 ELI5에서는 높은 성능을 얻었지만 SQuAD에서는 낮은 점수를 얻은 것 처럼, 사전훈련 방법의 성능은 TASK에 크게 좌우된다.
토큰 마스킹은 중요하다. rotating documents와 permuting sentences 으로만 학습한 경우는 성능이 매우 떨어지는 양상을 보였다. 성공적인 방법들은 Token Masking, Token Deletion, self-attention masks 이었다. Deletion은 추가로 Generation Task에서 masking보다 좋은 성능을 보였다.
left-to-right 학습방식은 생성 태스크에서 높은 성능을 보인다. Masked Language Model와 Permuted Language Model은 유독 생성 태스크에서 낮은 성능을 보인다. 이 두 모델은 left-to-right 학습방식이 포함되지 않은 유일한 두 모델이다.
양방향 인코더는 SQuAD에 중요하다. left-to-right decoder만 사용한 모델은 SQuAD에서 좋지 않은 성능을 보이는데, future context가 classification decisions에서 중요하기 때문이다. 그러나, BART는 절반의 bidirectional layers를 가지고도 높은 성능을 보였다.
Pre-training Object만이 중요한 요소가 아니다. Permuted Language Model 은 같은 pre-training 방식을 가진 XLNET에 비해 낮은 성능을 보이는데, 이러한 차이는 XLnet에서 개선한 구조인 relative-position embeddings, segment-level recurrence를 포함하지 않기 때문이다.
Pure language model은 ELI5에서 최고의 성능을 발휘하였다. ELI5 데이터셋은 다른 Task보다 훨씬 높은 PPL을 가진 특이치이며, 다른 모델(Language Model)이 BART를 능가하는 유일한 Generation Task이다. 이러한 결과가 발생한 이유는 추측컨데, 출력이 입력에 의해 느슨하게 제한될 때 BART가 덜 효과적임을 나타낸다.
BART가 전체적으로 높은 성능을 보였다. ELI5 데이터셋을 제외하고, text-infilling을 사용한 BART모델이 대부분의 TASK에서 높은 성능을 보였다.
💬 출력이 입력에 의해 느슨하게 제한될 때의 의미는? A pure language model performs best, suggesting that BART is less effective when the output is only loosely constrained by the input.
멘토님들의 의견이 나뉘었다. 기존 다른 task는 input에 대한 문장을 입력으로 넣었을 때 풀이하기 쉬우나 ELI5는 generation이 잘 안되는 task이다. abstract는 extractive가 아니라 generation이 중요하다(input과 다르게, 어려운 task). 따라서 generation을 잘하는 모델이 잘 푼다. + extract는 입력문장 중 하나를 고르는 task (생성이 아니라 classification)이다. 위 논문에서 defense를 위한 파트가 아닐까.. BERT만 가지면 extract만 잘함, GPT는 abstract만 잘한다는 것만 알아두고 넘어갔다.
💬 MRC 대회에서 BART를 쓸까 말까?
대회는 SQuAD와 유사. BART 논문의 SQuAD 점수를 봐라(2점 차이가 남. 적어도 선택을 할 때 QA에서 GPT 계열은 쓰지 말아야 겠다. encoder가 붙어있는 BART는 그래도 쓸 수 있겠다고 판단) Base가 아닌 Large 모델을 주로 씀. MRC 몇 점 정도 개선이 되겠다는 가정을 가지고, BART는 영어로 pretrained됐으니까 최대 2점 오를텐데 모르니까 실험해보겠다는 flow
Large-scale Pre-training Experiments
최근 연구들을 보면 모델 크기가 클수록 성능이 좋아진다. BART도 비교 실험을 진행하였고, RoBERTa와 같은 크기로 맞추어 실험하였다.
Experimental Setup
12 layer encoder/decoder
hidden size 1024
RoBERTa와 비슷하게 batch size는 8000, 500000 steps
Documents는 GPT-2와 같이 same byte-pair encoding 사용
text infilling과 sentence permutation을 사전학습 scheme으로 사용
학습 단계에서 10%를 dropout
학습 데이터로 160GB 분량의 news, books, stories, web text 사용
Discriminative Tasks
BART의 성능을 SQuAD, GLUE task에서 다른 모델과 비교한 결과이다. 전반적으로 RoBERTa와 비슷하다.
Generation Tasks
BART는 fine-tuning을 할 때 label smoothed cross entropy loss를 사용한다. (smoothing parameter = 0.1) 생성할 때 beam size는 5이고, beam search 시 중복된 trigrams를 제거한다.
Summarization
생성 task는 Rouge 점수를 metric으로 삼는다.
CNN / DailyMail의 요약은 source sentences들과 비슷한 경향이 있다. Extractive 모델은 특히 이를 잘 다루지만 BART가 더 우세하다.
이에 반해 XSum은 매우 추상적이며 extractive 모델 성능이 낮다. BART는 점수 수치 상 6점 이상으로 매우 크게 앞선다.
Dialogue
모델은 이전 context와 텍스트로 명시된 persona에 기반해서 응답을 생성해야 하는 task이다.
BART는 대화 응답 생성 태스크를 CONVAI2로 실험하였고, 이 task는 반드시 이전 문맥과 텍스트로 명시된 화자 둘 다 고려하여 응답을 생성해야 한다는 특징이 있다.
BART는 다른 모델들과 비교하였을 때 Perplexity에서 큰 향상을 보였다. (Perplexity가 낮을 수록 성능이 좋은 것이다)
Abstractive QA
장문의 자유형식 응답 문장을 생성하는 task에서도 기존 모델과 비교한 결과인데 3가지 metric 모두에서 앞서는 결과를 보여준다. 그러나 데이터셋 자체는 challenging한데 answers는 질문에 의해 weakly specified하기 때문이라 한다.
Translation
Sennrich.at.al.이 제안한 Back-Translation Data Augmentation를 적용한 WMT16 Romanian-English 데이터셋으로 실험했다. 6개의 추가적인 트랜스포머 엔코더 레이어를 도입해 루마이아어를 영어 표현으로 매핑하여 BART가 기존의 영어로 문제를 풀 수 있게 하였다.
Viswani et al.이 제안한 기존 Large Transformer 모델로 두었고, BART를 영어로 표현으로 매핑하는 6개의 레이어만 학습하고 나머지 파라미터는 freeze한 Fixed BART와 Fixed BART의 모든 파라미터를 한번 더 학습시킨 Tuned BART로 나누어 실험했다.
back-translation data augmentation을 적용하지 않으면 BART 모델의 성능이 별로 효과적이지 않았고, 오버피팅 될 확률이 높았다. → 데이터가 중요하다.
Qualitative Analysis
BART의 성능을 자동화된 메트릭을 이용하지 않고 이해하기 위해, 생성 문장의 질을 직접 분석하였을 때, Table 7은 BART로 생성한 입력 문서에 대한 요약 결과이다.
예시에 사용된 문서들은 사전 학습 코퍼스에 존재하지 않은 WikiNews 기사로 부터 가져와, 모델의 훈련 데이터에 존재할 수 있는 문서가 포함될 확률을 제거하였다. 가장 중요한 내용을 담고 있는 기사의 첫번째 문장을 삭제하여 요약을 진행하였고, 따라서 입력 문서의 요약이 쉽지 않게 만들었다.
모델의 출력은 꽤 유창하고 문법적으로 별 문제가 없다. 그러나 상당히 추상적이며 일부 구절은 그대로 가져온 부분이 있다.
조금 부족하기는 하나 BART의 사전 학습 방식이 자연어 이해와 생성을 꽤 잘 한다는 결과라 볼 수 있다.
배운 점
BERT는 Bidirectional과 Auto-Regressive Transformer를 합친 모델로, seq2seq 모델로 만들어진 denoising autoencoder이다. (decoder을 붙여서가 아니라 denoise를 잘한다)
BART의 핵심적인 장점은 바로 noising의 유연성이다. 어떤 임의의 변형이라도 기존 텍스트에 바로 적용될 수 있으며, 심지어 길이도 변화시킬 수 있다. 문장의 순서를 임의로 섞는 것과 in-filling scheme을 사용할 때 가장 성능이 좋다.
Discriminative task에서 RoBERTa와 비슷한 성능을 보이면서도 text generation task에서는 SOTA를 달성하였다. (summarization 성능 짱)
BART는 텍스트 생성에 대해 fine-tuned되었을 때 효율적이지만 이해력 테스트에서도 잘 작동한다. GLUE와 SQuAD에서 RoBERTa 이상의 성능을, 6 ROUGE score을 더 높게 얻고 abstractive dialogue, question answering, and summarization tasks에서 SOTA를 달성하는 등 성과가 좋다.