We-Co

[We-Co] BERT - 자연어처리, NLP 본문

Python/Tensorflow

[We-Co] BERT - 자연어처리, NLP

위기의코딩맨 2022. 2. 11. 23:48
반응형

안녕하세요. 위기의 코딩맨입니다.

오늘은 자연어 처리의 발전에 힘을 실어준 BERT 모델에 대해서 알아보도록 하겠습니다.

버트

[ BERT ]

Bidirectional Encoder Representations from Transformers를 BERT로 간단하게 부르고 있습니다.

2018년 Google에서 공개한 모델이며, 앞서 언급했듯이 NLP Task에서 최고의 성능을 보여주며

NLP의 발전에 많은 기여를 했습니다.

 

BERT는 Transformer를 이용하여 모델을 구현했으며

대량의 단어 Corpus로 양방향(Bidirectional)으로 학습을 시킨 Pre-Trained 자연어 처리 모델이며,

위키피디아, BooksCorpus에 포함된 레이블이 없는 텍스트 데이터로 훈련된 모델입니다.

 

BERT가 높은 성능을 얻을 수 있었던 것은 대량의 데이터를 사전 훈련된 모델(Pre-Training)로

또 다른 작업을 위해 추가 훈련을 작업할 때 하이퍼파라미터를 재조정하여 모델을 사용하면서 성능이

높게 나오는 기존의 사례를 참고해서 트레이닝 되기 때문입니다. 여기서 추가 훈련 과정을 Fine-Tuning이라고 합니다.

 

2가지의 BERT의 기본 구조가 존재합니다.

 

[출처: https://wikidocs.net/115055 ]

BERT-Base, BERT-Large의 2가지 방식이 존재합니다.

기존 구조는 Transformer의 Encoder를 쌓아 올린 구조로 생각하시면 되고 

BERT는 공동의 L, H, A의 하이퍼파라미터를 갖고있습니다.  

 

L : number of layers

H : hidden size

A : number of self-attention heads

 

BERT-Base( L= 12, H = 768, A =12, Total Parameters = 110M)

BERT-Large(L= 24, H = 1024, A = 16, Total Parameters = 340M)

 

L은 Transformer의 Encoder를 의미하고 D는 Size, A는 Self-Attention-heads의 수를 의미합니다.

BERT의 세운 기록들의 대부분은 BERT-Large를 통해 이루어 졌다고합니다. 

 

대량의 corpus의 Dataset으로 Pre-Training을 한 모델을 사용 목적에 맞도록 Fine-Tuning하는 Procedure 입니다.

이것이 BERT의 핵심입니다.

 

[출처: https://nlp.stanford.edu/seminar/details/jdevlin.pdf ]

BERT의 입력 값 처리는 Transformer와 비슷하지만 Segment Embeddins 값을 추가 됩니다.

Input을 보면 [CLS] my dog is cute [SEP] ...[SEP] 한 문단, 한문단 정보의 값 Segment Embeddings의미합니다.

[출처: https://nlp.stanford.edu/seminar/details/jdevlin.pdf ]

 

 

[ Pre-Training BERT ]

BERT는 Unsupervised Task에 대해서 BERT를 Pre-Training을 진행합니다.

Task 1 - Masked LM : Input Data의 일부를 Mask([MASK]) 표시로 가리고 가린 부분의 언어를 Prediction을 수행하도록 학습을 진행합니다.

[A, B, C] 로 예를 들면 [A, [MASK], C] 로 변경하여 B의 언어를 Prediction을 진행하게 됩니다.

3만개의 단어로 구성되어있는데, 80%는 [MASK] 토큰으로 Masking을 처리하고

10%는 랜덤한 토큰, 10% 원래 단어를 유지해서 Traning Data를 만들게됩니다.

 

Task 2 - Next Sentence Prediction(NSP) : 2개의 문장이 이어지는 문장인지 판단하여 이진분류하도록 학습을 진행합니다. 데이터 구성은 50%는 실제로 A와 B가 이어지는 문장으로 구성하고, 50%는 랜덤한 문장 묶음으로 구성하여 진행합니다.

이어지는 구성에 레이블은 IsNext로 설정하고, 이어지지 않는 묶음은 NotNext의 레이블로 구성합니다.

 

C 부분이 NSP의 예측에 대응되는 부분을 의미하며, 학습이 완료된 모델은 NSP Task에 대해서 98% 정도의 정확도를 보여준다고 합니다.

 

[출처: https://nlp.stanford.edu/seminar/details/jdevlin.pdf ]

학습의 최대 길이는 512의 Token으로 지정하고, 

Batch size는 256으로 학습을 진행했습니다. 

256 * 512 = 128000 tokens/batch 

 

1,000,000 Steps을 학습을 진행하며, 3.3billion(33억) word corpus에 대한 40 epoch 정도를 학습합니다.

BERT-Base는 4Coloud TPU를 사용하고 BERT-Large는 16Cloud TPU를 사용합니다.

 

일반인들은 학습이 힘들지만, Pre-Traning 된 모델을 제공하기 때문에 활용 가능합니다.

앞서 말했듯이 Pre-Traning 된 데이터에서 목적에 맞도록 Fine-Tuning을 진행하면 됩니다.

 

[출처: https://nlp.stanford.edu/seminar/details/jdevlin.pdf ]

BERT는 기존의 모델들보다 성능이 향상된 모습을 보이며, BERT-base보다 BERT-Large 모델이 더욱 좋은 성능을 보이는 것도 확인할 수 있습니다.

 

오늘은 BERT 모델에 대해서 간단하게 알아보았습니다.

앞으로 BERT 모델을 활용하여 다양한 자연어 처리를 진행해보도록 하겠습니다.

반응형