Encoder는 주어진 문장을 분류하는 Task에서 좋은 성능을 보임. (ex. 감정 분석)
Masked Language Modeling : 문장 중 빈칸을 임의로 만들어 해당 앞/뒤 문맥에서 어떤 단어가 와야 가장 적절한지를 맞추는 방식으로 학습 -> 양방향(Bidirectional) 성격 - 예) 우리는 지금 어렵지만 열심히 “공부를” 하는 중이야. ○ 예) 우리는 지금 어렵지만 열심히 [MASK] 하는 중이야.
Decoder
Decoder : source 문장의 정보를 받아서 target 문장을 생성
Decoder는 다음 단어를 생성하는 task에서 좋은 성능을 보임. (ex. 요약, 번역)
Causal Language Modeling : 문장의 흐름대로, “앞” 의 문맥이 주어졌을 때 다음으로 오는 단어를 맞추는 방식으로 학습 -> 단방향(Unidirectional) 성격 - 예) 우리는 어렵지만 열심히 “공부를” ○ 예) 우리는 어렵지만 열심히 ______
Encoder-Decoder
Encoder와 Decoder를 동시에 사용하는 구조
Sequence-To-Sequence task 수행에 특화된 모델 구조 - Sequence-To-Sequence는 source 문장을 target 문장으로 변환하는 작업
Encoder-Decoder는 source 문장과 target 문장의 속성이 다르고 이를 변환하는 task에서 좋은 성능 (ex. 요약, 번역)
source 문장과 target 문장의 길이가 다르더라도 이 부분을 반영하여 task 를 수행 가능
Encoder-Decoder 구조를 사용해 번역 task를 해결하는 예시 - Source sequence : this is a sentence - Target sequence : 이것은 문장이다
BART
(Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension)
Encoder-Decoder 구조의 효과적인 활용을 위해 새로운 학습 방식 제안 - Encoder-Decoder 구조는 생성을 위해 Fine-Tuned 될 때 특히 효과적.
임의로 Noise를 다양한 방식으로 추가하여 원본 문장을 손상시키고 복원시킴으로써 Pretraining 진행 - 원본 문장 중 연속된 여러 개의 단어 쌍(span)을 mask 하는 등 5개의 다양한 Noise 추가 방식 제안. - Noise 를 추가하는 Pretraining 방식으로 포괄적인 task 에도 잘 작동
BART 구조
- BART는 Transformer와 같은 구조를 사용 - 입력 문장에 다양한 방식의 Noise를 추가.
BART Pre-training
- BART는 총 5개의 다양한 유형의 noise 추가 방법을 사용. - 다양한 task 에도 적용 가능.
1) Token Masking - BERT(Devlin et al., 2019)와 같이 임의의 token 을 샘플링하여 [MASK] token 으로 대체한 문장을 Encoder에 입력 - Decoder에서는 원래 문장을 생성
2) Token Deletion - Token Masking과는 대조적으로, 임의의 token 을 원본 문장에서 삭제한 뒤 Encoder에 입력 - Decoder에서는 원래 문장을 생성
3) Text Infilling - 각각의 Token을 Masking 하지 않고, 연속된 0 ~ N개의 token으로 이루어진 다수의 span을 마스킹 한 뒤, Encoder에 입력 - Decoder에서는 원래 문장을 생성
4) Sentence Permutation - 문서를 마침표 (.)를 기준으로 여러 문장들로 나누고, 이 문장들은 임의의 순서로 섞은 뒤, Encoder에 입력. - Decoder에서는 원래 문장을 생성
5) Document Rotation - 전체 문서에서 임의로 선택된 token이 시작 token이 되도록 회전한 문장을 Encoder에 입력. - Decoder에서는 원래 문장을 생성
BART Fine-tuning
- Source 문장을 Encoder에 넣고, Decoder가 target 문장을 생성하는 방식으로 Fine-tuning 진행 - 생성 Task에서 Fine-tuning 될 때 특히 효과적 - 기계번역에서는 Pre-training 학습하지 않은 언어도 번역할 수 있도록 Randomly Initialized Encoder 를 추가하는 새로운 방식 제시.
BART로 풀 수 있는 downstream task
1) Sequence Classification Tasks - 문장의 class 을 분류하는 task ○ 예) 감정분석 (NSMC) - 동일한 입력이 Encoder 및 Decoder에 입력되고 최종 Decoder 토큰이 Classifier를 통과하여 Classification - BERT에서는 [CLS] 토큰으로 분류를 수행하지만, 이에 Decoder 가 추가되기에, 토큰에 대한 Representation이 전체 입력으로부터 Decoder 에 반영될 수 있도록 Decoder 에 토큰 을 추가
2) Token Classification Tasks - 문장의 각 토큰을 분류하는 task ○ 예) 개체명 인식(NER : Named Entity Recognition), 품사 구분(POS : Part-Of-Speech Tagging) - 전체 문서를 Encoder와 Decoder에 입력하고 Decoder 의 마지막 layer 결과를 각 단어에 대한 Representation으로 사용해서 토큰을 분류.
3) Sequence Generation Tasks - 주어진 문장의 이후 토큰을 생성하는 task ○ 예) 요약 - Autoregressive 구조의 Decoder를 가지고 있기 때문에 질의 응답, 요약과 같은 Sequence 생성 task 수행가능 - Encoder에 Input Sequence가 입력되면, Decoder는 출력을 Autoregressive하게 생성
4) Machine Translation - Source 언어로 작성된 문장을 Target 언어로 번역하는 task ○ 예) “Hi” 영어 문장을 한국어로 번역하면 “안녕” - 기존에 학습되지 않은 언어도 번역 가능하도록 Randomly Initialized Encoder 도입 - 새로운 언어로 학습된 새로운 Encoder를 추가 - 기존 BART 모델과는 별도의 Vocab를 사용 가능.
BART 실험 결과 - Encoder-Decoder 구조로 인해, 요약, 번역과 같은 seq2seq task 에 대해 높은 성능 - 5개의 Noise 추가 방식 중, 전반적으로 Text-Infilling 이 가장 효과적. - Token Deletion 또는 Masking 사용시 성능 향상. - Deletion는 생성 Task(요약, QA)에서 Masking을 능가
- 다중 문장 Task(예 : SQuAD 1.1, CNN/DM)에서는 Text-Infilling 과 Sentence Shuffling 을 결합하는 방식이 가장 좋은 성능. - Document Rotation이나 Sentence Shuffling 방식은 단독으로 사용했을 때 상대적으로 효과가 적음. - 단순한 Task 인 ELI5를 제외한 모든 작업에서 Text-Infilling를 사용하는 BART 모델이 좋은 성과를 보임. - Text-Infilling 과 Sentence Shuffling 을 결합한 방식에서 최고의 성능을 달성하는 Task 도 존재