BERT는 자연어 처리(NLP) 분야의 언어모델(language model) 중 하나로서 기존의 symbolic(규칙/지식 기반) approach, statistical(확률/통계) approach 방법의 단점을 보완하여 자연어처리의 다양한 task에서 SOTA를 달성한 모델이다. BERT를 공부하기 앞서 LM과 관련된 역사를 이해할 필요성이 있다고 판단하였고 그 내용을 정리하고자 한다.
물론 최근에는 XLNET이라는 BERT보다 높은 성능을 달성한 모델도 나왔지만, 자연어처리 분야의 획기적인 모델로서의 이정표를 가지고 있다고 생각하는 만큼 자연어 처리 분야에 관심이 있는 나로선 꼭 이해를 하고 싶었지만 어렵고 복잡한 탓에 손을 놓고 있었다.
그러던 중 우연한 기회로 김성현 연구원님의 T아카데미 토크ON세미나 '딥러닝 기반의 자연어 언어 모델 BERT' 라는 세미나를 듣고 알게된 정보와 구글링을 통해 알게된 정보를 종합하여 관련 내용을 정리해 보려고 한다.
context-free representation 방법론은 공통적으로 한 단어의 의미가 항상 고정(stable)하다고 보는 큰 한계점이 있었다. 다시말해 동음이의어인 단어를 여러가지 의미로 보는 것이 아니라 단어의 '형태'가 같으면 같은 의미로 파악하는 것이다. 이것을 개선하기 위해서 언어모델(language model)에 기반한 contextualize representation 방법론이 등장하게 되었다.
NLP task의 데이터셋의 크기는 높은 성능을 얻기 위한 재료의 관점에서 볼 때, 그 사이즈가 부족한 것이 현실인데 이 때문에 NLP task에 사용할 neural network를 깊게 디자인 하기 힘들다(작은 데이터셋에 깊은 신경망을 쓰면 overfit이 발생하고 일반화 성능을 얻기 힘듦). 반면에 vision task의 경우 대규모의 학습 데이터셋인 ImageNet이 공개 되어 있다. 따라서 자신의 실제 task에 적용시키기 전에 pre-training을 통해 일반적인 이미지 feature를 추출는 방법을 모델로 하여금 학습하도록 하고, 실제 task에서는 소규모의 데이터셋으로 fine-tuning을 통해 높은 성능을 끌어낼 수 있었다.
NLP task에서도 소규모 데이터셋을 이용하면서도 높은 성능을 이끌어 내기 위해 pre-training 방법론이 제안되어져 왔다. 이는 언어 모델(language model)을 통해서 실현이 가능하다.
NLP task를 진행하는 전통적인 방법은 word embedding 기술을 활용하여 학습을 수행할 모델의 input값을 초기화 시킨 후 모델의 학습을 진행하는 것이었다면, 최근의 NLP task의 흐름은 pre-trained language model(문장 내에서 단어들의 관계성을 high-level 수준으로 이미 알고 있는 모델)을 활용하여 마지막 레이어만 특정 task에 맞게 수정하여 사용하는 방식으로 바뀌었다.
문장에 등장하는 단어는 그 문맥에 따라 다른 의미를 지니고 있는 경우가 많다. 예를 들어 '사과'는 '사과가 맛있다.'라는 문장에서는 '과일'을 의미하며, '그녀에서 나의 잘못을 사과하였다.'라는 문장에서는 '자기의 잘못을 인정하고 용서를 빎'이라는 의미이다. 이처럼 자연어는 형태는 같지만 다양한 의미를 지니고 있다. 다시 말해서 해당 단어가 어떤 문맥 에서 사용되었는지에 따라 그 의미가 다르다는 것이다. 그러나 앞서 언급한 것처럼 그간 word prepresentaion 방법은 어떤 문맥에서 단어가 상관되었는지에 관계없이 고정된 하나의 벡터만을 가질 수 있었다.
ELMo는 그간의 word representation이 문맥을 반영하지 못한다는 한계점을 지적하며, 문맥에 따라 representation을 다르게 하여 context를 반영한 representation 방법을 제안한다. ELMo는 NLP의 전이학습의 시작점을 제공한 모델로서, bi-directional LSTM 모델을 통해 다음에 올 토큰을 예측하는 언어 모델(language model)이다.
NMT(neural machine translation) 문제를 해결하기 위해 고안된 모델로서 기존의 NMT에서 주로 사용되던 LSTM이 가지는 병렬연산 불가 문제를 해결하였다. seq2seq 모델과 마찬가지로 encoder와 decoder 구조로 이루어져 있지만, RNN 계열의 cell을 사용하지 않고 이를 transformer로 대체하였다. 특히 self-attention 구조를 제안한 것이 특징이다. 기존의 seq2seq with attention 모델의 경우에는 source sentence를 target sentence로 변환하는 과정에서 target word와 source word 관계에 대해서만 설명할 수 있었고(디코더의 출력이 인코더의 어느 부분에 주목한 결과인지 알 수 있음). 그러나 source word 간의 관계에 대해서를 설명할 수 없는 단점이 있었다. 예를 들어 "나는 배가 고파서 사과를 먹었는데, 그것은 상해 있었다."라는 문장에 대해서 '사과'와 '그것'의 관계를 주목할 수 없었다는 것이다. transformer는 self-attention 구조를 통해서 이를 해결하였다.
이후에 등장하는 GPT, BERT는 NMT 문제에 적용된 transfomer를 어떻게 downstream task에 적용 할 수 있을지를 고민하여 탄생한 모델이다.
transfomer의 decoder 부분만 활용하였다.
지금까지 transformer 기반의 모델은 ELMo가 제안하였던 bi-directional 방법을 고려하지 못하였다. BERT는 transformer의 encoder만을 활용한 모델인데, 인풋 토큰의 일부를 가리는 mask 토큰을 삽입하여 모든 문맥을 고려한(mask 토큰의 앞과 뒤) mask language model이다. 이를 통해 transformer와 ELMo의 장점을 모두 취할 수 있었다.