딥러닝 논문리뷰

BART: Denoising Sequence-toSequence Pre-training for Natural Language Generation, Translation, and Comprehension

빈이름 2023. 4. 13. 15:08

본 포스트는 BART(https://arxiv.org/pdf/1910.13461.pdf)논문의 리뷰입니다.

1. 간단 소개

지금까지 transformer를 활용한 구조로써 GPT와 BERT를 알아 봤었습니다. BERT는 transformer의 양방향 인코더를 활용해 "[MASK]"로 가려진 텍스트를 추측하는 방식으로 학습했고, GPT는 transformer의 단방향 디코더를 활용해 다음 텍스트 토큰을 예측하는 방식으로 학습됩니다. 이에 자연스럽게 BERT는 문장 전체의 의미를 유추하고 이를 분류하는 데에 특화되고, GPT는 다음 텍스트를 생성하는 데에 특화되었습니다.

그렇지만 이 2가지 장점을 모두 합칠 수는 없을까? 해서 등장한 게 BART입니다. BART는 BERT+GPT입니다. 다르게 말하면 transformer 모델을 거의 그대로 사용한다고 볼 수 있습니다. BART는 양방향 인코더와 단방향 디코더를 결합한 구조를 통해 BERT와 GPT의 장점을 모두 취하고자 합니다.

BERT, GPT, BART, Transformer 구조

그렇다면 Transformer와의 차이점은 무엇일까요? 우선 두 모델을 개발한 의도를 살펴봅시다. Transformer는 기계번역을 수행하기 위한 모델로 제시되었습니다. 반면에 BART는 기계번역 뿐만 아니라, 다른 여러가지 task들에도 모두 적용할 수 있는 범용적인 pre-training 모델로 제시되었습니다. 따라서 두 모델의 학습 방식이 가장 크게 다릅니다. Transformer는 A언어로 문장이 입력되면 B언어의 같은 의미의 문장을 출력하지만, BART는 노이즈를 적용한 문장을 입력 받아 이를 BART가 복원하는 방식으로 학습됩니다.

 

BART는 BERT와 비교해서도 모델 구조 이외의 차이점이 존재합니다. 바로 "noise flexibility"가 더 좋다는 것입니다. BERT의 경우 입력 시퀀스와 출력 시퀀스의 길이가 같기 때문에 노이즈를 적용하는 방법이 제한적입니다.("[MASK]"를 어디에 씌우느냐 정도) 그러나 BART는 디코더를 이용해 텍스트를 생성할 수 있기 때문에 입력과 출력 시퀀스의 길이가 같을 필요가 없습니다. 따라서 더 다채로운 노이즈 방식을 적용해도 모델이 원래 텍스트를 복원할 수 있도록 시킬 수 있습니다. 모델 설명에서 다양한 노이즈 방식에 대해 자세히 알아 보겠습니다.

2. 모델

앞서 말했듯이 BART는 노이즈가 적용된 텍스트를 원래의 텍스트로 복원하는 학습을 수행합니다. 구조는 Transformer와 같이 bi-directional한 인코더와 autoregressive한 디코더가 사용되며, 학습은 모델이 예측한 텍스트와 원래 텍스트 간의 차이(negative log likelihood)를 최소화하는 방식으로 이뤄집니다.

2-1. 구조

BART는 기본적으로 Transformer와 구조가 같지만, 세부적으로 다릅니다. ReLU 대신에 GeLU 활성화 함수를 사용했으며, 초기 파라미터로 $N(0,0.02)$(평균이 0, 표준편차가 0.02인 정규 분포)의 랜덤 값으로 설정했습니다. Base 모델과 Large모델을 설계하고 실험했는데, Base모델은 인코더와 디코더에 각각 6개의 attention block을 사용했으며, Large 모델은 12개의 attention block을 사용했습니다.

Transformer와 같은 구조를 사용하지만, 활성화 함수는 GeLU를 사용했다.

2-2. Pre-training BART

BART는 노이즈를 원본 텍스트에 적용하고 이를 복원하는 방식으로 학습한다고 했습니다. 그리고 BERT보다 더 다양한 노이즈 방식을 사용할 수 있습니다. 지금부터 이 노이즈 방식들에 대해서 알아보겠습니다.

 

  1. Token Masking : BERT와 같이 [MASK] 위치에 알맞는 토큰을 예측하는 방식입니다.
  2. Token Deletion : 문장 내의 무작위 단어를 [MASK]로 가리지 않고 삭제합니다. 이를 통해 모델은 단어를 복원할 뿐만 아니라, 어느 부분의 단어가 사라졌는지도 같이 추론해내야 합니다.
  3. Text Infilling : 일정 길이의 span 단위의 토큰들을 하나의 [MASK]로 대체합니다. 여러 단어 토큰을 하나의 [MASK] 토큰으로 대체하기 때문에 모델은 [MASK]에 어떤 '단어들'이 들어가야 하는지를 예측해야 합니다.
  4. Sentence Permutation : 하나의 문서를 문장 단위로 나눈 뒤에, 그 문장들의 순서를 랜덤하게 뒤섞습니다. 모델은 문장을 원래 순서대로 복원해야 합니다.
  5. Document Rotation : 문서에서 랜덤으로 하나의 단어를 선택한 뒤, 그 단어를 기준으로 앞과 뒤의 순서를 바꿉니다. 역시 원래 문서를 복원하는 방법을 학습해야 합니다.

다양한 노이즈 방식

3. Fine-tuning BART

BART 역시 pre-train 모델입니다. 그렇다는 것은 다양한 task들에 fine-tuning을 할 수 있다는 것입니다. BART의 fine-tuning 방식에 대해 알아 봅시다.

3-1. Sequence Classification Tasks

인코더와 디코더에 똑같은 문장이 입력됩니다. 디코더의 last hidden state에 linear layer를 추가하여 분류를 수행하게 됩니다. BERT와 다르게 [CLS] 토큰이 앞에 존재하지 않고, 문장의 맨 뒤에 <eos> 토큰의 output에서 분류를 수행하도록 합니다. (생성 모델은 문장의 시작을 알리는 <sos> 토큰과 문장의 끝을 알리는 <eos> 토큰이 사용됩니다.)

Sequence Classification with BART

3-2. Token Classification Tasks

Token classification은 입력 텍스트의 토큰 하나하나를 각각 분류하는 task를 말합니다. 기본적으로 Sequence Classification task와 똑같지만, linear 레이어를 각 토큰 위치마다 추가하는 차이점이 있습니다.

3-3. Sequence Generation Tasks

Autoregressive Deocder를 갖고 있기 때문에 generation에는 별다른 제약 없이 그대로 수행하면 됩니다. 인코더에는 입력 대상 텍스트를(요약 task라면 요약하려는 글) 디코더에는 원하는 출력 결과 텍스트를(요약 task라면 요약문) 입력으로 주면 되겠죠.

3-4. Machine Translation

Transformer와 같은 구조이기 때문에 인코더에 A언어를, 디코더에 B언어를 입력하면 됩니다. 다만 BART는 pre-training 과정에서 노이즈가 들어간 영어 문장을 원래의 영어 문장으로 복원하는 것을 학습한 상태입니다. 그렇기 때문에 BART의 인코더는 "노이즈가 들어간 영어 문장"을 인코딩하는 방법을 학습한 상태입니다. Machine Translation에서 하고 싶은 것은 다른 언어를 영어로 번역하는 것이기 때문에 인코더의 임베딩 레이어를 새롭게 다시 랜덤으로 초기화하여 다시 학습을 합니다. 이를 통해 인코더 임베딩 레이어가 다른 나라의 언어를 인코더가 원래 수행하던 "노이즈가 들어간 영어 문장"과 같은 feature를 출력하도록 합니다.

인코더 임베딩만 새로운 파라미터로 초기화하기 때문에, 인코더 임베딩과 관련된 레이어들을 제외한 나머지 레이어들은 동결한 채로 어느 정도 학습을 진행합니다. 학습이 어느정도 안정화 되면, 나머지 레이어들도 모두 동결을 해제하고 다같이 학습을 진행하는 방식으로 학습이 진행됩니다.

4. Comparing Pre-training Objectives

본 챕터에서는 BART가 다른 방식들에 비해서 어떤 차별성을 가질 수 있는지를 분석합니다.

4-1. Comparison Objectives

여기선 여러 가지 pre-training 방식들을 비교해 보고자 합니다.

 

  • Language Model : 문장을 왼쪽에서 오른쪽으로 하나씩 살펴보는 GPT 구조를 뜻합니다.
  • Permuted Language Model : XLNet에서 제시된 방법으로, 토큰들의 위치를 랜덤으로 섞어서 auto-regressive하게 학습을 진행하여, 기존의 단방향적인 GPT의 단점을 극복하려 했던 방법입니다.
  • Masked Language Model : BERT에서 제시된 15%의 토큰을 마스킹하는 방법입니다.
  • Multitask Masked Language Model : UniLM에서 제시된 방법으로 Masked Language Model에서 self attention-mask 방법을 추가합니다. 마스킹 방법은 랜덤한 확률로 다음과 같이 적용됩니다.
    - 1/6의 확률로 left-to-right 마스크 적용
    - 1/6의 확률로 right-to-left 마스크 적용
    - 1/3의 확률로 unmasked
    - 1/3 확률로 처음 50% 토큰은 unmasked, 나머지 50% 토큰은 left-to-right mask 적용.
  • Masked Seq-to-Seq : [Mass: Masked sequence to sequence pretraining for language generation.]을 참고하여, 전체의 50%의 토큰을 마스킹한 뒤, seq-to-seq 구조의 모델을 사용해 이를 복원하는 방식입니다.

4-2. Tasks

  • SQuAD : 굉장히 많이 등장하는 대표적인 QA 데이터셋입니다. 질문과 관련 문서가 입력으로 제공되면, 정답을 출력해야 합니다.
  • MNLI : 2개의 문장이 주어지면, 두 문장이 서로 "관계 있음", "관계 없음", "상반됨"  중 어떤 유형인지를 분류해야 하는 과제입니다.
  • ELI5 : SQuAD와 같은 QA task이지만, SQuAD는 답이 짧은 단어로 이루어져 있지만 ELI5는 좀 더 긴 문장을 답으로 생성해야 하는 task입니다.
  • XSum : 뉴스 기사 요약 task입니다. 본문의 내용을 좀 더 추상적이고 다른 단어를 써서 요약해내야 합니다.
  • ConvAI2 : 대화문이 주어졌을 때 그 뒤에 알맞은 답변을 생성해야 하는 task입니다.
  • CNN/DM : XSum과 같은 뉴스 기사 요약 task지만, 요약문이 추상적이지 않고 본문과 관련이 깊게 작성되어 있습니다.

4-3. Results

여러 가지 pre-training 방식과 BART의 여러 가지 noise 방식의 실험 결과. (PPL은 낮을수록 좋습니다.)

위 실험 결과를 보면 몇 가지를 분명하게 알 수 있습니다.

  • Pre-training 방식에 따라 task의 성능이 다릅니다. Language Model과 같은 방식은 text generation task(ELI5)에 강한 모습을 보이지만 SQuAD와 같은 task에 약한 모습을 보입니다. SQuAD는 추론에 앞뒤 문장의 맥락이 모두 필요하기 때문입니다. 따라서 bi-directional 인코더가 적용된 모델이 강세를 보입니다. BART는 bi-directional 인코더가 절반만 섞였음에도 다른 모델들과 유사한 성능을 보입니다.
  • Token masking의 효과 : BART Base의 결과에서 Document Rotation이나 Sentence Shuffling과 같은 방식은 다른 [MASK] 토큰을 사용한 방식들보다 성능이 매우 낮은 것을 확인할 수 있습니다.
  • Left-to-right pre-training 방식은 generation에 좋은 성능을 보입니다. 이런 left-to-right 방식이 사용되지 않은 모델은 Masked Language Model과 Permeted Language Model 2가지 뿐인데, 둘 다 generation task에서의 점수가 좋지 않습니다.
  • ELI5는 GPT와 같은 순수하게 autoregressive decoder만으로 이루어진 구조가 더 좋은 성능을 보입니다. 이는 ELI5의 입력과 출력 텍스트 사이에 적기 때문이라고 분석했습니다. 입력 텍스트와 출력해야 하는 텍스트 사이의 관계가 깊을수록 BART 구조가 GPT보다 더 힘을 받을 수 있다는 것입니다. (기계번역과 같은 task는 BART가 유리하지만, 문장 이어쓰기와 같은 task는 GPT 구조가 유리하다.)
  • ELI5를 제외한 나머지 task에서는, BART+text-infilling 방식이 가장 좋은 성능을 보였습니다!

5. Large-scale Pre-training Experiments

BART는 pre-training 방식으로 제시되었기 때문에 다른 pre-trined 모델들과 pre-training 방식의 효과성을 비교해볼 필요가 있습니다.

5-1. Discriminative Tasks

Discriminative task에 대한 결과 비교

라벨을 분류해내는 discriminative task에 대한 실험은 SQuAD와 GLUE task로 수행했습니다. 실험 모델은 모두 Large 모델입니다. 위 표의 모델 중 BART가 다른 모델들과 구조적으로 다른 것은, 다른 모델들은 bi-directional Encoder 레이어만 24개를 쌓은 구조이지만 BART는 bi-directional encoder 레이어 12개 + auto-regressive decoder 레이어 12개를 섞은 구조라는 것입니다. 그리고 일반적으로 위와 같은 discriminative task에는 bi-directional encoder 구조가 auto-regressive decoder구조보다 유리합니다. 그러나 BART는 두 구조가 섞였음에도 SOTA인 RoBERTa와 유사한 성능을 보입니다.

5-2. Generation Tasks

Generation task에 대한 결과 비교

Generation 성능을 시험하기 위해 2개의 요약 task CNN/DM과 XSum task를 실험했습니다. CNN/DM의 경우 기사 내용과 요약 내용 사이에 겹치는 단어가 많아 extractive 기반의 BERT모델(BERTSUMABS, BERTSUMEXTABS)도 좋은 성능을 보입니다. 하지만 BART가 더 좋은 성능을 보입니다.

XSum은 요약문의 내용이 원본과 겹치는 단어도 적고 더 추상적으로 요약해내야 하기 때문에 extractive 기반의 모델이 힘을 쓰기 어렵습니다. 그래서인지 generation이 가능한 BART의 성능이 CNN/DM보다 더 압도적으로 좋은 것을 확인할 수 있었습니다.

BART의 요약 결과

BART가 요약해낸 결과를 확인해보면 BART의 요약 결과가 굉장히 추상적이라는 것을 알 수 있습니다.(요약문에 사용된 단어들이 원본에 사용된 단어들과 겹치는 수가 적다.) 이는 문맥을 이해하는 인코더와 텍스트를 생성하는 디코더가 함께 학습된 것이 큰 효과를 본 부분이라고 볼 수 있습니다.

6. 결론

이렇게 BART에 대해서 알아 봤습니다. BART는 새로운 pre-training 방식을 제시하는 내용이었고 중요한 점은 아래와 같습니다.

 

  • bi-directional한 인코더와 auto-regressive한 디코더의 결합
  • 다양한 masking 전략 비교

이런 차별점들을 활용해 BART는 discriminative task에서 SOTA에 가까운 성능을 내면서도, generation task에서도 일부 task에 SOTA를 달성할 수 있었습니다.

BERT, GPT, BART까지 읽고 나면 3가지 무기를 손에 쥘 수 있습니다. 텍스트의 이해에 집중하는 BERT 구조를 사용할 것이냐, 문장 생성에 특화된 GPT 구조를 사용할 것이냐, 두 개의 장점을 모두 취할 수 있는 BART 구조를 사용할 것이냐를 선택할 수 있는 것이죠. 주어진 과제와 업무의 주제를 보고 가장 적합하다고 생각되는 구조를 선택해서 사용하면 될 것 같습니다.