RoBERTa: A Robustly Optimized BERT Pretraining Approach
NLP 관련 대회에서 사용하기 위해 여러가지 사전학습된 한국어 언어 모델을 실험하다 보면, 어떤 모델의 성능이 특히 잘 나오는 것을 볼 수 있습니다... 그 이름은 'klue/roberta-large'. 우선 모델의 크기가 다른 사전학습 모델들에 비해 크다는 것 하나만으로도 다른 모델들보다 몇 점 높은 점수가 나오는데요, 여기서 roberta는 뭘까요? 이번 논문으로 알아보겠습니다.
1. 개요
BERT가 발표된 이후로 BERT보다 좋은 성능을 뽑기 위해 여러가지 방법이 제시되어 왔었다고 합니다. 그러나 그런 방법들이 어느 측면에서 BERT보다 나은 성능을 가져온건지와 관련한 연구는 수행이 어렵습니다. 대량의 텍스트로 거대한 모델을 사전학습 시키는 과정 자체가 굉장히 오래 걸리는 작업이고, 그래서 여러가지 실험을 해보기 더 어려운 측면이 있습니다.
RoBERTa는 사실 크게 색다른 방법이 아닙니다. 본 연구에서 하고자 하는 것은 BERT의 하이퍼 파라미터가 최선이었는가를 검증해 보고자 하는 것입니다. 그리고 그 과정에서 BERT가 굉장히 덜 훈련된 상태의 모델이라는 것을 발견했다고 합니다. RoBERTa는 BERT의 덜 훈련된 부분을 보강하는 것만으로도 여러 데이터셋에서 SOTA 성능을 달성했습니다.
RoBERTa에서 보강한 부분은 4가지입니다.
1. BERT 모델을 더 오래, 더 큰 배치 크기로, 더 많은 데이터에 대해 학습.
2. NSP(Next Sentence Prediction) 제거.
3. 더 긴 시퀀스에 대해 학습.
4. 학습하는 동안 더 다양한 마스킹 패턴 적용.
그러면 지금부터 이 4가지 방식에 대한 실험방식과 그 결과를 살펴보도록 하겠습니다.
2. 실험 세팅
2-1. 모델
BERT를 보강한다는 취지에 맞게, 기본 세팅은 BERT-base 모델과 같이 했습니다.(12개의 attention block, 768차원의 hidden dimension)
Learning rate는 실험마다 적합한 수치로 각각 다르게 적용되었으며, Optimizer는 Adam을 사용했습니다. 실험을 통해 BERT 사전학습 성능(ppl)은 Adam의 epsilon 수치에 큰 영향을 받는다는 것을 발견했습니다. 또 Adam의 $\beta_2=0.98$로 설정함으로써 배치 크기가 큰 학습의 안정성을 확보했다고 합니다.
시퀀스의 최대 토큰 길이는 512로 제한했으며, 모든 문장은 잘리는 일 없이 온전한 문장으로 학습에 사용했다고 합니다.
2-2. 데이터
데이터는 총 160GB의 텍스트를 수집했다고 합니다. BERT 논문에서 사용되었던 데이터셋에 추가로 더 수집하였으며, 거의 10배의 데이터를 더 학습시켰습니다.
1. BOOK CORPUS + English WIKIPEDIA : BERT 논문에서 사용한 텍스트들을 그대로 사용. (16GB)
2. CC-NEWS : CommonCrawl News Dataset의 일부를 수집하여 사용한 데이터셋으로, 2016년 9월부터 2019년 2월 사이의 6천3백만 개의 뉴스 기사로 이루어져 있다고 합니다. (76GB)
3. OPEN WEB TEXT : Web Text 데이터셋을 정제한 데이터셋으로, Reddit에서 3개 이상의 추천을 받은 URL 글들을 스크랩한 데이터셋이라고 합니다. (38GB)
4. STORIES : CommonCrawl 데이터셋 중 이야기 형식을 갖는 데이터를 일부 수집한 데이터셋입니다. (31GB)
2-3. 평가
평가는 3가지 benchmark 데이터셋을 이용해 수행했습니다. 각 데이터셋의 특징을 알고 실험 결과를 분석하면 더 좋기 때문에 한 번 자세히 알아보고 가겠습니다.
1. GLUE
GLUE는 NLP 성능을 평가하기 위한 9가지 task로 이뤄진 벤치마크입니다. 각 task들은 한 문장, 또는 문장 쌍의 분류 task 들로 이루어져 있습니다. 각 task에 대한 fine-tuning 방식은 BERT 방식을 따랐으며, 앙상블이나 multi-task learning 등은 사용하지 않았습니다.
2. SQuAD
SQuAD는 QA benchmark 데이터셋이으로, 위키피디아 문서들을 보고 사람들이 직접 질문과 답변을 제작한 데이터셋입니다. 질문과 관련된 context 문서가 주어지면, 그에 맞는 답을 모델이 내놓아야 하는 방식입니다. 1.1 버전과 2.0 버전이 있는데, 1.1 버전의 경우 context에 항상 정답이 존재하지만, 2.0 버전은 context에 정답이 존재하지 않는 경우도 있는 더 어려운 task입니다. 2.0 버전의 경우 모델에 binary classifier를 하나 더 추가하여 context에 정답이 있는지 없는지를 판별하도록 학습했습니다.
3. RACE
RACE는 28,000개의 문서들과 100,000개의 질문으로 이루어진 QA 데이터셋입니다. 데이터는 중국의 중고등학생들이 푸는 영어시험들로부터 수집되었다고 합니다. RACE의 각 문서들은 여러 개의 질문에 대응됩니다. 모든 질문은 4개의 답 중 하나의 정답을 선택해야 객관식으로 이루어져 있습니다. RACE는 다른 QA 데이터셋들에 비해 훨씬 긴 글로 이루어져 있고, 더 많은 지식적 추론이 필요하다고 합니다. (아무래도 중고등학생이 실제로 푸는 문제니..)
3. 실험
3-1. Static vs. Dynamic Masking
기존 BERT의 경우, masking을 학습 전에 데이터에 미리 적용시킨 뒤에 학습합니다. 그러면 모델이 에포크마다 같은 문장에선 같은 마스킹 패턴만을 보게 되겠죠?(Static masking) RoBERTa에서는 이런 점이 모델이 더 다양한 패턴을 학습하는데 방해가 될 것이라고 판단한 것 같습니다. 그래서 masking을 미리 적용시키는 것이 아니라, 각 문장들이 모델에 입력으로 들어갈 때마다 랜덤으로 마스킹을 적용시켜 학습마다 다른 다양한 마스킹 패턴을 볼 수 있도록 했습니다.(Dynamic masking)
실험 결과는 위와 같았습니다. 논문에서는 dynamic masking을 적용했을 때의 결과가 static masking과 유사하거나 좀 더 나은 점수를 보였다고 하고 있습니다. 문장 쌍 분류 task에서는 점수가 살짝 하락한 모습을 보이네요.
왜 SQuAD 2.0과 MNLI-m, SST-2 3가지 데이터셋의 결과를 보여줬을까?
RoBERTa 실험에는 3가지 benchmark가 사용되고 있는데, 그 대표적인 유형이 QA, 문장 쌍 분류, 단일 문장 분류 3가지 입니다. 그래서 아마 각 유형을 대표하는 task를 하나씩 선정해서 결과를 보여준 것으로 보입니다. (MNLI-m은 두 문장의 관계를 분류하는 task, SST-2는 문장의 긍정, 부정을 분류하는 task라고 합니다.)
3-2. 모델의 입력 형식과 NSP
NSP는 50%의 확률로 연속되는 문장을 가져오거나, 서로 관련이 없는 다른 문서의 문장을 가져와서 모델이 다음 문장으로 옳게 예측하는지를 학습하는 방식이었습니다. 이런 NSP는 문장 쌍 분류 task의 성능에 큰 영향을 주는 것으로 알려져 있었지만, 이것이 정말 그런가에 대한 의문도 있었습니다. RoBERTa에서는 NSP에 대해서 정밀 검증을 시도합니다. 이를 위해 4가지 방식을 각각 실험해 봅니다.
1. SEGMENT-PAIR+NSP : [SEP] 토큰의 앞과 뒷 글은 여러 개의 문장으로 이루어진 단락으로 이루어집니다. BERT에 사용된 방식과 동일합니다.
[CLS] 이순신은 조선 중기의 무신이다. 본관은 덕수, 자는 여해, 시호는 충무였으며, 한성 출신이었다. [SEP] 63빌딩 혹은 63스퀘어는 대한민국 서울특별시 영등포구 여의도동에 있는 마천루이다. 이전 명칭은 한화 63시티이고 지상 높이는 249m이다. [EOS]
2. SENTENCE-PAIR+NSP : [SEP] 토큰의 앞과 뒷 글이 오로지 한 문장씩으로 이루어져 있습니다. 한 문장으로 그 길이가 SEGMENT-PAIR+NSP 방식에 비해 매우 짧기 때문에 배치 크기를 늘려 앞의 방식과 토큰 개수를 맞췄다고 합니다.
[CLS] 이순신은 조선 중기의 무신이다. [SEP] 63빌딩 혹은 63스퀘어는 대한민국 서울특별시 영등포구 여의도동에 있는 마천루이다. [EOS]
3. FULL-SENTENCES : 각 문서로부터 연속된 문장들을 최대 길이(512)에 맞춰 모델 입력으로 제공합니다. 문장이 연속되기 때문에 NSP는 수행하지 않습니다. 만약 최대 길이를 채우기 전에 문서가 끝이 난다면, 다음 문서의 문장들을 이어서 input으로 제공합니다.
[CLS] 이순신은 조선 중기의 무신이다. 본관은 덕수, 자는 여해, 시호는 충무였으며, 한성 출신이었다. 문반 가문 출신으로 1576년 무과에 급제하여 그 관직이 동구비보 권관, 훈련원 봉사, 발포진 수군만호, 조산보 만호, 전라좌도수사를 거쳐 정헌 대부 삼도수군통제사에 이르렀다. 63빌딩 혹은 63스퀘어는 대한민국 서울특별시 영등포구 여의도동에 있는 마천루이다. [EOS]
4. DOC-SENTENCES : FULL-SENTENCES 방식과 유사하지만, 최대 길이를 채우기 전에 문서가 끝이 나면, 다음 문장을 이어 붙이지 않고 그대로 끝냅니다. 그렇기 때문에 문장에 사용되는 토큰의 수가 모자를 수가 있습니다. 이런 경우엔 유동적으로 배치 크기를 늘려 다른 방식들과 배치에 사용되는 총 토큰의 수를 맞춰 실험했습니다.
[CLS] 이순신은 조선 중기의 무신이다. 본관은 덕수, 자는 여해, 시호는 충무였으며, 한성 출신이었다. 문반 가문 출신으로 1576년 무과에 급제하여 그 관직이 동구비보 권관, 훈련원 봉사, 발포진 수군만호, 조산보 만호, 전라좌도수사를 거쳐 정헌 대부 삼도수군통제사에 이르렀다. [EOS]
저였다면 문장의 길이와 관계없이 배치 크기만 맞춰서 실험했을 텐데 한 번의 학습에 사용되는 토큰의 수를 맞추려고 배치 크기를 조절하여 실험한게 인상적이네요. 결과는 다음과 같습니다.
표의 맨 윗 줄 부터 보겠습니다. 원래 BERT처럼 여러 문장을 사용하지 않고 한 문장씩만으로 배치를 구성한 결과 모든 task에서 그 성능이 내려간 것을 확인할 수 있습니다. 아무래도 문장을 하나씩만 사용하니 여러 문장에 걸친 문맥의 파악 능력이 떨어져 그런 것으로 추측하고 있습니다.
그 다음으로는 NSP를 사용했을 때와 사용하지 않았을 때를 비교합니다. 놀랍게도, NSP를 사용하지 않았을 때 downstream task들에서 더 좋은 성능을 보이고 있습니다. (SST-2는 제외하고...) 왜 이런 차이가 발생했을까요? 저자는 BERT에서는 NSP를 수행하지 않은 결과를 비교할 때, NSP는 사용하지 않지만 SEGMENT-PAIR의 input 형식을 유지하여 실험했을 것으로 추측하고 있습니다.
마지막으로 FULL-SENTENCES와 DOC-SENTENCES 방식을 비교했을 땐, DOC-SENTENCES의 성능이 더 좋았다고 합니다. 역시 다른 주제의 문장이 뚱딴지처럼 껴있는것보다는 전체적으로 같은 맥락을 공유하는 것이 더 효과가 좋았던 것 같습니다.
그러나 DOC-SENTENCES는 다양한 배치 크기를 적용해야 하기 때문에 이 뒤의 실험에서는 다른 방식들과 비교하기 편한 FULL-SENTENCES 방식으로 실험을 진행했다고 합니다.
3-3. Training with larger batches
그 후로, 배치 크기와 모델의 성능에 대한 실험을 진행했습니다. 결과는 아래와 같습니다.
기존 BERT에서는 256 배치 크기로 1백만 step 학습을 진행했습니다. 모델이 보는 총 데이터의 개수를 맞추기 위해 배치 크기를 키우면서 학습의 step수를 조절하여 실험을 했습니다. 결과적으로 배치 크기를 2천까지 키웠을 때, 기존 BERT보다 더 좋은 ppl과 downstream-task에서의 정확도를 얻을 수 있었다고 합니다. 더 큰 배치 크기도 실험을 계속해 볼 계획이라고 합니다. (어차피 저희는 따라하지 못하겠지만)
3-4. Text Encoding
Byte-Pair Encoding(BPE) 방식은 기존에 많이 쓰이던 subword 단위의 토크나이저 입니다. 단어를 더 작은 단위로 나눠 out-of-vocabulary(OOV) 문제를 줄이고자 하는 것입니다. (처음 보는 단어가 들어오더라도 subword로 분리하면 아는 subword의 집합으로 이뤄질 수 있기 때문에 OOV가 더 적게 발생합니다.) BPE는 보통 유니코드 단위의 character를 최소 단위로 합니다. 그러나 유니코드 문자의 종류는 총 130,000개로 oov가 발생하지 않기 위해선 최소 130,000 크기의 단어사전이 필요합니다.
단어 사전의 크기는 대량의 텍스트를 학습하고자할 때 큰 문제로 다가올 수 있습니다. (텍스트가 많을수록 oov가 발생할 가능성이 높기 때문에 단어 사전의 크기가 기하급수적으로 커질 수 있습니다.) 그렇기 때문에 Radford et al. (2019)의 연구를 따라 byte 단위의 문자를 사용하는 방식을 채택했습니다. 유니코드 단위 대신에 byte 단위의 BPE를 사용할 경우, 256개의 최소 character만으로 모든 단어를 oov 없이 표현 가능합니다. 그렇기 때문에 단어 사전의 크기를 획기적으로 줄일 수 있습니다.
사실 byte 단위의 bpe 토크나이저를 사용하면, 유니코드 단위의 bpe 토크나이저보다 성능이 살짝 하락하는 문제가 있습니다. 그러나 이 정도의 성능 감소보다 더 적은 크기의 언어사전을 구성할 수 있다는 이점이 더 크다고 판단하여 RoBERTa에서는 byte 단위의 bpe를 최종적으로 채택했다고 합니다.
원래 BERT에서는 3만 개의 chracter-level BPE를 사용하여 토큰화를 수행했었습니다. RoBERTa를 훈련하는 과정에선 5만 개의 byte-level BPE를 사용해 토큰화를 수행합니다. 토큰의 수가 늘어난 만큼, 임베딩 레이어의 차원 수가 증가하기 때문에 모델의 파라미터 수가 기존 BERT보다 조금 더 늘어나게 됩니다.
4. RoBERTa
다시 정리하자면, RoBERTa는 기존 BERT와 총 4가지의 차이점을 갖고 학습됩니다.
1. Dynamic masking
2. FULL-SENTENCES without NSP loss
3. Larger mini-batches
4. Larger byte-level BPE
여기에 추가로, 더 정밀한 비교를 위해 2가지 요소를 더 고려합니다.
1. 학습에 사용되는 데이터
2. 학습하는 동안 데이터가 모델에 전달되는 수 (배치 크기와 토큰 수와 같은 요소들)
위의 6가지 변수들의 중요성을 강조하기 위해, BERT_large 모델의 구조를 사용해 실험을 진행했습니다.
표의 윗 단락부터 보면, 데이터를 추가하는 것만으로도 모든 task에서 성능 향상이 있었습니다. 그리고 학습 step 수를 늘릴수록 성능이 더 증가하는 것을 확인할 수 있었습니다.
5. Benchmark 결과
마지막으로 Benchmark 데이터셋들에 대한 결과를 확인하고 가겠습니다.
5-1. GLUE
GLUE의 경우, 단일 모델의 성능에선 모든 분야에서 RoBERTa가 SOTA를 달성하였습니다. 앞서 NSP나 Dynamic masking 실험에서 문장 쌍 분류에서 약한 모습을 보였던 것과 달리, 모든 방식을 종합하여 실험한 결과는 더 좋은 성능을 보였습니다. 논문에서는 BERT와 똑같은 MLM 방식으로 훈련되었다는 점을 계속해서 강조하며, 지금까지 연구되어왔던 pretrain 방식이나 모델 구조보다는, 데이터셋의 양과 학습 시간에 대한 연구가 더 필요하다는 점을 어필하고 있습니다.
5-2. SQuAD
RoBERTa는 다른 모델들과 달리 추가적인 QA셋을 활용하지 않고 오로지 SQuAD 데이터셋만 활용하여 더 높은 점수를 달성했습니다. 데이터셋 크기의 힘을 생각한다면 놀라운 결과인 것 같습니다.
5-3. RACE
RACE에서도 SOTA를 달성했습니다. 같은 MLM을 적용한 BERT에 비해 점수가 10점씩이나 증가한 것이 인상적입니다.
6. 결론
이렇게 RoBERTa에 대해 알아봤습니다. 알아본 결과, RoBERTa는 BERT와 크게 다른 방식으로 학습되지 않았습니다. BERT 이후의 연구들은 대부분 모델의 구조나 Pretrain 방식에 대한 연구가 주였지만, RoBERTa로 인해서 BERT의 MLM 방식이 더 안 좋은 것이 아니며, 학습에 사용되는 데이터셋의 양이나 얼마나 많이 학습되었느냐가 중요하다는 것을 일깨워주고 있습니다. BERT가 더 많은 데이터로 더 많은 양을 학습 가능하다는 것은 BERT 구조가 가진 잠재력이 더 크다는 뜻이겠죠. 그래서 더 큰 모델, 더 많은 데이터셋을 사용하는 풍조가 생겨난 것 같습니다.
개인적으로는 실험 결과의 비교를 위해 여러가지 변인 통제를 철저하게 하려고 했던 점(모델이 학습하는 동안 보는 토큰의 수라던가)과 기존의 방식이 옳은가? 하는 의문점을 던지는 부분들이 인상적이었던 것 같았습니다.