오답노트

[NLP] BERT 본문

Python/DL

[NLP] BERT

권멋져 2022. 10. 7. 23:01

BERT

BERT는 2018년에 구글에서 발표한 새로운 방식의 언어 학습 모델이다.

이는 NLP에서도 전이 학습이 가능하게 된 중요한 발전이된 모델인데, 논문 발표 이후 모델을 공개하여 누구나 사용 가능하도록 하였다.

 

전이학습은 미리 모델을 학습 시킨뒤 그 모델을 가져와 비슷한 다른 일을 하게하는 것이다.

 

  • Pre - Training : 방대한 양의 텍스트로 부터 언어의 패턴을 학습하여 문법적, 의미적, 문장간의 관계성을 인코딩한다.
  • Fine - Tuning : 다양한 일을 수행하기 위해 BERT의 pre-trained 모델 위에 Linear 레이어를 올린다.

BERT 구조

BERT는 Encoder 여러개가 쌓여있는 형태로 되어있다.

 

 

BERT는 크게 base 와 large 모델이 있다.

base 는 12개의 Encoder layer, hidden size는 768, Attention head는 12개이다.

large 는 24개의 Encoder layer, hidden size는 1024, Attention head는 16개이다.

 

이를 하이퍼 파라미터로 나타내면

L = Encoder layer의 수

H = hidden size

A = Attention head 의 수로

 

base 는 L=12,H=768,A=12

large 는 L=24,H=1024,A=16 로 나타낼 수 있다.

 

BERT는 Encoder 의 개수 만큼 학습을 진행한다.

Input

BERT의 입력은 임베딩 벡터이고 H 크기로 입력된다.

 

 

임베딩은 세가지인데

  • Token Embedding : [CLS], [SEP] 그리고 단어가 있다.
    •   [CLS] : 모든 문장의 가장 첫 번째 토큰. 이 토큰은 Classification에서 사용되지만, 그렇지 않을 경우엔 무시한다.
    • [SEP] : 첫 번째 문장과 두 번째 문장을 구별하는 토큰
  • Segment Embedding : 0이면 A문장의 토큰, 1이면 B문장의 토큰이다.
  • Position Embedding : 단어의 위치 정보를 제공한다.

최대 토큰 개수는 512개이다.

 

WordPiece

BERT는 단어보다 더 작은 단위로 쪼개는 서브워드 토크나이저를 사용한다. 기본적으로 자주 등장하는 단어는 그대로 단어 집합에 추가하지만, 자주 등장하지 않는 단어의 경우에는 더 작은 단위인 서브워드로 분리하여 서브워드들이 단어 집합에 추가된다.

 

해당 토큰의 첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "##"를 붙인다

Output

모델을 거쳐서 나온 Output은 H 크기의 벡터로 출력된다. 출력은 문장의 문맥을 반영한 contextual embedding이 된다. 이 출력이 FC를 통과하면 분류 문제를 예측할 수 있게 된다.

  

Training Method

  • Masked Language Model : 문장에서 몇 개의 단어를 비워놓고 그 단어를 예측하도록 학습시킨다
  • Next Sentence Prediction : 여러 개의 문장들 주어졌을 때, 문장간 관계가 올바른지 아닌지 학습시킨다.

 

Task-specific Models

  • Sentence Pair Classification : 두 개의 문장 사이의 관계 예측
  • Single Sentence Classification : 긍정 부정 분류, 감성 분석
  • Question Answering
  • Single Sentence Tagging

'Python > DL' 카테고리의 다른 글

[NLP] koBERT 실습  (1) 2022.10.15
[NLP] N-gram  (0) 2022.10.14
[NLP] Transformer  (0) 2022.10.07
[NLP] Sequence-to-Sequence (seq2seq)  (1) 2022.10.06
[NLP] Long Short-Term Memory (LSTM)  (1) 2022.10.06