Deep Learning

BERT의 학습 원리 및 transferlearning

판교데싸 2021. 4. 14. 14:17

BERT : Pre-training of Deep Bidirectional Trnasformers for Language Understanding

Bert의 구조

 

 

  1. 구글에서 개발한 NLP(자연어처리) pre-trained model 로 모든 자연어 처리 분야에서 좋은 성능을 내는 범용 language model

 

   2.  데이터가 충분히 많다면 Embedding이 성능에 큰 영향을 미치는데- 임베딩이 잘 된 단어들이 훈련과정에서 당연히 좋은 성능을 낼 수 밖에없음

   3. 데이터의 전처리 임베딩을 Word2Vec, GloVe, Fasttext 방식을 많이 사용했지만, 요즘의 고성능을 내는 대부분의 모델에서 BERT를 많이 사용

 4.기존 단방향성 모델은 성능 향상, 문맥 파악에 한계점이 존재했었고, 이를 해결하기 위해 Bert는 양방향성을 띄는 모델로 개발 됨 -> 문맥이 더욱 자연스럽게 파악

예를 들어 텍스트 분류 모델을 만든다고 하면

BERT를 사용하지 않은 일반 모델과정은,

: 분류를 원하는 데이터 -> LSTM, CNN 등의 머신러닝 모델 -> 분류

 

BERT를 사용한 모델링 과정,

: 관련 대량 코퍼스 -> BERT -> 분류를 원하는 데이터 -> LSTM, CNN 등의 머신러닝 모델 -> 분류
대량의 코퍼스를 Encoder가 임베딩하고(언어 모델링), 이를 전이하여 파인튜닝하고 Task를 수행합니다.(NLP Task)


간단히 설명하자면

대량 코퍼스로 BERT 모델을 적용하고, BERT모델 출력에 추가적인 모델(RNN, CNN 등의 머신러닝 모델)을 쌓아 원하는 Task를 수행하는 것으로 이 때 attention , lstm 등이 아닌 간단한 dnn 모델만 쌓아도 성능이 잘 나옴(Bert의 특장점)

 

 

Bert 의 내부 동작 과정

1. input : tokken embedding + segment embedding + position embedding

Bert의 내부 동작 과

 

 

  • Token Embedding

: Word Piece 임베딩 방식 사용, 각 Char(문자) 단위로 임베딩을 하고, 자주 등장하면서 가장 긴 길이의 sub-word를 하나의 단위로 만든다

자주 등장하지 않는 단어는 다시 sub-word로 만들고  이전에 자주 등장하지 않았던 단어를 모조리 'OOV'

(Out-Of-Vocabulary)처리하여 모델링의 성능을 저하했던 'OOV'문제도 해결 가능 

 

 

  • Segment Embedding

: Sentence Embedding, 토큰 시킨 단어들을 다시 하나의 문장으로 만드는 작업입니다. BERT에서는 두개의 문장을 구분자([SEP])를 넣어 구분하고 그 두 문장을 하나의 Segment로 지정하여 입력.

 BERT에서는 이 한 세그먼트를 512 sub-word 길이로 제한하는데, 한국어는 보통 20 sub-word가 한 문장을 이룬다고 하며 대부분의 문장은 60 sub-word가 넘지 않는다고 하니 BERT를 사용할 때, 하나의 세그먼트에 128로 제한하여도 충분히 학습이 가능

 

  • Position Embedding

: BERT의 저자는 이전에 Transformer 모델을 발표하였는데, Transformer란 CNN, RNN 과 같은 모델 대신 Self-Attention 이라는 모델을 사용하는 모델입니다. BERT는 Transformer의 인코더, 디코더 중 인코더만 사용

Transformer(Self-Attention) 참고글

Self Attention은 입력의 위치를 고려하지 않고 입력 토큰의 위치 정보를 고려합니다. 그래서 Transformer모델에서는 Sinusoid 함수를 이용하여 Positional encoding을 사용하고 BERT는 이를 따서 Position Encoding을 사용한다고 하는데 -> Position encoding은 Token 순대로 인코딩 하는 것을 뜻 함



BERT는 이미 총3.3억 단어(BookCorpus + Wikipedia Data)의 거대한 코퍼스를 정제하고, 임베딩하여 학습시킨 모델로 이를 스스로 라벨을 만들고 준지도학습을 수행


2. Pretraining

 

데이터들을 임베딩하여 훈련시킬 데이터를 모두 인코딩 하였으면, 사전훈련을 시킬 단계입니다.

기존의 방법들은 보통 문장을 왼쪽에서 오른쪽으로 학습하여 다음 단어를 예측하는 방식이거나,

예측할 단어의 좌우 문맥을 고려하여 예측하는 방식을 사용

하지만 BERT는 문장 표현을 학습하기 위해 두 가지 unsupervised 방법을 사용

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

위 두가지 방식을 사용



  • MLM(Masked Language Model)

MLM

문장에서 단어 중의 일부를 [Mask] 토큰으로 바꾼 뒤, 가려진 단어를 예측하도록 학습합니다. 이 과정에서 BERT는 문맥을 파악하는 능력을 기르게 됩니다.

ex) 나는 하늘이 예쁘다고 생각한다 -> 나는 하늘이 [Mask] 생각한다.
ex) 나는 하늘이 예쁘다고 생각한다 -> 나는 하늘이 흐리다고 생각한다.
ex) 나는 하늘이 예쁘다고 생각한다 -> 나는 하늘이 예쁘다고 생각한다.

추가적으로 더욱 다양한 표현을 학습할 수 있도록 80%는 [Mask] 토큰으로 바꾸어 학습하지만, 나머지 10%는 token을 random word로 바꾸고, 마지막 10%는 원본 word 그대로를 사용하게 됩니다.



  • NSP(Next Sentence Prediction)

NSP

다음 문장이 올바른 문장인지 맞추는 문제로 이 문제를 통해 두 문장 사이의 관계를 학습

문장 A와 B를 이어 붙이는데, B는 50% 확률로 관련 있는 문장(IsNext label) 또는 관련 없는 문장(NotNext label)을 사용
QA(Question Answering)나 NLI(Natural Language Inference) task의 성능 향상에 영향을 끼친다

 

이런 방식으로 학습된 BERT를 fine-tuning할 때는 (Classification task라면)Image task에서의 fine-tuning과 비슷하게 class label 개수만큼의 output을 가지는 Dense Layer를 붙여서 사용한다.




 

3.  Transfer Learning

학습된 언어모델을 전이학습시켜 실제 NLP Task를 수행하는 과정입니다.

실질적으로 성능이 관찰되는 부분이기도 하고  BERT등장 이전에는 내가 NER문제를 풀고 싶다 하면 이에 관한 알고리즘이나 언어모델을 만들고, QA문제를 풀고 싶다 하면 이에 관한 알고리즘이나 언어모델을 따로 만들어야 했는데

 BERT의 언어모델을 사용하여 전이학습시켜 원하는 Task를 수행해서 성능이 더 좋다는 것이 입증이 되었다.

 기존에 언어모델을 만드는 부분은 스스로 라벨링을 하는 준지도 학습이었지만

전이학습 부분은 라벨이 주어지는 지도학습 부분으로

전이학습(Transfer Learnin)은 BERT의 언어모델에 NLP Task를 위한 추가적인 모델을 쌓는 부분

 

 

Transfer Learnig Case (a)~(d)

 

 

 

○ BERT의 한계점

BERT는 일반 NLP모델에서 잘 작동하지만, Bio, Science, Finance 등 특정 분야의 언어모델에 사용하려면 잘 적용되지 않는다고 한다.

사용 단어들이 다르고 언어의 특성이 다르기 때문으로 특정 분야에 대해 BERT를 적용하려면 특정 분야의 특성을 수집할 수 있는 언어데이터들을 수집하고, 언어모델 학습을 추가적으로 진행해주어야 함

 

* Bert가 주로 사용 되는 예제

  1. Question and Answering
    - 주어진 질문에 적합하게 대답해야하는 매우 대표적인 문제
    - KoSQuAD, Visual QA etc.
  2. Machine Translation
    - 구글 번역기, 네이버 파파고.
  3. 문장 주제 찾기 또는 분류하기
    - 역시나 기존 NLP에서도 해결할 수 있는 문제는 당연히 해결 가능
  4. 사람처럼 대화하기
    - 이와 같은 주제에선 매우 강력함을 보여줍니다.

   5. 이외에도 직접 정의한 다양한 문제에도 적용 가능하나 물론 꼭 NLP task일 필요는 없음




 

Reference

반응형

'Deep Learning' 카테고리의 다른 글

강화학습 (Reinforcement Learning)  (0) 2022.05.13
Word2VeC (Cbow , Skip-gram)  (0) 2021.04.14
keras - Image generator  (0) 2020.11.27
전통 데이터마이닝 vs 딥러닝  (0) 2020.10.04
Hypothesis, Cost, Loss Function  (0) 2020.08.30
반응형