생각하는감자

BERT 본문

NLP

BERT

토킹감쟈 2023. 1. 16. 15:15

BERT = Bidirectional Encoding Representations from Transformers

BERT를 알기 위해선, Transformer의 개념을 이해하는 것이 필요하다:) 2018년 구글이 공개한 사전 훈련된 모델로 수많은 NLP task에서 높은 성능을 보여주었다. BERT의 성능이 높을 수 있었던 것은 파라미터를 재조정하였기 때문이다. 먼저 레이블이 없는 방대한 양의 데이터를 이용하여 모델을 사전학습 시키고 그 후에 레이블이 있는 다른 task에서 추가 훈련과 함께 하이퍼파라미터를 재조정하는 과정을 거친다. 이러한 과정을 거친 모델은 그 성능이 매우 높게 나오고 파라미터 재조정을 위한 추가 훈련 과정을 Fine Tuning이라고 부른다.

 

 

ELMo

ELMo는 Transformer이 나오기 전에 제인된 Pre-training 모델로, Language Modeling task를 가지고 사전 학습 한 모델이다. 아래의 그림과 같이 양방향의 LSTM (Bidirectional LSTM)을 나타낸다.

 

Pretraining tasks in BERT

BERT의 사전훈련 방식은 크게 두가지로 나뉜다.

  • Masked Language Model(MLM)
  • Next Senctence Prediction(NSP)

 

Masked Language Model ( MLM)

인공신경망의 입력으로 들어가는 단어 토큰 중 15%를 랜덤 하게 마스킹(masking)하는 것을 의미한다. 그 후 마스킹한 단어들을 예측하게끔 하는 것이다. 그 15% 중에서도 

  • 80%는 [MASK]로 완전히 가리고
  • 10%는 랜덤하게 다른 단어로 바꾸고
  • 10%는 변경하지 않고 그대로 놔둔다.

너무 적게 마스킹 한다면 학습하는 데에 너무 많은 비용이 들게 되고 너무 많이 마스킹하게 되면 문맥을 파악하기에 충분하지 않게 된다.

 

또한, 랜덤으로 선택한 15%의 단어들을 모두 마스킹 하지 않는 이유는 [MASK]만 사용할 경우에는 Fine Tuning 단계에서 [MASK]가 나타나지 않기 때문에 생겨나는 불일치 문제를 완화하기 위해서이다. 

[MASK] 자리에서 나온 embedding vector에는 주변에 등장한 정보들이 담겨있다. 이것을 Fully Connected Layer를 통과시켜 무슨 단어인지 예측하는 task이다.

 

Next Sentence Prediction (NSP)

다음 문장을 예측하는 학습을 하는 이유는 BERT가 수행하고자 하는 task들 중 QA(Question&Answering)이나 NLI(Natural Language Inference)처럼 두 문장 간의 관계를 이해해야 하는 task들이 존재하기 때문이다. 

두 개의 문장을 준 다음 이 문장이 이어지는 문장인지 아닌지를 맞추는 방식으로 training 시킨다. BERT의 입력으로 넣을때 [SEP]라는 토큰을 사용하여 문장을 구분해 주고 두 번째 문장이 끝나고도 [SEP] 토큰을 붙여준다. 그리고 이 두 개의 문장이 이어지는 문장인지 아닌지는 분류문제를 풀기 위해 특별히 추가된 [CLS] 토큰을 사용하게 된다. 문장 전체를 대변하는 encoding vector로서, CLS토큰에 해당하는 encoding vector를 사용하여 문장 level의 classification을 수행하게 된다.

 

*MLM과 NSP는 따로 학습하는 것이 아니라 loss를 합하여 동시에 학습한다.*

 

 

Input Representation

  • Word Piece embeddings : 사전 구축해주는 기법
  • Learned positional embedding : positional embedding 학습하여 최적화 시킴
  • Classification embedding - [CLS]
  • Packed sentence embedding - [SEP]
  • Segment Embedding

 

위의 그림은 BERT의 입력값들을 표현한 것으로, 최종적인 input embedding은 token embedding + segment embedding + position embedding이다. Position embedding이 문장 내에서 단어의 위치에 대한 정보를 가지고 있다면, Segment embedding은 [SEP]를 기준으로 각 단어들이 몇 번째 문장에서 등장했는지를 나타내는 벡터이다. 즉, 문장 수준의 position embedding vector이라고 보면 된다.

 

Fine Tuning

Fine-tuning 단계는 실질적으로 BERT를 task에 사용하는 단계로, 사전에 학습되어 있는 BERT에 우리가 원하는 task에 해당하는 data들을 추가로 학습하는 과정이다.

 

1)Single Text Classification

영화 리뷰 분류나 뉴스 분류 작업등에 사용된다. [CLS] 토큰이 있는 위치의 output layer와 fully connected layer를 추가하여 분류에 대한 예측을 하도록 한다.

 

2) Tagging

문장의 각 단어에 품사를 태깅하는 등의 작업이 이에 해당한다. 출력층에 fully connected layer을 두어 수행한다.

 

3) Text Pair Classification or Regression

자연어 추론 문제라는 작업이 있는데, 이는 두 개의 문장이 주어졌을 때, 그 두 문장이 어떠한 관계를 가지고 있는지 파악하는 작업이다. 이러한 작업의 경우 text가 총 2개가 들어가게 되므로 두 문장 사이에 [SEP] 토큰도 존재하고, segment embedding 단계에서 sentence0과 sentence1로 구분된다. 

 

4) Question & Answering

3번과 마찬가지로 두 개의 text가 입력되게 된다. 본문과 질문이 입력으로 들어가게 되면 질문에 해당하는 답변을 본문에서 찾아 출력해 주는 작업이다. 

'NLP' 카테고리의 다른 글

Text Generation  (0) 2023.01.24
GPT  (0) 2023.01.20
Transformer  (0) 2023.01.15
Tokenization  (0) 2023.01.12
seq2seq with Attention  (0) 2023.01.12