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

재윤·2022년 3월 13일
0

논문 리뷰

목록 보기
1/2

Pre-traind language model

대부분의 NLP 모델들은 입력으로 들어온 문장들의 각 단어들을 임베딩을 통해 벡터들로 변환하는 작업부터 시작할 것이다. 처음부터 학습을 시키던지 혹은 사전에 학습된 임베딩 벡터를 가져와 사용하던지 말이다. 하지만 두가지 방법 모두 한 단어가 하나의 벡터값으로 매핑(mapping)된다는 단점이 있다. 즉 다의어나 동음이의어를 구분하지 못한다는 단점이 있다. 예를 들어 '배'이라는 단어가 먹는 배인지, 교통수단의 배인지 내 몸에있는 배인지는 인간은 문맥을 통해 구분할 수 있지만, 기계는 단순히 '밤'이라는 단어를 하나의 벡터값으로 만들어버리기 때문에 의미를 구분할 수 없게된다. 이 한계는 사전 훈련된 언어 모델을 사용함으로써 극복할 수 있게 된다. 방대한 unlabeled data로 사전 훈련된 언어 모델을 가지고 레이블이 있는 다른 Task에서 fine tuning을 통해 BERT는 좋은 선능을 얻을 수 있었다.

Bidirectional Representation

앞서 발표된 ELMO, GPT모델 둘다 unidirectional representation을 사용한다. BERT 논문의 저자는 unidirectional representation이 pretrained representaion 능력을 제한한다고 주장했다. 단순하게 생각해보면 단방향으로 얻는 정보보다 양방향으로 얻는 정보가 훨씬 좋을것이다. 하지만 이 방식은 자칫하면 예측해야하는 단어를 역방향 언어 모델을 통해 cheating 해버린 셈이기에 모델들을 일반적으로 양방향으로 구현하지 않았다.

기존의 모델들은 이전단어들로부터 다음단어를 예측하는 특성으로 인해 양방향 모델 구현이 불가하므로 새로운 구조의 언어모델이 등장했는데, 이것이 마스크드 언어 모델이다.

Masked Language Model

BERT의 사전훈련방법은 크게 두가지로 나뉘는데 Masked Language Model(마스크드 언어모델)과 Next sentence prediction(다음 문장 예측)이다.

마스크드 언어 모델은 입력 단어 집합의 15%를 랜덤으로 마스킹한다. 마스킹할 단어들을 [MASK]라는 토큰으로 변환한 후 마스킹된 단어들을 예측하도록 한다. 더 정확히 하자면 15% 단어들중 80%만 [MASK]토큰으로 변환하고, 10%는 랜덤으로 다른단어로 변경, 나머지 10%는 그대로 둔다고 한다. [MASK]토큰이 fine tuning에서 나타나지 않으므로 괴리감(?)이 생긴다. 이를 완화하기위해 전체를 [MASK]토큰으로 변환하지 않는다고 한다.(근데 결국 80%만 마스크토큰으로 변환하더라도 파인튜닝시에 마스크토큰이 아직 남아있다는거 아닌가..?)

문장이 주어졌을때 랜덤으로 빈칸을 뚫어놓고 알맞은 단어를 예측하게 하는것이다. 문맥에 기반해 [MASK]토큰을 예측하게 함으로써 모델이 문맥파악능력도 학습할 수 있게 되었다.

Next Sentence Prediction

말 그래도 다음문장 예측이라는 뜻으로 두개의 문장을 입력으로 준 뒤에 두번째 문장이 첫번째 문장과 이어지는 문장인지 아닌지를 맞추는 방식으로 훈련이 진행된다.
BERT의 입력으로 넣을때는 [SEP]이라는 토큰으로 문장을 구분하는데, 첫번째, 두번째 문장이 끝나는 위치에 [SEP]토큰을 삽입한다. 그리고 맨 앞에 [CLS]라는 토큰도 넣어주는데 BERT가 분류문제를 풀기위해 추가된 토큰이다. 추가로 MLM(Masked Language Model)과 NSP(Next Sentence Prediction)는 따로 학습하는 것이 아니라 동시에 이뤄진다. [CLS]토큰의 출력층은 이어지는 문장인지 여부를 조사하고, 나머지 마스킹된 토큰들의 출력층은 원래단어가 무엇인지 예측하게 된다.

BERT

BERT에는 두가지 단계가 있다. Pre-trainingFine-Tuning이다.
Pre-training 단계에서는 모델은 unlabeled data를 이용해 학습을 진행하고, Fine-tuning 단계에서는 BERT는 사전학습단계에서 학습된 parameter들로 초기화되고 모든 parameter들은 downstream tasks로부터 labeled data를 이용하여 fine-tuned된다.

위 그림은 Question-Answering에 대한 예시이다. 출력 레이어 외에도 Pre-training과 Fine-Tuning에 동일한 아키텍처가 사용된다. 동일한 사전학습된 모델 파라미터로 초기화되고 Fine-Tuning 과정에서, 모든 파라미터들이 튜닝된다. [CLS], [SEP]은 NSP에서 설명했던것 그대로이다.

Model Architecture

BERT는 'Attention is All you need'논문에서 발표한 Transformer구조를 중심적으로 이용하였다. self-attention layer를 여러개 사용해 문장의 token간의 의미관계를 잘 추출할 수 있다. 그리고 Transformer의 self-attention덕에 bidirectional representaion이 가능해진다.
BERTsms Transformer구조를 사용하긴 하는데 Encoder부분만 사용하여 학습을 진행하였다. 기존모델은 대부분 Encoder-Decoder구조로 이뤄져있고, GPT또한 Decoder를 이용해 text generation문제를 해결하는 모델이다.(GPT는 나중에 더 봐봐야겠다.) 이와 다르게 BERT는 Decoder를 사용하지 않는다.

추가로 저자는 BERT모델을 두종류 만들었는데 내용은 아래 표와 같다.

' 'BERT BASEBERT LARGE
Number of Layers1224
Hidden Size7681024
Number of Self-Attention Head1216
Total Parameters110M340M

Input Representation

제일 먼저 해야할 데이터 처리다. 기존 Transformer의 input 구조를 변형하여 사용한다.

위 그림처럼 3가지 방법을 사용해 문장을 표현한다.

  1. Token Embeddings
    Tokenization은 Wordpiece방법을 사용한다. 의미가 살아있는 한까지 쪼개서 모델에게 더 명확하게 전달할 수 있고, 흔치 않은 단어들에 대한 예측 성능도 같이 향상된다. 예를 들어 eating 같은 단어도 eat + ##ing처럼 구분하여 의미를 명확히 해주고, googling같은 단어들도 사전엔 없지만 봤을만한 단어들로 입력되기 때문에 어느정도는 그 뜻을 짐작할 수 있게 해준다.
    [CLS], [SEP]토큰을 활용하여 문장을 구분한다. 추가로 [CLS]토큰은 분류문제가 아니면 무시된다. 나머지는 위에서 언급한 그대로이다.

  2. Segment Embeddings
    두개의 문장을 구분하기 위한 임베딩이다. 종류는 문장의 최대 개수인 2개가 될것이다.
    만약 영화리뷰 혹은 긍정/부정 분류같은 Task에서는 한개의 문서에 대해서만 분류가 이뤄지기때문에 segment Embeddings이 의미가 무색해진다. 위 그림에서는 EAE_A임베딩만 될것이다.

  3. Position Embeddings
    위치정보를 학습하기 위한 임베딩이다. Transformer의 positional Encoding기법이랑은 차이가 있다.(포지셔널 인코딩은 사인 함수와 코사인 함수를 사용하여 위치에 따라 다른 값을 가지는 행렬을 만들어 이를 단어 벡터들과 더하는 방법) Token Embeddings값에 position Embedding을 이용해 위치정보를 더해주어야 한다.

    n번째 단어 임베딩벡터 + n번 포지션 임베딩 벡터(n<512, BERT의 문장 최대길이는 512)

Fine-Tuning


사전학습된 BERT에 풀고자하는 Task를 위해 그에 맞는 데이터를 추가로 학습시키는 단계인 Fine-Tuning이다. 논문에서는 위 그림처럼 크게 4가지로 분류하고있는데 하나씩 살펴보자.

a) Sentence Pair Classification(or Regression)

대표적인 Task로 자연어 추론 문제(Natural language inference)가 있다. 이 문제는 두문장이 서로 어떤 관계에 있는지를 분류하는것이다.(모순, 중립, ...)
입력이 1개가 아니므로 [SEP]토큰 사용 및 Segment Embedding까지 활용하여 문서를 구분한다.

b) Single Sentence Classification

하나의 문서에 대한 텍스트 분류 유형이다. 문서의 시작에 [[CLS]](#Next Sentence Prediction) 토큰을 입력한다. Fine-Tuning단계에서도 [CLS]토큰의 출력층에 Fully-connected layer를 추가해 분류에 대한 예측을 한다.

c) Question Answering

텍스트를 쌍으로 입력받는 Task중에 가장 대표적인 Task일 것이다. 이 태스크의 대표적인 데이터셋으로 SQuAD(Stanford Question Answering Dataset) v1.1이라고한다. 질문(question)과 본문(paragraph)을 입력받았을 때, 본문의 일부분을 추출해 질문에 답변하는 형태로 문제를 해결한다고 한다. 더 정확히는 BERT출력의 마지막 토큰이 본문속 정답의 시작,끝 인덱스를 출력하도록 학습을 시키는 것이다.

d) Single Sentence Tagging

문장의 각 단어의 품사를 태깅하는 POS작업이나 개체를 태깅하는 개체명 인식 작업 등이 있다. 출력층에서 입력의 각 토큰 위치에 Fully-connected layer를 추가해 예측을 한다고 한다.

Experiments

모든 결과를 요약해서 보면 좋겠지만 목적은 논문의 요지와 NLP에서의 핵심 기법을 공부하는데 의의가 있으므로 실험결과는 임팩트 있는거만 정리함.

1. GLUE datasets(Single Sentence Classification 문제)

  • 모든 Task에 대해서 SOTA를 달성했다.
  • 데이터가 상대적으로 적어도 Fine-Tuning시에 좋은 성능을 냈다.
  • large모델이 base모델보다 더 좋은성능을 보여줬다.(모델크기에 따른 성능차이?)

2. SQuAD v1.1(Question Answering 문제)

  • GLUE와는 다른 입력형태인 문제이다.
  • 역시나 SOTA를 달성했다.

이외 나머지 Task에서도 SOTA를 달성했다.(ㄷㄷ)

Ablation Studies

중요한 요소라고 설명했던 부분을을 하나씩 제거하며 요소들의 중요함을 파악해보는것을 말한다.

Pre-train Task

No NSP: MLM은 사용하지만, 다음 문장 예측 (NSP)를 없앤 모델
LTR & No NSP : MLM 대신 Left-to-Right (LTR) 을 사용하고, NSP도 없앤 모델. GPT모델과 완전히 동일하지만, 더 많은 트레이닝 데이터를 사용함

  • No NSP의 경우에는 NLI계열의 task에서 성능이 많이 하락하게 되는데, 이는 NSP가 문장간의 논리적인 구조 파악에 중요한 역할을 한다는 것을 알 수 있다.
  • MLM 대신 LTR(Left To Right)을 쓰게되면 성능은 더 떨어진다.

Effect of Model Size

  • 모델이 커질수록, 정확도가 상승하는 것을 확인할 수 있다.
  • 특히 BERT는, downstream task를 수행하는 dataset의 크기가 작아도 pre-training 덕분에 model의 크기가 클 수록 정확도는 상승함을 볼 수 있습니다.

Effect of Number of Training Steps

Q1. fine-tuning 단계에서 높은 정확도를 얻으려면, pre-training 단계에서 많은 training step이 필요합니까?
A : 그렇습니다. 0.5M step에 비해 1M step때 accuracy가 거의 1.0% 상승함을 볼 수 있습니다.

Q2. MLM으로 학습하면 15%의 단어만 맞추는 것으로 학습을 진행하기 때문에, LTR보다 수렴속도가 훨씬 느리지않습니까?
A : 수렴속도가 조금 느린 것은 사실이지만, LTR보다 거의 즉시 정확도 측면에서 더 뛰어난 성능을 보인다.

마무리

Attention is all you need 논문을 처음봤을 때, 그리고 Transformer라는 개념을 처음 맞닥뜨렸을 때 인공지능 분야를 처음 공부하면서 이해도 제대로 하지 못한채로 머리에 일단 넣기 바빴는데 이 논문을 보게 되면서 Transformer개념을 다시 공부하면서 읽느라 시간이 꽤 걸렸던 것 같았다. Bidirectional Representation개념이 되게 와닿았다. RNN을 공부하면서 문장흐름대로 분석하면서 모델이 더 정확히 인식하겠구나.. 아이디어 좋네. 라는 생각을 하다가 양방향에서 분석하는걸 보고 '생각해보니까 그렇네..?'라는 생각이 절로 들었다. 매번 생각하는거지만 의문을 가지고 공부하는 마인드가 되게 중요하다는걸 또 알게 되었다.

profile
Naver Boostcamp AI Tech 3기🎈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ㅤㅤ⠀⠀ㅤㅤㅤㅤㅤㅤㅤㅤ2022 데이터분석 청년수련생

0개의 댓글