9. Contextual Embedding

Eunji·2025년 12월 11일

기존 단어 embedding의 한계

  • 다의어를 구분하지 못해 문맥이 달라도 같은 단어는 항상 동일한 벡터로 표현
  • 같은 "사과"라도 사죄, 과일을 구분할 수 없어 문맥 정보 필요

문맥을 고려한 embedding의 필요성

  • 문장 혹은 그 이상의 입력을 단위로 삼아 문맥에 따라 서로 다른 embedding을 만들어낼 수 있는 방식 요구
  • 대표적인 문맥 기반 embedding: ELMo, BERT

1. Contextual Embedding

1.1 ELMo

  • 정방향 RNN과 역방향 RNN(양방향 언어 모델)을 각각 학습한뒤 각 층의 은닉 상태를 합쳐 문맥 기반 embedding 생성
  • 입력을 문자 단위 CNN으로 처리하므로 학습 시 등장하지 않은 단어(OOV)에 대해서도 embedding 생성 가능
  • ELMo로부터 얻은 단어 벡터는 이후에는 기존 단어 embedding과 동일하게 downstream 모델의 입력으로 사용
  • downstream 모델을 학습할 때는 ELMo 파라미터는 고정하여 사전학습된 언어 모델로부터 실시간으로 embedding을 계산만 하도록 한다.
  • 이후 등장한 모델들은 embedding을 더 강하게 활용해 ELMo보다 성능이 좋은 접근으로 발전
    • E.g., Transformer
  • ELMo는 단어 단위 embedding과 문장 단위 embedding의 과도기적 형태, 후속 모델들에 비해 구조적으로 다소 제한적

1.2 BERT

  • Transformer Encoder 기반 양방향 표현 모델
    • 단일 모델 안에서 좌\rightarrow우, 우\rightarrow좌 문맥 정보 동시 학습
  • ELMo처럼 두 개의 단방향 모델을 합치는 방식이 아니라, 처음부터 완전한 양방향성을 가진 encoder 사용

학습에 쓰는 2가지 task

  1. Masked Language Modeling
    • 입력 문장에서 일부 토큰을 MASK로 가리고 주변 문맥을 이용해 가려진 단어를 맞히는 과제
  1. Next Sentence Prediction
    • 두 문장이 실제로 연속된 문장인지, 아니면 랜덤하게 짝지은 문장인지를 이진 분류하는 과제를 함께 학습

Pre-tranining & Fine-tuning

  • Pre-tranining: 대규모 말뭉치에 대해 MLM+NSP를 비지도/자가지도 방식으로 학습해 일반적인 언어 이해 능력을 가진 BERT 생성
  • Fine-tuning: 미리 학습된 BERT 위에 얇은 분류기 등 최소한의 파라미터를 얹고, 전체 모델을 downstream 작업에 맞게 소량의 라벨 데이터로 재학습

2. Pretrained Language Model

2.1 RNN

  • 시간 개념을 반영해 직전 은닉 상태 ht1h_{t-1}와 현재 입력 xtx_t를 함께 받아 새로운 은닉 상태 hth_t를 만드는 인공 신경망
  • 은닉 상태를 계속 업데이트하며 시퀀스 전체를 처리하므로, 일반적인 feed-forward 신경망과 달리 순차 데이터에 적합

Training Procedure

  • Forward: 각 시점마다 입력 xtx_t를 받아 은닉층과 활성화 함수를 거쳐 출력 yty_t 계산
  • Backward: 최종 출력에서 과거 시점들까지 역으로 기울기를 전파, BPTT로 학습

Gradient Vanishing

  • RNN은 매 시점마다 sigmoid나 tanh 같은 비선형을 통과하기 때문에 0~1 사이의 기울기연속적으로 곱해지면서 매우 작아질 수 있다.
  • BPTT로 먼 과거마다 역전파할 때 gradient가 0에 수렴해 버리면 가중치가 거의 업데이트되지 않아 장기 의존성을 학습하지 못하는 gradient vanishing 문제 발생

2.2 LSTM

  • RNN의 기울기 소실 문제를 줄이기 위해 제안된 구조, 은닉 상태 hth_t뿐 아니라 셀 상태 ctc_t를 두어 정보를 오래 보존
  • 셀 상태에는 어떤 정보를 기억/망각할지에 대한 판단 반영
    • Forget gate
    • Input gate
    • Ouput gate

1. Forget gate

  • 현재 입력 xtx_t와 이전 은닉 ht1h_{t-1}를 보고, 이전 셀 상태 ct1c_{t-1} 중 얼마나 유지할지(얼마나 버릴지) 결정

2. Input gate

  • 현재 시점의 입력과 이전 은닉 상태를 참고해 새로 들어온 정보 ct~\tilde{c_t}를 셀 상태에 얼마나 더할지 결정

3. Output gate

  • 업데이트된 셀 상태 ctc_t를 바탕으로 어떤 부분을 노출할지 결정하고, 그 결과로 새로운 은닉 상태 hth_t를 만들어 다음 time-step과 출력으로 전달

Update Procedure

  • 먼저 forget gate가 ct1c_{t-1}을 부분적으로 남기고, input gate가 새 후보 상태ct~\tilde{c_t}를 가중합해 셀 상태 갱신
  • 이후 출력 게이트가 ctc_t에 tanh를 적용한 값에 gate 값을 곱해 hth_t를 만들기 때문에 중요한 정보는 여러 time-step에 걸쳐 비교적 손실 없이 전달

2.3 GRU

  • LSTM보다 간소화된 형태, 별도의 셀 상태 없이 2개의 gate로 gradient vanishing problem을 해소하고자 시도
  • Reset gate, Update gate

1. Reset Gate

  • 이전 은닉 상태 hh와 현재 입력 xx를 고려하여 현재 입력을 나타내는 값을 은닉 상태에 얼마나 반영할지 결정

2. Update Gate

  • 은닉 상태 h와 입력값 x로부터 z값을 생성하고, z를 기준으로 reset gate로부터 반환된 값과 이전 은닉 상태 중 어디에 얼만큼의 가중치를 둘지 결정

RNN 기반 자연어 생성

  • RNN은 시퀀스를 한 토큰씩 입력받아 은닉 상태를 갱신하고 동시에 출력을 내므로 이 구조를 이용해 한 단어씩 문장 생성하는 데 사용
  • Encoder-Decoder 구조의 Seq2Seq 모델에서는 Encoder의 RNN이 입력 시퀀스 하나를 벡터 hh로 Encoding, Decoder의 RNN이 hh를 받아 EOS 토큰이 나올 때까지 단어를 순차적으로 생성

2.4 Pre-trained Language Model

Semi-supervise Sequence Learning

  • LSTM에 대량의 비라벨 텍스트로 학습한 뒤, 학습된 LSTM을 초기값으로 사용해 감성 분류 fine-tuning(이때는 라벨 사용)
  • 언어 모델은 이전 단어 \rightarrow 다음 단어 예측을 학습하므로 별도 레이블 없이도 거대한 텍스트 corpus로 학습할 수 있고, 사전 훈련된 가중치는 후속 태스크에서 성능 향상

ELMo

  • 대규모 텍스트 corpus로 LSTM 기반 언어 모델(정, 역방향)을 먼저 학습하고, 이 언어 모델의 은닉 상태를 embedding vector로 사용
  • ELMo embedding은 이후 다양한 NLP 태스크 모델의 입력으로 재사용, 고정 혹은 약간 조정된 embedding 위에서만 추가 학습
  • 정방향 언어 모델과 역방향 언어 모델 각각 별도로 학습한 뒤, 두 모델에서 나온 표현을 결합해 문맥을 반영한 단어 embedding 생성
  • 문맥에 따라 같은 표기의 단어라도 서로 다른 벡터가 되므로 Word2Vec, GloVe 같은 정적 embedding이 가지던 다이의 표현 한계 해결

Transformer

  • Transformer 언어 모델을 만든 뒤 분류 태스크에 fine-tuning하는 방식 사용
  • GPT-1
    • Transformer Decoder 12층을 쌓아 대규모 텍스트로 단방향 언어 모델을 학습하고 여러 태스크를 추가해 높은 성능을 보임
  • 최근 NLP의 큰 흐름은 "거대한 언어 모델을 비지도로 사전 훈련한 뒤, Fine-tuning하여 쓰는 것이다.
  • 2018년에는 양방향 정보를 학습하기 위해 Masked Language Model이 제안되었고, BERT가 그 대표로 입력 토큰 일부를 MASK로 가려 그 단어들을 맞히도록 학습한다.

단방향 vs. 양방향

  • 전통 언어 모델은 <SOS>에서 시작해 왼쪽 \rightarrow 오른쪽으로만 다음 단어를 예측하는 단방향 구조
    • 미래 단어 정보 활용 불가
  • 실제 언어의 문맥은 양방향이지만, "이전 단어로 다음 단어를 예측"해야 하는 언어 모델 특성 때문에 LSTM 하나로 완전한 양방향 생성을 구현하기 어렵다.

3. BERT

  • Bidirectional Encoder Representations from Transformers
  • Transformer Encoder 기반 Pre-trained Language Model
  • 위키피디아와 BooksCorpus 등 대규모 비라벨(약 33억 단어)를 대상으로 MLP + NSP task로 사전 훈련

Fine-tuning

  • BERT는 거대한 비지도 사전 훈련 후, 특정 작업에 맞게 얕은 분류기층을 얹어 전체 파라미터를 조금 더 학습시키는 fine-tuning 방식으로 높은 성능 얻음
  • 이러한 아이디어는 ELMo, GPT-1 등 다른 사전 훈련 언어 모델에도 적용

3.1 Architecture

  • Transformer의 Encoder를 쌓아올린 구조
    • Base 버전: 총 12개
    • Large 버전: 총 24개
      • d_model의 크기나 Self-Attention Heads 수가 더 큼
  • Transforemr Encoder의 층 수를 L, d_model의 크기를 D, Self-Attention의 head 수를 A라고 하였을 때 각각의 크기
    • BERT-Base: L = 12, D = 768, A = 12: 110M개의 파라미터
    • BERT-Large: L = 24, D = 1024, A = 16: 340M개의 파라미터
  • BERT-base는 GPT-1과 Hyperparameter 동일
    • BERT-Large는 BERT의 최대 성능을 보여주는 모델

3.2 Contextual Embedding

Input Embedding

  • BERT도 다른 딥러닝 모델처럼 먼저 토큰을 embedding 층에 통과시켜 각 단어를 고정 차원(d_model=768)의 벡터로 바꾼 후 encoder에 입력
  • "CLS I love you"의 네 토큰은 모두 768차원 벡터로 변환되어 BERT 12-layer Encoder 입력 시퀀스

Output Embedding

  • 12개의 Transformer encoder layer를 거친 뒤, 각 위치에서 다시 768차원 벡터가 출력되는데 이때는 문장 전체 문맥을 고려한 출력 임베딩
  • "love"의 최종 벡터는 자기 자신 뿐 아니라 CLS, I, you의 정보를 모두 반영한 표현, 마찬가지로 CLS와 다른 단어들도 전부 문맥 정보를 담음

Self-Attention

  • 각 Encoder layer 내부에서 multi-head self attention이 동작하여 한 단어의 표현을 만들 때 모든 단어를 가중합
  • 첫 번째 층의 출력 임베딩은 두 번째 층의 입력이 되고 이런 연산이 12층 반복되면서 점점 더 고수준의 문맥 정보를 반영한 임베딩으로 발전

4. WordPiece

BERT's subword tokenizer: WordPiece

  • Byte Pair Encoding과 유사한 알고리즘
  • 글자로부터 subword들을 병합해가는 방식으로 최종 단어 집합을 만듦

Subword Tokenizer

  • 기본적으로 자주 등장하는 단어는 그대로 단어 집합에 추가
  • 자주 등장하지 않는 단어의 경우에는 더 작은 단위인 subword로 분리되어 단어 집합에 추가
  • 이 단어 집합을 기반으로 토큰화 수행
  1. transformers 패키지의 BertTokenizer 사용
  1. Here is the sentence I want embeddings for라는 문장을 BERT의 tokenizer가 토큰화하는 과정
    • embeddings라는 단어는 단어 집합에 존재하지 않으므로 em, ##bed, ##ding, #s로 분리
  1. BERT의 단어 집합에 특정 단어가 있는지 조회
    • tokenizer.vocab['단어']
    • 단어 'here'을 조회
      • 정수 2182로 mapping
  1. 단어 embeddigs 조회
    • 해당 단어가 존재하지 않는다는 의미에서 KeyError
    • 단어 em, ##bed, ##ing, ##s는 모두 단어 집합에 존재

Special Token

profile
갓생호소인

0개의 댓글