자연어처리

[자연어처리] BERT

ima9ine4 2024. 6. 9. 14:27
728x90

강필성 교수님 강의자료

 

지난 글에서 우리는 Pretraining 즉 사전학습에 대해서 알아보았다. 사전학습 아키텍처로 Encoder, Decoder, Encoder-Decoder 이렇게 3가지가 있었다. 이 글에서는 Encoder 방식으로 학습된 BERT에 대해서 알아보고자 한다.

 

p. 2

BERT(Bidirectional Encoder Representations from Transformer)는 양방향 Encoder로 Pretrained된 representations 모델이다.

BERT는 transformer의 Encoder구조만을 사용하므로 양방향(Bidirectional) 모델이다. 따라서 전체 문맥을 이해하고 좋은 Representaion을 생성하기에 적합하다. 사전학습된 Bert를 finetuning시켜 downstream task(SQuAD, NER, MNLI 등)를 수행할 수 있다. 아래 그림의 구조는 뒤에서 자세히 뜯어보자.

Bert는 Pretraining 과정에서 2가지 Task를 수행하며 학습된다.

  • Masked language model(MLM)
  • Next sentence prediction(NSP)

 

p. 3

BERT의 모델 아키텍처는 다음과 같다. 우측에는 transformer에서 Encoder block만 사용된 것이 그림으로 표현되어 있다. L은 layer 수, H는 hidden size, A는 self attention head의 수를 의미한다. BERT base 모델과 BERT large 모델에서 파라미터 수의 차이를 확인할 수 있다.

 

p. 4

BERT를 finetuning시켜 다양한 down-stream task를 수행하도록 만들 수 있다. 이를 위해 input representaions는 단일 문장과 여러 문장들을 모두 분명하게 나타낼 수 있어야 한다. 논문에서 정의하는 Sentence와 Sequence의 의미가 아래에 나와있다. 우리는 보통 Setence라고 하면 문법적인 구조를 만족하는 문장을 생각하겠지만 여기서는 그와는 상관없이 그저 연속적인 text에서 임의의 구간을 말한다고 한다.

 

p.5

먼저 BERT의 Pretrainig하는 구조는 다음과 같다. BERT가 2가지 task(MLM과 NSP)를 수행하며 학습된다고 했는데 아래 그림을 보면 이를 확인할 수 있다.

Masked Sentence들이 input으로 들어가고 있다. 여기서 두가지 Special Token이 사용된다. 맨 처음으로는 [CLS] 토큰(Special Classification Token)이 주어져서 Sequence의 시작을 알려준다. SenteceA와 SentenceB 사이에는 [SEP] 토큰이 들어간다. 이는 SentenceA와 SentenceB를 Separating해주는 역할의 Token이다.

Output으로는 NSP와 Masked LM의 결과가 나온다.

 

p.6

Input Representation에 대해 더 자세히 살펴보자. BERT의 Input Representaion은 3가지 embedding 벡터들의 합이다.

(1) Token Embedding
BERT에서는 WordPiece embeddings를 사용한다. WordPiece embeddings란 WordPiece Tokenizer 방법을 통해 구분된 임베딩값들이다. Tokenization이란 자연어로 된 문장을 특정 단위로 자르는 행위를 말하는데, BERT는 WordPiece Tokenizer를 기반으로 Token을 구분하여 임베딩값들을 사용한다.
(NLP모델 학습을 위해서 문장을 입력할 때, 이를 어떤 기준으로 잘라서 볼 것인지에 대한 여러 방법(알고리즘)들이 존재, BERT는 이중에서 WordPiece 방법을 사용하는 것)

(2) Segment Embedding
Sentence를 구분해주는 Embedding이다. 이를 위해 [SEP]토큰을 사용한다고 했는데, 여기다가 Segment Embeddings까지 들어가서 더욱 문장 구분을 쉽게 해준다고 한다.

(3) Position Embedding
transformer에서도 Position Embeddings을 사용했는데 이와 같은 방법이다. Token의 위치를 알려주는 역할을 한다.

이 세 가지 Embedding들이 더해져서 Input이 된다.

 

p.7

Bert base모델에서 L=12 (layer수), H=768 (hidden size), A=12(self-attention head의 개수)이다.
30K개의 token이 들어갈 때, Segment Embeddings parameter수는 30K * 768(H)이다.

 

p.8, 9, 10

Masked Language Model(MLM) task에 대해서 보자.

BERT는 Encoder구조이므로 Bidirectional 모델이다. 따라서 Language Modeling을 위해서는 일부 토큰을 Making하는 작업이 필요하다. 전체 토큰 중 랜덤하게 선택된 15%가 Masking된다. Masking 방법에도 3가지가 있다.
선택된 15%의 토큰 중 80%의 확률로 [MASK] 토큰으로 교체되고, 10%의 확률로 랜덤하게 다른 토큰으로 교체되고, 10%의 확률로 교체되지 않는다. 10%를 교체하지 않고 사용하는 이유는 noise를 주어 성능을 높이기 위해서라고 한다. p.10의 결과 표에서 확인할 수 있다.

pretraining과 finetuning사이에 mismatch가 발생함. task가 다르기 때문에 ??

 

p.11

두 번째 task는 Next Sentence Prediction(NSP)이다. QA나 NLI(Natural Language Inference, 자연어추론) 같은 downstream task들은 두 문장 간의 관계에 대한 이해를 기반으로 한다. 이는 Language Modeling으로서 할 수 없기에 NSP task를 수행한다. 

50%의 확률로 A 다음에 실제로 다음에 오는 문장인 B를 이어붙이거나 B가 아닌 corpus의 문장 중 하나를 랜덤으로 이어붙인다.

 

p.15

BERT와 GPT, ELMo의 구조이다. BERT는 bidirectional encoder 모델이지만 GPT는 decoder이기 때문에 양방향 학습이 불가능하다. 모델 아키텍쳐에 따라서 각각 유리한 task가 달라지게 된다.

 

p.19

BERT 모델의 윗단에 하나의 layer를 걸쳐서 downstream task를 수행하도록 fine-tuning할 수 있다.

 

 

 

 

 

 

 

728x90
반응형