AI/NLP

[스터디] BERT(Bidirectional Encoder Representations from Transformers)

jihuSunbae 2024. 9. 19. 15:24
 
 

목차


    학습 목표

    - BERT 모델의 등장 배경과 특징에 대해서 안다. 

    INTRO

    • 파인튜닝을 위한 Pre-trained 모델이다. 
      • LLM 모델을 따로 학습하고, fine-tuning 을 모두 수행하면 어려움(e.g. 컴퓨터 리소스 부족, 시간이 오래 걸림, 성능 안나옴).. 
      • 따라서, 언어에 대한 학습이 기본으로 된 Pre-trained 모델을 많이 활용한다. 
      • BERT는 이러한 Pre-trained 모델의 대표
    • Bidirectional(양방향): 양방향 context를 활용하여 문서에 대한 이해를 높임 

    BERT의 핵심 구조, 인코더 

    : Transformer의 인코더 구조를 가져왔다. 

     

    [데이터 전처리]

    - 3가지 임베딩을 한다 : Token + Segment + Positional 

      1. Token Embedding: 각 단어 토큰 임베딩

      2. Segment Embedding(=Sentence Embedding): 문장 단위 임베딩 

      3. Positional embedding: 위치 (Self-attention 사용함)

    - 이후, 정규화 레이어와 Dropout 

     



     

     

    Token Embedding

    어떻게 토큰화할 것인가? 

    우리는 모르는 단어를 쪼개서 잘 이해할 수 있다.

    예를 들어, 축구공이라는 단어는 "축구"+"공"으로 쪼개면 축구할 때 쓰는 공이구나!라고 컴퓨터가 잘 이해할 수 있는 것이다. 

    따라서, 단어보다 작은 단위로 쪼개는 워드피스(Word Piece) 방식을 사용한다. 

     

     

    워드피스(Word Piece) 

    : 익숙한 단어들은 그대로 1개의 토큰으로 처리하되, 낯선 단어들은 단어보다 더 작은 단위인 서브워드(Subword)로 쪼갠다. 

    -> 위의 방식대로 하나의 단어 집합 꾸러미를 만드는 것이다!

    준비물 : 이미 훈련 데이터로부터 만들어진 단어 집합

    1. 토큰이 단어 집합에 존재한다. => 해당 토큰을 분리하지 않는다.

    2. 토큰이 단어 집합에 존재하지 않는다.
    => 해당 토큰을 서브워드로 분리한다.
    => 해당 토큰의 첫번째 서브워드를 제외한 나머지 서브워드들은 앞에 "##" 를 붙인 것을 토큰으로 한다.

     

     

     

     

    워드 피스를 구현하는 다양한 패키지가 있는데, 

    google이 만든 SentencePiece, huggingface, opennmt 등이 있다. 

     

     

     

     

     

     

     

     

     

     

     

     

     

    Segment Embedding(=Sentence Embedding): 문장 단위 임베딩  

    더보기

    토큰 단위로 나눈 뒤, 각 토큰이 어느 문장인지 임베딩을 해준다. 

     

    예) 

     

    • 문장 1: "고양이는 귀여워요."
    • 문장 2: "강아지는 활발해요."

    -> Segment Embedding 후 

     

     

    • 고양이는(0) 귀여워요(0).
    • 강아지는(1) 활발해요(1).

     

    Q. 왜 하는가? 

    A. 여러 문장을 구분하고 문장들 사이의 관계를 이해하는 데 도움을 주기 위함 

     

     

     

     

    학습 과정 

    Overview: Pretraining 과 Finetuning 하는 방식으로 구성 

    1) Pretraining: Encoder가 입력 문장을 임베딩 하여 학습하는 과정 

    2) Fine-tuning: 특정 자연어 처리 Task를 수행하는 과정 (QA, 추론 등의 다양한 태스크에 적합하다.)

     

    1) Pretraining: Encoder가 입력 문장을 임베딩 하여 학습하는 과정 

    언어의 특성을 더 잘 학습할 수 있도록 다음과 같이 2가지 특징을 가진다.

    - Masked Language Model(MLM)

    - Next Sentence Prediction(NSP)

     

    Masked Language Model(MLM)

    : 말그대로 입력 문장의 일부를 masking(안보이게)하고, 이를 예측하게 하는 모델이다. 

    https://www.sbert.net/examples/unsupervised_learning/MLM/README.html

     

     

     

    이때 BERT에서는 입력 토큰의 15%를 무작위로 마스킹한다. 

    마스킹 하는 방법은 총 3가지 가 있음. 

    • 이때 15% 중 80%는 masking 
      • e.g. I love the way you are -> I love the [MASK] you are
    • 이때 15% 중 10%는 랜덤 마스킹 
      • e.g. I love the way you are -> I love the [dog] you are
    • 이때 15%의 10%는 그대로 둔다 

    => 왜 이렇게 하는 걸까? 마스크에 과도하게 학습하지 않기 위해서

     

    마스킹을 통해 학습에서 양방향성을 확보한다. 

    - 양방향성이란, 앞에서부터 뒤로, 그리고 뒤에서부터 앞으로 동시에 문맥을 분석한다는 뜻이다. 

    e.g. 

    "나는 [MASK]를 먹었다."에서 **"[MASK]"**가 "사과"인지를 예측하려면, **"나는"**과 **"먹었다"**라는 문맥을 동시에 고려

     

     

     

    다음 문장 예측(Next Sentence Prediction, NSP)

    두 문장이 이어지는지를 학습하게 한다.

    - 이어지는 문장 set과 이어지지 않는 문장 set을 학습하게 하는 방식 

    - 왜? 다양한 NLP task에 적합한 범용 모델을 만들기 위해서 

        e.g. QA나 추론 문제의 경우 두 문장의 관계를 이해하는 것이 중요 

     

     

     

    예를 들어, 

    <이어지는 문장 Set>

    Sentence A : 나는 배가 고팠다. 
    Sentence B : 왜냐하면 운동을 했기 때문이다. 

     

    <연관없는  문장 Set>

    Sentence A : 나는 배가 고팠다. 
    Sentence B : 운동하는 것은 즐겁다.


    Q&A 

    - 왜 Deep Bi-directional 모델인가? 

       - Elmo : (좌->우) + (좌<-우) 를 단순 concat 

       - BERT는 진정한 의미의 Bi-directional... 

    - GPT 모델과 차이는 뭘까? 

      - GPT: 디코더에만 GPT 사용 

     

     

     

     


    Reference

     

    https://wikidocs.net/115055

     

    17-02 버트(Bidirectional Encoder Representations from Transformers, BERT)

    * 트랜스포머 챕터에 대한 사전 이해가 필요합니다. ![](https://wikidocs.net/images/page/35594/BERT.PNG) BERT(Bidire…

    wikidocs.net

    https://wikidocs.net/208933

     

    06-1. BERT를 활용한 분류 입문

    ``` 06-1 작성자 : 지해인 ``` [TOC] 딥러닝(deep learning)은 컴퓨터에 대해 잘 알지 못하는 사람들도 한 번씩은 들어 봤을 만큼 핫한 주제이다.…

    wikidocs.net