728x90

BERT의 소개

 오늘은 공부할 내용은 요즘 state-of-the-art가 된 BERT(Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing)에 대한 것입니다. NLP에서는 다양한 태스크가 있는데 이 태스크를 학습시킬 만큼 사람이 레이블 리한 데이터가 많지 않은 경우가 많습니다. 딥러닝 모델은 데이터가 많을수록 이점이 많은데 이에 따라 데이터가 적은 태스크들은 적절한 성능이 안 나옵니다. 그래서 위키피디아 같은 대량의 레이블이 안된 데이터를 이용하여 generic 하게 학습하고(Pre-training), 학습된 모델에 태스크에 맞는 적은 양의 데이터를 학습시켜 모델을 다시 조정(Fine-tuning) 하게 됩니다.

 

Contextual한 방법들과 Context-free한 방법들

 언어를 표현할 때는 다른 단어들과의 맥락을 고려할 수도 있고(Contextual), 단어 자체에 포커스(Context-free) 할 수도 있습니다. Context-free 모델에는 워드 임베딩 모델들(ex. word2vec, GloVe)이 주로 해당됩니다. Contextual 하게 표현하기 위한 모델을 만들기 위해 다양한 pre-traning 기법들(ex. Semi-supervised Sequence Learning, Generative Pre-training, ELMo, ULMFit) 이 사용됩니다. 하지만 기존의 기법들은 주로 앞에 나오는 문장(단어들)을 가지고 해당 단어를 표현하기 때문에, 해당 단어의 맥락을 표현하는 데 한계가 있습니다. 해당하는 단어를 맥락에 따라 잘 표현하기 위해서는 그래서 앞에 나오는 문장뿐만 아니라 뒤에 나오는 문장도 같이 고려하면 좀 더 정확하게 표현이 될 수 있을 것으로 예상됩니다.(Directional → Bidirectional). 그럼 이런 아이디어를 진작 왜 못했을지 알아보도록 합시다.

 

MLM과 NSP를 이용한 BERT 방법

 Directional 모델들은 단순히 이전 단어들을 기반하여 예측하고자 하는 단어를 간단히 학습을 하면 됩니다. 하지만 bidirectional 모델의 경우에는 각 단어를 이전 단어들과 다음 단어들과 같이 학습을 해야 해서 이전과 같은 단순한 인풋의 형태로는 학습이 안되고, 설사하더라도 예측하고자 하는 단어를 이미 알고 단어를 예측하는 형태로 진행됩니다. 예측인데 예측하는 형태가 아니게 되는 겁니다.
 이런 이슈를 막기 위해서 단어에 mask를 쓰고 학습시킵니다. 이렇게 하면 단순하게 원하는 부분의 단어 예측이 가능합니다. 이를 MLM(Masked Language Model)라 합니다.

Input : The man went to the [MASK1]. He bought a [MASK2] of milk.
Labels : [MASK1] = store, [MASK2] = gallon

 단어들 간의 관계뿐만 아니라 이렇게 하면 문장들 간의 관계도 알아낼 수 있습니다. 이 부분은 NSP(Next Sentence Prediction)라 합니다.

Case1 : Sentence A = The man went to the store , Sentence B= He bought a gallon of milk, Label=IsNext
Case 2 : Sentence A = The man went to the store , Sentence B= Penguins are flightness, Label=NotNext

BERT의 성능과 그에 대한 의견

 SQuAD v1.1과 다른 9개의 NLU(Natural Language Understanding) 태스크에서 적은 데이터를 가지고도 다른 모델들보다 좋은 성능을 냈습니다. BERT로 이미 NLP 도메인에서 pre-training 한 모델이 있다면 따로 학습시키지 않고 fine-tuning만 해도 되는 게 큰 이점이라 할 수 있습니다. BERT는 transformer를 기반으로 한 bidirectional 한 구조에서 mask를 이용하여 인풋과 아웃풋을 단순화시켜서 간단하게 성능이 좋아지는 것이 큰 이점이었던 듯합니다. 무엇보다 이전에 사람이 직접 한 것과 비교하여 뒤처지지 않는 것이 신기하다는 생각이 들었습니다. Transfer learning을 발전시키는 데도 큰 역할을 한 듯합니다. 좀 더 디테일한 내부 구조와 구현 방법에 대해서는 따로 공부를 하고 포스팅해야겠습니다.

 

728x90

+ Recent posts