버트(BERT) 모델 이해하기

버트(BERT) 모델 이해하기

버트란

개요

  • 버트란 다양한 자연어 처리 태스크를 푸는데 활용될 수 있는 딥러닝 모델이다.

특징

  • 어탠션 기반인 트랜스포머의 인코더를 쌓아 만들었다.
  • (Pre-train) 큰 코퍼스를 비지도학습을 통해 대량의 머신을 사용해서 학습시킨다. (Fine-Tune) 해당 모델을 가져와 다양한 자연어 태스크들에 맞게 모델을 살짝씩 수정해 지도학습을 수행한다.
  • 문장(문서)을 이루는 각 단어가 들어가 학습된 임베딩을 반환하는 구조이다.
  • CLS, SEP 토큰.
    • CLS(Classification) 토큰은 분류 문제를 풀기위한 추가한 요소로 출력 CLS 임베딩에 FCN + Softmax 레이어를 붙여 N클래서 분류문제를 풀 수 있다.
    • SEP(Seperation) 토큰은 여러 문장을 입력할 때 각 문장을 구분하기 위해서 넣은 요소이다. 예를 들어 2개 문장을 입력할 때 두 문장이 연속된 문장인지 맞추는 이진분류 문제를 풀 때 사용한다.
  • Positional, Segment Embedding Layer
    • 각 단어의 순서를 의미하는 Position Embedding과 여러 문장의 구분을 나타내는 Segment Embedding을 랜덤 임베딩으로 학습시켜 더해서 사용한다.

학습 방법

  • 비지도 학습(Pre-train)
    • Masked learning : 모든 단어중 약 15%를 랜덤으로 뽑아 학습 대상으로 삼는다. 15%가 모두 Maske 토큰이 되는 것은 아니다.
      • 12%의 입력단어는 <Mask> 토큰이 되어 해당 단어의 출력임베딩을 사용해 해당 정답 단어를 맞추는 방식으로 학습된다.
      • 1.5% 입력단어는 변동없이 입력되어 실제 정답을 맞추도록 한다.
      • 나머지 1.5% 입력단어는 이상한 단어로 치환되어 이 경우에도 정답을 맞추도록 한다.
      • 위 과정을 통해 <Mask> 토큰에 대한 학습단계에서 오버피팅을 막고 테스트에서도 잘 동작하는 모델을 만들 수 있다.
      • 이 학습 방식을 통해 버트는 각 단어사이의 관계를 이해하게 된다.
    • NSP(Next Sentence Prediction)
      • 두 개의 문장을 뽑고 <Sep>, Segment Embedding을 활용해 모델의 입력을 만들어준다. 그 후 두 문장이 연결되어 있는지 문맥관계를 맞추는 이진 분류문제를 학습시킨다.
      • 이 과정을 통해 버트는 QA(Question Answering)와 같은 문장간의 관계를 이해하는 문제를 풀 수 있는 토대를 갖추게 된다.
  • 지도학습(Fine-Tune)
    • 각자 원하는 태스크에 맞추어 학습을 시킬 수 있다.

댓글

이 블로그의 인기 게시물

[Linux, Unix] export, echo 명령어 알아보기

뼈속 깊이 이해하기 :: 1. 허프만 코딩

IEEE 754 부동 소수점 반올림과 근사