Machine learning/NLP

[NLP] BERT - (1).구조와 개념

Acdong 2021. 9. 4. 18:16
728x90

BERT
Bidirectional Encoder Representations from Transformer

 - 트랜스 포머의 인코더를 양방향(마스킹)으로 사용한 모델

 

Task1 . Masked language model (MLM): 

 임의의 순서의 해당하는 위치를 마스킹[Mask]을 해놓고 마스킹된 부분을 예측하도록 하는 모델

 선행하는 단어와 후행하는 단어를 모두 사용하여 예측하겠다는 것(양방향이라고 할 수 있다.)

 

Task2 . Next Sentence Prediction (NSP):

 특정의 두 쌍의 문장이 들어왔을 때

 두 번째 문장이 첫 번째 문장과 의미가 이어지는 가
 (두 번째 문장이 첫 번째 문장 다음에 등장했던 문장인가)를 판단하는 Task
 판단은 input 으로 넣었던 copus를 기준으로 함.

* 챗봇에 Multi-turn 구현에 사용하면 좋을 것 같다.

 

BERT는 언어모델 중 하나로 Pre-train 만 수행한다.

BERT의 아웃풋 도출 이후에 사용자가 필요한 Layer를 쌓아서(Fine-Tuning) 여러 가지 자연어 처리 Task를 수행할 수 있다.

SQuAD , NER , MNLI 등등...

 

BERT : Model Architecture

  BERT - Base BERT - Large
히든 레이어 수(Number of layers) 12 24
히든 레이어 노드 수(Hidden size) 768 1,024
멀티 해드 어텐션 수
(Number of self attention heads)
12 16
학습데이터 수(Total parameters) 110M(1억 천만개) 340M(3억 4천만개)

 

(1). 두 개의 Masked Sentence을 Input으로 받는다. *랜덤으로 지정된 단어가 [Mask] 토큰으로 변환된 문장들

(2). 스페셜 토큰을 넣어준다.
          [CLS] : 모든 문장의 시작을 알리는 토큰
          [SEP] : 두 문장을 구분해주기 위한 토큰

(3). NSP -> 스페셜 토큰인 [CLS] 토큰의 최종 hidden state vector
     - 단순 분류모델로 사용할 경우 다른 vector를 사용하지 않고 NSP 값만 사용해서 분류함.

     - Next Sentence Prediction 예측 결과(뒤에 자세한 설명)

(4). NSP 를 제외한 나머지는 각각 N번째 토큰의 hidden state vector 임

     *이 vector 들은 Masking 된 단어들을 예측할 때 사용됨.


BERT : Input/Output Representations

버트의 Input은 한 문장(single sentence)일수도 있고 한 쌍(pair of sentence) 일 수도 있다.
 : 어떤 Task 인지에 따라 다르다. ( 두 쌍이 필수는 아님 )

버트의 Input은 pre-train 이후에 자연어 처리 Task 를 유연하게 처리하기 위해 특별한 방법을 사용한다.

버트의 input은 3가지 임베딩 벡터로 표현이 된다.

 (1). 토큰 임베딩 : WordPiece 로 토크나이즈 된 임베딩 (총 30,000개의 토큰 = vocabulary size)

 (2). 세그먼트 임베딩 : 서로 다른 문장을 나눠주는 임베딩 [SEP]을 기준으로 함. 
         *하나의 문장을 사용한 Task의 경우 세그먼트 임베딩은 다 0으로 사용한다.

 (3). 포지션 임베딩 : 각각의 포지션에 대한 정보(트렌스 포머와 비슷)


BERT : Pre-training

버트의 학습방법

Task1. Masked Language Model(MLM)

 - 전체 시퀀스의 15%가 랜덤 하게 [MASK] 토큰으로 변환함.

 - 위 예시에서 나온 마스크 된 W4 단어를 주위 단어를 통해 예측함

 - 예측값 W4'를 실제 W4가 되도록 학습함.

 * 마스킹 기법은 Pre-train 단계에서만 일어남 fine-tuning 단계에서는 일어나지 않음

 

이럴 경우 Pre-training 과 Fine-tuning 간에 Mismatch 될 수 있다.(Mask 기법의 단점)

 

그래서 본 BERT 논문은 Mask 비율을 적절하게 조합하여 이 문제를 해결했다.

 80% 는 진짜 마스킹을 진행함.

 10% 는 랜덤 단어를 넣어서 진행함.

 10% 는 마스킹을 진행하지 않음.

 

8:1:1 비율이 가장 성능이 높았다고함.

 

Task2. Next Sentence Prediction (NSP)

 : 다음 문장을 예측하는 테스크에서 사용됨 ( QA , NLI )

QA , NLI 문제는 두 문장 사이의 관계를 이해해야지 해결할 수 있는 문제임.

 

이전에 쓰였던 문장 단위의 언어 모델(ELMO , GPT)은 두 문장사이 관계를 이해할 수 없음 

 

학습 방법 ( Binarized next sentence prediction )

 

데이터 분할

Copus에서 50%는 실제 이어지는 문장 쌍을 사용함(IsNext)   : True

Copus에서 나머지 50%는 랜덤 문장 쌍을 사용함(NotNext)  : False

 

학습 결과 : True / False (문장이 이어지는 문장이다 / 아니다 )

 


BERT : Fine-tuning

Pre-training 된 BERT모델 이후에 Fine-tuning을 통해 여러 Task를 해결할 수 있다.

 *BERT 모델 제일 윗단에 하나의 레이어만 쌓아도 됨.

* 앞서 언급한 대로 반드시 두 문장을 넣어야 하는 것은 아니다. 

문장 분류 모델의 경우는 두 문장을 넣을 필요가 없음

 

이제야 내가 노래 가사 긍/부정 모델을 학습시킬 때 왜 세그먼트 인풋을 전부 0으로 고정했는지 이해가 되었다.

 

BERT를 처음 알게 되었을 때가 3달 전이였는데

구현까지 했었지만 내부구조에 대해서 잘 알지 못했고(선 구현 후 리뷰 ㅋㅋ)

내부구조를 한 번에 이해하긴 어려웠지만 계속해서 보니까 그나마 조금 이해가 되는듯하다.

코드를 하나씩 뜯어보면서 더 자세히 알아봐야겠다.

 

참고 영상 : https://www.youtube.com/watch?v=Yk1tV_cXMMU (고려대학교 산업경영공학과 강필성 교수님 강의)

반응형