Data miner

#BERT_논문정리

carayoon 2019. 7. 18. 18:01
728x90

 

 

  -  BERT라고 불리는 논문의 원제는 "Pre-training of Deep Bidirectional Transformers for Language Understanding"이다. 논문의 핵심의 아이디어 부분을 이루는 키워드가 'Bidirectional'인 'Pre-trained transformer' 모델임을 염두하고 공부해보자. 

  -  Attetion is all you need에 소개된 Transformer에 기반한 모델이다. Transfer learning의 일종으로 일반적인 NLP 과제를 수행할 때 도움이 될 수 있는 모델이다. 이는 대용량의 코퍼스로 특정 언어에 대한 일반적인 특성을 학습하여 아주 적은 parameter의 조정을 통해서 특정 문제를 풀기에 용이한 모델에 해당한다. NLP영역에서, Transfer learning은 두 가지 전략이 있다. Feature-based, Fine-tuning 방법이 있는데, BERT의 경우에는 Fine-tuning에 해당한다. 특히, 이전의 Fine-tuning에 관한 방법들은 단방향으로 학습한다는 문제가 있었다. 전 포스팅에서 살펴본 Transformer의 모델에서 Self-attention부분의 encoder에서 임베딩 되는 모든 토큰들은 자신이 생성되기 전의 이전의 토큰들에 대해서만 영향을 받았다. 이러한 방식은 QA(Question - Qnswering) 문제를 풀어 나가는 데 있어서 맥락을 통합하여 표현하는 문제에 있어서 이는 큰 한계점으로 작용하였다. BERT는 이러한 모델의 한계를 극복하고 쌍뱡향으로 학습하려는 전략을 취한다. 

- Feature-based model은 특정 테스크를 위한 단어 표현에 이미 학습된 단어 표현을 덧붙여서 학습하는 방식이며, Fine-tuning model은 최대한 특정 목적을 위한 parameter 조정을 적게 하는 방식으로 일반적인 테스크를 위한 언어 모델을 학습하는 방식이다. 이 때는 비지도 학습으로 학습시킨다. 이후 후속 작업(downstream task)에서는 라벨 된 데이터로 parameter들을 조정하게 된다.

- BERT에서 L은 transformer의 block의 개수, H는 Hidden layer의 개수, A는 attention의 head의 개수를 의미한다. 미리 학습된 모델로 그 파라미터의 개수에 따라서 bert basic, bert large로 나뉘며 그에 해당하는 파라미터의 개수는 아래와 같다. 

 

- BERT의 input들은 세 각도로 임베딩되어 최종적으로 표현된다.

1) Token embedding(토큰의 의미 표현) - WordPiece embedding을 사용한다. 30,000의 토큰으로 구성되어 있다. 문장의 시작을 알리는 토큰은 [CLS]로 표현한다. 분류 문제에서 Transformer의 Encoding을 마치고 나면, 이 [CLS] 토큰은 나머지 이후 토큰들의 의미들의 응축된 의미를 가지게 된다. 분류 문제가 아닌 경우에 이 벡터는 사용되지 않는다. 같이 처리해야 할 문장쌍들은 하나의 sequence로 처리하게 되는데, 이 sequence에 포함되는 문장들을 구분하는 데 있어서 [SEP] 토큰을 사용하게 된다.

2) Segment embedding(문장과 문장을 이어주는 용도로 표현) - 같이 처리해야 할 문장쌍들은 하나의 sequence로 처리하게 되는데, 각 문장에 속하는 토큰들을 구분하는 데 있어서 첫 번째 문장에 속하는 토큰들에게는 A embedding을 두 번째 문장에 속하는 토큰들에게는 B embedding을 하는 식으로 다르게 적용한다. 하나의 문장만을 처리해야 하는 경우는 A embedding만 거치게 된다. 

3) Position embedding(토큰의 sequential한 의미를 보유하기 위해 표현) - 최대 512의 token까지 표현할 수 있다.  

- Pre-training tasks - BERT 논문에서 핵심 부분이라고 할 수 있다. 위에서 BERT 모델에서 강조되는 부분이 deep 하게 bidirectional 하게 단어들을 표현하여 문장의 맥락을 학습시킨다는 점인데, 이는 두 가지 방식으로 학습이 될 수 있다. 먼저, Masked language model 의 방식을 통해, 임의로 input의 토큰 정보를 지우고 학습시켜 그 지운 token을 예측하는 식으로 학습해 나간다. 각 문장의 시퀀스에 대해서 Word piece의 토큰의 15%에 해당하는 토큰을 랜덤으로 mask 하여 학습한다. 이렇게 masked하는 작업은 후속 작업(fine-tuning) 시에는 사용하지 않는 방식이므로, 다음과 같이 15%의 random 추출하는 방식을 조정한다. 

       -> 15%의 80%는 [mask] 토큰으로 바꾸고, 10%는 random한 단어로 교체하고, 10%는 원래의 단어 표현을 유지한다.

random한random 한 단어로 교체하였을 때, 왜곡된 방식으로 학습되지 않을 것이라는 우려가 있을 수 있으나 0.1 * 0.15 = 0. 015, 즉 1.5% 확률로 random 한 단어들이 학습되기 때문에 이는 전체 모델의 표현력을 저하시키지 않는다.

이러한 방식을 통해서 모든 input 토큰들에 대해서 주변 단어 정보의 맥락이 표현할 수 있다.