210911 Diary BERT
Vanilla BERT의 (Pre)Training Objectives에는 Masked LM과 NSP(Next Sentence Prediction)가 있다. NSP의 경우, 다수의 논문들에서 그 효과가 크지 않음이 언급되었으며, ALBERT의 SOP(Sentence Order Prediction)처럼 변형된 형태로 사용되기도 한다. 현재, 많은 BERT모델들이 Masked LM을 주(Major) Objective로 하여 학습되고 있고, ELECTRA는 아예 Masked LM에 특화된 구조(or Training Process)를 갖는다. 그래서인지 NLP 학회들의 Proceedings를 둘러보면, Masking 기법에 대한 논문들을 심심찮게 발견할 수 있으며, 그 중 재미있어 보이는 것들을 몇 개 골라 읽은 기억도 있다.
최근, 회사에서 Pre-Training은 아니지만, BERT를 Masked Token을 예측하도록 Fine-Tuning 한 적이 있다. Pre-Training과 같이 Heavy(?)한 작업은 아니기에, Naive하게 Randomly Masking을 해도 괜찮을 것으로 생각했으나, Masking Rate과 방법 등에 성능이 민감하게 변화함을 확인할 수 있었다. (당연한 말인 듯..
) 이번 기회에 생각나는 Masking 관련 기법들을 간략하게 정리해 놓으려고 한다.
BERT: Whole Word Masking
학습 데이터에 "차갑고 달콤한 초콜릿 아이스크림"이라는 문장이 있다고 하자. WordPiece Tokenizer가 이 문장을 "차갑 ##고 달콤 ##한 초콜릿 아이스 ##크림"과 같이 쪼개고, "##크림" Token에 Mask가 씌워지면 ("차갑 ##고 달콤 ##한 초콜릿 아이스 [MASK]"), 모델 입장에서 해당 Token을 예측하기가 너무 쉬울 것이다. 그래서 Masking을 할 때, 하나의 단어로부터 쪼개지는 Token들에 모두 Mask를 씌우고 ("차갑 ##고 달콤 ##한 초콜릿 [MASK] [MASK]"), 모델이 이들을 예측하도록 학습을 진행한다. 해당 내용(+Code)은 BERT Google 공식 Github에서 확인할 수 있다!
RoBERTa: Dynamic Masking
RoBERTa는 Data Processing 과정에서 (한 번) Masking된 문장들을 반복하여 학습하는 것(Static Masking)이 아니라, 매 Epoch마다 동일한 문장이라도 다르게 Masking된 데이터를 학습한다. 논문의 결과 Table상으로는 큰 차이가 있나 싶지만, 직관적으로도 모델이 다양한 Token을 예측하도록 하는 것이 훨씬 합리적이다.
(ICLR 2021) PMI-Masking: Principled masking of correlated spans
비교적 최근에 읽은 논문으로, 주어진 Span(Sequence of Tokens)의 상관성을 측정하는 PMI Score를 정의하고, 점수가 높은 Span들을 Masking하여 모델을 학습시킨다는 내용이다. PMI의 원리를 Naive하게 설명하면, 특정 n-gram이 n-gram을 구성하는 개별 Unigram들의 출현 빈도에 비해 얼마나 자주 등장하는지 측정하는 방식이다. 만약, "초콜릿 아이스크림"이라는 Bigram이 존재할 때, "초콜릿"과 "아이스크림"의 출현 빈도에 비해 "초콜릿 아이스크림"의 Sequence가 통으로 등장하는 비율을 계산한다: PMI(초콜릿 아이스크림)=log(P(초콜릿 아이스크림)/P(초콜릿)P(아이스크림)). 이와 같은 계산 방식은 특정 n-gram의 PMI 점수가 높을 때, 이를 포함하는 다른 n-gram의 PMI 값도 덩달아 커지는 문제를 갖는다. 논문에서는 이를 보완하는 최종 형태의 PMI Score를 제시하고, 제안한 방식으로 학습하는 것이 Random-Span Masking 등으로 학습할 때보다 좋은 성능을 보임을 실험을 통해 증명한다.
이외에도 셀 수 없이 많은 Masking 기법들이 존재할 것이다.. 그러므로 다시 열심히 공부해야겠다! 