Study/자연언어처리 NLP

Encoder Model (BERT)

김 도경 2025. 1. 17. 10:40
Transfer Learning
  • 출현 배경
    - 딥러닝의 발전
       - 단어 임베딩 (Word2vec, GloVe)를 통해 단어를 벡터로 표현하여 컴퓨터가 자연어를 이해할 수 있도록 만듦
       - 딥러닝 모델 (CNN, RNN, LSTM)들을 통해 자연어를 처리할 수 있는 기술이 ༀ진적으로 성장

    - 산업에서의 신경망 적용 : 구글 신경망 기계 번역 (Google Neural Machine Translation, GNMT)
       - 기존 통계 기반 번역기는 구문을 단위로 번역하여 긴 문장을 번역할 때 어려움이 있었음
       - 전체 문장을 하나의 번역 단위로 간주해 한 번에 번역하는 신경망 기반 기술 적용
       - 번역 오류가 55%에서 85%가량으로 현저히 감소
       - 한국어-영어 번역 이용량이 두 달 만에 50% 증가

    - 단어 임베딩의 한계 : 언어의 모호성
       - 기존 단어 임베딩 방식의 단어 벡터의 질이 떨어짐
       - 단어가 어디에 나타나는지에 상관없이 동일한 벡터를 할당 받음
       - 한번에 여러 의미를 가지는 다의어에 대해 풍부한 의미를 가지지 못함
       - 문맥으로부터 단어의 의미를 파악할 수 있도록 단어 벡터가 생성되어야 함

    - 대용량 학습 데이터의 필요
       - 현실적인 task를 풀 수 있는 모델을 학습시킬 만한 많은 데이터를 확보해야 함
       - 코퍼스 양이 너무 적은 상황에서 딥러닝 모델을 학습하여 텍스트 분류나 질의 응답과 같은 실세계의 task를 풀기에는 한계가 있음
       - 모델의 성능을 향상시키기 위해선 모델을 학습시키기 위한 대용량 학습 데이터가 필요함

    - CV 분야에서의 발전
       - ImageNet 영상 데이터 베이스를 기반으로 한 대회에서 AlexNet이 큰 성능 차이로 우승
       - AlexNet 등장 후, CV 분야에서는 AlexNet에 대한 연구가 늘어남
       - 2014년, 학습된 AlexNet이 여러 task에서 도움이 된다는 것을 보임

    - Transfer Learning
       - 특정 도메인 task로부터 학습된 모델을 비슷한 도메인 task 수행에 재사용하는 기법

    - Transfer Learning in CV
       - ImageNet과 같은 많은 양의 이미지 데이터로부터 모델 사전 학습 수행
       - 대량의 이미지 데이터로부터 학습된 이미지에 대한 일반적인 특징 정보 획득
       - 미리 학습된 파라미터를 이미지 분류, 객체 인식과 같이 풀고자 하는 task에 사용되는 모델에 적용하여 학습된 정보를 전이시킴

    - Transfer Learning in NLP
       - 대량의 코퍼스를 활용하여 특정 방식으로 모델을 미리 훈련시킴
       - 언어의 전반적인 특징 정보를 학습한 사전 학습 모델 생성
       - 사전 학습된 모델을 문서 분류, 대화 처리 등과 같은 다양한 task에 활용

  • Pre-training & Fine-tuning
    - Transfer Learning 과정
      - Pre-training
        - Downstream task에 대해 fine-tuning을 하기 위해 필요한 모델 파라미터를 초기화 하는 작업
        - 많은 양의 코퍼스에 기반하여 특정 학습 방식으로 모델을 훈련
     
      - Fine-tuning
         - 여러 downstream task에 맞추어 pre-training 단계에서 학습된 파라미터를 조໿씩 조정

    - Transfer Learning의 효율성
        - Pre-training 과정을 통해 풍부하고 유용한 지식들을 습득할 수 있음
        - Pre-training 시 사용되는 학습 데이터에는 레이블링 되지 않은 코퍼스가 사용되기 때문에, 학습 데이터를 제한없이 확보할 수 있음
        - Downstream task에 대해서 더 빠르게 모델 학습이 수렴하여 효율적인 학습 시간을 확보할 수 있음

  • ELMo
    - 언어 모델 기반으로 문맥 정보를 반영한 단어 임베딩하는 모델!
    - 문장 전체를 보고 단어 임베딩 생성
    - 대용량 데이터로 언어 모델을 pre-training 수행
    - 사전 훈련된 언어 모델을 fine-tuning 하여 다양한 task에 적용
    - 지금은 쓰이지 않지만, 대표적인 모델

    - 모델 구조
        - 2개의 층으로 이루어진 순방향 LSTM 뿐만 아니라 역방향 LSTM을 독립적으로 학습하는 언어 모델
        - 위쪽에 위치한 LSTM은 단어의 문맥 정보를 학습
        - 아래쪽에 위치한 LSTM은 단어의 문법 정보를 학습

    - Pre-training
        - 다음 단어를 예측하는 언어 모델링 작업을 통해 언어 모델 사전 학습 진행
        - 문장 전체가 입력으로 들어오고 순차적으로 다음 단어를 예측하며 단어 임베딩을 학습
        - 단어의 순서에 따라 임베딩 값이 달라지기 때문에 문맥 정보가 반영된 임베딩 생성

    - Contextualized Word Embedding
        - 순방향 LSTM의 은닉 벡터 및 토큰 임베딩 벡터와 역방향 LSTM의 은닉 벡터 및 토큰 임베딩 벡터를 이어 붙임
        - 이어 붙인 벡터에 가중치를 각각 곱한 후 더하여 최종적인 ELMo 임베딩 벡터 생성

    - Fine-tuning
        - 각각의 가중치는 수행하고자 하는 task에 따라 달라짐
        - 단어의 문맥적인 의미가 중요한 task에서는 상위 LSTM에 높은 가중치 반영
        - 구조 관계가 중요한 task에서는 하위 LSTM에 높은 가중치 반영

    - 기존 단어 임베딩과 ELMo
        - GloVe의 경우 단어 “play”와 유사도가 높은 단어들은 주로 게임, 스포츠와 관련된 단어들임
        - ELMo(biLM)는 하나의 단어가 다양한 의미를 갖는 다의어 정보 표현 가능 
        - ELMo의 경우 문장의 문맥과 문법 상황에 따라 관련있는 단어들과 높은 유사도를 가짐
        - 다양한 task에서 ELMo 임베딩을 활용했을 때 더 높은 성능을 보임
        - 학습 데이터가 적은 경우, ELMo 임베딩을 활용했을 때 큰 성능 차이를 보임

    - Pretrained Language Model (PLM)
        - 현재 대부분의 NLP task는 전이 학습을 통해 PLM을 활용하는 것이 대세로 자리 잡음
        - 전이 학습 방법론이 소개된 이후로는 언어 모델 연구가 새로운 방향으로 전환

    - 보완해야 할 점
        - 독립적으로 학습된 순방향과 역방향 신경망의 은닉 벡터를 단순히 이어 붙이기만 함
        - 언어 모델이 각각 한쪽 방향만으로 학습이 진행 됨
        - 양방향 단어의 정보를 동시에 학습하지 않아 제대로 된 문맥 정보를 반영할 수 없음
BERT (Bidirectional Encoder Representations from Transformers)

- Transformer의 인코더만으로 구성된 언어 모델
- 문장에서 무작위로 단어를 마스킹하여 양방향 단어 정보를 동시에 학습한 문맥 정보를 습득
- 위키피디아 (25억 단어)와 BooksCorpus (8억 단어)와 같은 레이블이 없는 텍스트 데이터로 pre-training
- 사전 학습된 언어 모델을 downstream task에 적용하기 위해 fine-tuning 수행

 

  • ELMo와 BERT
    - ELMo의 경우 임베딩을 위해 각각의 독립적인 LSTM 모델을 사용
    - BERT는 하나의 모델이 여러 방향으로 읽어 나가며 임베딩 수행
    - BERT는 Transformer 모델을 통해 단어와 단어 사이의 관계를 파악

  • 두 가지 버전
    - BERT-Base : 1.1억 개의 학습 파라미터에 해당하는 12개의 양방향 self-attention head가 있는 12개의 인코더
    - BERT-Large : 3.4억 개의 학습 파라미터에 해당하는 16개의 양방향 self-attention head가 있는 24개의 인코더

  • 모델 구조
    - 12개의 encoder layer로 구성되어 있고, BERT에 classifier layer를 추가하여 downstream task를 수행
    - 각 encoder layer은 768개의 hidden unit, 12개의 attention head를 가짐
    - Classifier는 feed-forward neural network와 softmax로 구성됨
    - 단어의 시퀀스를 입력으로 받아 각 encoder layer마다 self-attention을 적용하고 feed-forward network를 통과시키는 과정을 반복해서 수행
    - 인코딩 된 결과를 각 task마다 적용되는 classifier에 입력으로 이용

  • 입력 임베딩
    [CLS] 토큰
    - 모든 문장의 첫 번째 토큰은 항상 [CLS] 토큰
    - Encoder layer를 거치면서 나머지 토큰들의 정보를 바탕으로 임베딩 생성
    - 마지막 인코더 층을 통과한 후 [CLS] 토큰 출력 값을 통해 classification task 수행
    [SEP] 토큰
    - 서로 다른 문장으로 구별하기 위한 토큰
    - Question answering task 같은 경우 질문과 답이 이어지는 문장이 아닌 서로 독립적인 문장으로 인식할 수 있게 해줌
    - [SEP] 토큰 뿐만 아니라, segment embedding 층을 통해 추가적인 정보 주입

    Position Embedding
    - 단어의 위치 정보를 학습하기 위한 임베딩
    - 문장의 최대 길이는 512로 고정
    - 특정 값으로 초기화 된 이후에 학습 되어짐

  • Pretraining
    Masked Language Model
    - 문장 내에서 무작위로 마스킹 된 토큰을 예측하며 언어 모델을 학습
    - 언어 모델을 아무런 제약조건 없이 양방향으로 학습하게 되면, 예측하려는 단어가 multi-layer 구조를 통해 간접적으로 참조되어 올바른 학습이 이뤄지지 않음
    - 각 문장마다 토큰의 15% 중 80%는 [MASK]로 치환, 10%는 무작위로 다른 단어로 치환, 나머지 10%는 그대로 둠
    - 마스킹 된 토큰의 마지막 은닉 벡터를 softmax 함수에 통과시켜 단어를 예측
    - 이를 통해, 양방향 단어 정보를 동시에 학습 가능

    Next Sentence Prediction
    - 두 개의 문장을 제공하고 문장들이 이어지는 문장인지 예측하며 언어 모델 학습
    - 두 문장이 서로 어떤 관계에 있는지를 추론하는 질의 응답, 자연어 추론 등의 문제를 잘 풀어낼 수 있음
    - 문장과 문장 사이에 [SEP] 토큰을 삽입하여 각 문장이 다른 문장임을 알려줌
    - 가장 앞에 있는 [CLS] 토큰으로 두 문장이 이어지는 문장인지 예측
    - 50%는 실제 문장, 50%는 데이터에서 임의로 선택한 문장으로 구성

  • Fine-tuning
    - 사전 학습된 BERT 모델을 이용해 수행하고자 하는 task를 추가적으로 학습
    - 복잡한 모델이 아닌 단순한 심층 신경망을 추가하여 downstream task 진행

  • Single Sentence Classification
    - 문장을 입력으로 넣고 문장의 종류를 분류하는 문제
    - [CLS] 토큰 벡터를 classifier layer에 입력하여 예측
    - 대표적인 데이터셋: SST-2, CoLA 등

  • Sentence Pair Classification
    - 두 문장을 하나의 입력으로 넣고 두 문장 간의 관계를 구하는 문제
    - [CLS] 토큰 벡터를 classifier layer에 입력하여 예측
    - 대표적인 데이터셋: MNLI, QQP, QNLI, STS-B, MRPC, RTE, SWAG 등

  • Question Answering
    - 문단 내에서 원하는 정답 위치를 맞추는 문제
    - 문단의 단어 벡터를 classifier에 입력하여 Start, End 토큰 예측
    - 대표적인 데이터셋: SQuAD v1.1 등
  • Single Sentence Tagging
    - 입력 문장 토큰들의 개체명을 구하거나 품사를 구하는 문제
    - 단어 벡터를 classifier에 입력하여 단어에 올바른 태크 예측
    - 대표적인 데이터셋: CoNLL-2003 NER, SRL 등

  • BERT 단어 임베딩의 활용
    Feature Extraction
    - 사전 학습된 BERT를 task에 맞게 개발된 모델의 단어 임베딩으로 활용할 수도 있음
Tokenizer
  • Tokenization
    - 코퍼스나 입력으로 들어온 문장을 토큰으로 나누어 주는 작업
     -Tokenizer를 통해서 입력 문장을 토큰 단위로 쪼개고, 해당 토큰을 사전에 매칭하여 id로 입력
    - 토큰화의 품질이 pre-training 결과에 많은 영향을 미침

  • Subword Tokenizer : Subword Segmentation
    - 하나의 단어를 하위 단어로 분리해서 전처리하는 작업
    - OOV(Out-Of-Vocabulary) 문제나 희귀 단어, 신조어와 같은 문제를 완화시킬 수 있음

  • Byte Pair Encoding (BPE) 알고리즘
    - 연속적으로 가장 많이 등장한 글자의 쌍을 찾아서 하나의 글자로 병합
    - 글자 단위에서 점차적으로 단어 집합을 만들어 내는 Bottom up 방식

  • BPE 계산 과정
  • WordPiece Tokenizer
    - BERT에서 사용된 토크나이저
    - 코퍼스의 우도 (Likelihood)를 가장 높이는 쌍을 병합
    - 전체 글자 중 쌍으로 등장하는 빈도수가 높은 문자열을 우선 병합
    - 학습 데이터의 환경을 고려하여 어떤 문자열이 병합되는 것이 나은지 판단할 수 있음