article thumbnail image
Published 2022. 11. 4. 15:49

1. BERT

BERT 논문과 여러 자료를 종합하여 정리

 

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

 

1.1. BERT 란?

BERT : Bidirectional Encoder Representations from Transformers

  • 사전 훈련 언어모델
  • 트랜스포머를 이용하여 구현되고, 위키피디아(25억 단어)와 BooksCorpus(8억 단어)와 같은 대용량의 레이블 없는 텍스트 데이터로 사전 훈련된 언어 모델
  • 이를 토대로 문서 분류, 질의 응답, 번역, 감성 분석 등의 작업이 가능하다

 

GPT와 차이?

  • undirectional vs bidirectional
    • GPT 모델은 원본 Transformer의 decorder layer를 사용하여 각 토큰이 텍스트의 이전 단어에서 생성되는 autoregressive task 수행
    • BERT 모델은 GPT와 같은 접근 방식을 사용
    • 대신, BERT는 bidirectional transformer(mask가 없는 원본 Tansformer의 encoder layer)를 사용하여 모델이 관심 단어 전후의 context를 가질 수 있도록 함
  • GPT와는 달리 새로운 네트워크를 붙이지 않고 fine-tunning 만을 진행함
  • Masked Language Model(MLM) & Next sentence prediction
    • Next sentence prediction
      • 문장간 관계를 알아내기 위한 task, 두 문장이 실제 corpus에서 이어져 있는지 아닌지 확인
      • 50%는 실제 이어져 있는 문장

BERT 논문 그림.

 

인코더 블록은 BERT에서 사용, 디코더 블록은 GPT에서 사용. fine-tuning approach

ELMo는 독립적으로 훈련된 LSTM의 연결을 사용하여 downstream 작업을 위한 기능을 생성. feature-based approach

 

  • GPT-1은 트랜스포머의 디코더를 이전 단어들로부터 다음 단어를 예측하는 방식으로 단방향 언어 모델
    • input text의 다음 단어와 이전 단어와의 연결이 없음
  • BERT는 양방향인 encoder-transformer architecture를 사용하기 때문에 input text에서 다음 모델을 예측하도록 모델을 훈련
  • ELMo는 정방향 LSTM과 역방향 LSTM을 각각 훈련시키는 방식으로 양방향 언어 모델

 

1.2. BERT 구조

  • BERT-Base : L=12, H=768, A=12 : 110M개의 파라미터
  • BERT-Large : L=24, H=1024, A=16 : 340M개의 파라미터

(L : layer 수, H : 은닉층 차원 수, A : self-attention head 수)

 

1.2.1. BERT의 input representation

BERT input representation. The input embeddings are the sum of the token embeddings, the segmentation embeddings and the position embeddings

 

BERT Input : Token Embedding + Segment Embedding + Position Embedding

 

1.2.2. Token Embedding

  • 실질적인 입력이 되는 워드 임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개
  • WordPiece embdding 방식 사용
 
WordPiece embedding

BERT의 서브워드 토크나이저

  • WordPiece 토크나이저 = BPE(Byte Pair Encoding)의 유사 알고리즘
  • Embedding
    • 신경망이 이해할 수 있는 벡터로 변환하는 것
    • 단어를 기준으로 => 워드 임베딩
    • 글자를 기준으로 => 캐릭터 임베딩
  • 서브워드 토크나이저
    • 자주 등장하는 단어는 그대로 단어 집합에 추가하지만, 자주 등장하지 않는 단어는 더 작은 단위인 서브워드로 분리되어 서브워드들이 단어 집합에 추가
    • 단어 집합이 만들어지고 나면 이 단어 집합을 기반으로 토큰화 수행
  • 입력 임베딩으로 [CLS] 토큰을 받음
  • BERT-Base의 경우 12 Layer를 거쳐 768차원 벡터를 출력하게 됨 (출력 임베딩)

 

1.2.3. Segment Embedding

  • 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개
  • Sentence Embedding
  • 토큰화 시킨 단어들을 다시 하나의 문장으로 만드는 작업
  • [CLS] 토큰은 classification task할 때 token sequence 결합의 의미를 갖게 되고,
    1. 문장 구분을 위해 문장의 끝에 [SEP] 토큰을 붙여 분리를 하게 됨
    2. 해당 토큰이 문장 A 또는 문장 B에 속하는지 여부를 나타내는 학습된 embedding을 갖게 됨
    첫번째 문장에는 Sentence 0 임베딩, 두번째 문장에는 Sentence 1 임베딩을 더해주는 방식
  • 두번째 문장에는 텍스트를 입력받을 수도 있고 문서를 입력받을 수도 있음
  • 분류 작업이 아니라면 이 토큰 무시

 

1.2.4. Position Embedding

  • 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 길이인 512개
  • Self-Attention을 이용해 토큰의 순서를 인코딩
  • Transformer의 encoder와 decoder 중 encoder부분만 사용
  • Positional Embedding
    • 사인 함수와 코사인 함수를 사용하여 위치에 따라 다른 값을 가지는 행렬을 만들어 이를 단어 벡터들과 더하는 방법
  • BERT에서는 Positional Embedding과 유사하지만 위치정보를 사인 함수와 코사인 함수가 아닌 학습을 통해서 얻는 Position Embedding 사용
  • BERT는 한 segment를 512 sub-word 길이로 제한
 
Position Embedding

WordPiece Embedding을 수행 한 후 위치 정보를 위한 임베딩 층을 하나 더 추가함

 

1.3. BERT의 Pre-training

  1. 마스크드 언어 모델 (Masked Language Model, MLM)
  2. 다음 문장 예측 (Next sentence prediction, NSP)

 

1.3.1. task #1. Masked Language Model (MLM)

사전 훈련을 위해서 인공 신경망의 입력으로 들어가는 입력 텍스트의 15%의 단어를 랜덤으로 마스킹(Masking) ([MASK] 토큰 생성됨)

 

이를 Transformer 구조에 넣어 주변 단어 맥락을 학습하고 마스킹된 토큰을 예측

 

이를 통해 양방향 pre-train 모델을 얻을 수 있지만 미세 조정 중에는 [MASK] 토큰이 나타나지 않아 사전 학습 단계와 파인 튜닝 단계 사이에 mismatch가 발생할 수 있음

 

이를 완화하기 위해 랜덤으로 15%단어들을 선택하는 과정에서

 

  1. 80%는 [MASK] 토큰으로 변경
  2. 10%는 랜덤으로 단어가 변경됨
  3. 10%는 단어들을 동일하게 둔다

 

 

최종 은닉 벡터 마스크 토큰은 출력 softmax에 공급

 

1.3.2. task #2. Next Sentence Prediction (NSP)

QA(질문 응답), NLI(자연어 추론) task에서 두 문장이 주어졌을 때, 두 문장의 순서를 예측하는 방식

 

사전 학습에서 문장 A와 B를 선택할 때 B의 반(50%)은 실제 이어지는 두 개의 문장으로, 나머지 반은 랜덤으로 이어붙인 두 개의 문장을 주고 훈련시킴

 

[SEP] 토큰으로 구분된 문장을 [CLS] 토큰의 위치의 출력층에서 이어지는 문장인지 아닌지 이진 분류 문제를 풀도록 함

 

masked lanuage model과 next sentence prediction은 따로 학습하는 것이 아닌 loss를 합하여 학습이 동시에 이루어짐

 

 

1.4. BERT의 Fine-tunning

a. 텍스트 쌍에 대한 분류 혹은 회귀 문제

  • 텍스트 쌍을 입력받아 자연어 추론(Natural lanuage inference)
    • 두 문장이 주어졌을 때, 하나의 문장이 다른 문장과 논리적으로 어떤 관계에 있는지 분류하는 것
    • 모순 관계(contradiction), 함의 관계(entailment), 중립 관계(neutral)

 

b. 하나의 텍스트에 대한 텍스트 분류 유형

  • 영화 리뷰 감성 분류, 뉴스 분류 등과 같은 Classification Task
  • 문서 시작에 [CLS] 토큰을 입력하고 그 위치의 출력층에서 Dense Layer(밀집층) 또는 fully-connected Layer를 추가해서 분류에 대한 예측을 진행

 

c. 질의 응답 (Question Answering)

  • 질문 텍스트와 본문 텍스트라는 두 개의 텍스트의 쌍을 입력
  • 대표적인 데이터셋 : SQuAD
  • 질문과 본문을 입력 받고 -> 본문의 일부분을 추출해서 질문에 답변

 

d. 하나의 텍스트에 대한 태깅 작업

  • 품사 태깅 작업과 개체명 인식 작업
  • 출력층에서 입력 테스트의 각 토큰의 위치에 Dense Layer를 사용해 분류에 대한 예측을 함

 

1.5. etc

  • 훈련 데이터는 위키피디아(25억 단어)와 BooksCorpus(8억 단어) ≈ 33억 단어
  • WordPiece 토크나이저로 토큰화를 수행 후 15% 비율에 대해서 마스크드 언어 모델 학습
  • 두 문장 Sentence A와 B의 합한 길이. 즉, 최대 입력의 길이는 512로 제한
  • 100만 step 훈련 ≈ (총 합 33억 단어 코퍼스에 대해 40 에포크 학습)
  • 옵티마이저 : 아담(Adam)
  • 학습률(learning rate) : 10−4
  • 가중치 감소(Weight Decay) : L2 정규화로 0.01 적용
  • 드롭 아웃 : 모든 레이어에 대해서 0.1 적용
  • 활성화 함수 : relu 함수가 아닌 gelu 함수
  • 배치 크기(Batch size) : 256

 

참고

https://wikidocs.net/115055

 

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

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

wikidocs.net

https://medium.com/@shauryagoel/bert-f6d23b06069f

 

BERT

We will discuss BERT in this article.

medium.com

복사했습니다!