2019년에 나온 구글 BERT 모델에 대해서 알아봅시다.
BERT는 모든 층에서 좌우 문맥을 동시에 고려한 비지도 학습을 통해 깊이 있는 양방향 표현을 pre- train 하도록 설계 되었다.
그 결과, 사전 학습된 BERT 모델은 하나의 추가 출력 층만으로 fine-tuned 되며 여러 task에서 SOTA 모델을 달성함.
BERT 논문에서는 사전 학습된 언어 표현을 다운스트림 작업에 적용하는 두 가지 기존 전략(feature-based , fine-tuning)을 설명하고, 기존 방법의 한계점을 지적한다.
특히, 기존 언어 모델들이 단방향이어서 문맥을 양방향으로 통합하지 못하는 점을 문제로 삼았다.
BERT는 모든 층에서 좌우 문맥을 동시에 고려하는 양방향 트랜스포머 아키텍처를 사용하여 이 문제를 해결하고, 질문 응답 및 언어 추론과 같은 다양한 작업에서 Sota를 달성할 수 있음을 보여줌
GPT를 엄청디스함..
BERT의 핵심 아이디어는 "깊이 있는 양방향 문맥(deep bidirectional context)"의 중요성을 강조하는 거임. 기존의 단방향 모델들(예: 좌에서 우로 읽는 모델들)은 문맥을 충분히 이해하지 못한다는 단점을 가지고 있다고 주장.
BERT는 이러한 단방향성의 한계를 극복하기 위해 "Masked Language Model(MLM)"을 사전 학습에 사용한다.
MLM의 동작 방식:
1. 토큰 마스킹: 입력 문장에서 임의의 몇몇 단어를 마스킹(masking)한다, 즉 가려서 숨겨버림.
기존 단방향 모델과 달리, MLM은 문장의 앞뒤 모든 문맥을 사용해 예측을 하기 때문에 문맥을 더 깊이 이해할 수 있음. 이렇게 하면 모델이 더 정확한 언어 이해를 할 수 있게 된다고 주장.
BERT는 MLM 외에도 "Next Sentence Prediction"이라는 추가 작업을 사용한다. 이는 두 문장이 주어졌을 때, 두 번째 문장이 첫 번째 문장의 다음에 오는 문장인지 아닌지를 맞추는 작업인데, 이를 통해 문장 간의 관계를 더 잘 이해할 수 있게 됨.
사전학습된 단어 임베딩의 중요함을 강조하고
word embedding을 통한 접근 방식은 자연스레 sentence embedding 혹은 paragraph embedding으로 이어졌다는 것을 언급함
ELMo와 그 뒤의 모델들은 left-to-right와 right-to-left 언어 모델을 통해 context-sensitive feature들을 뽑아 내서 각 represevtation을 concat함 (shallow-bidirectional)
이런 방식으로 ELMO는 웬만한 NLP benchmark들을 다 때려잡으면서 SOTA로 등극 =>BUT 마음에 안듬 deep하게 bidirectional하지 않다.
contextual token representation을 만들어내는 (문장 혹은 문서) 디코더가 pre-training되고, supervised downstream task에 맞춰 fine-tuning 되는게 최근에 연구됨 (GPT-1)
지도 학습 데이터로부터의 전이 학습을 하는 방식도 최근에 각광 받고있음 ( 자연어처리 , CV )
BERT도 마찬가지로 pre-training 방식과 fine-tuning 방식이 있음
bidirectional Transformer encoder 임
BERT base 와 BERT large 두가지가 있음
BERT base의 경우 L = 12, H = 768, A = 12로 총 110M개의(약 1억1천만) 파라미터를 사용하였고 =>GPT와 유사함
BERT large의 경우 L = 24, H = 1024, A = 16으로 총 340M개의(약 3억4천만) 파라미터를 사용하였다.
BERT가 다양한 down-stream tasks에 잘 적용되기 위해선 input representation이 애매하지 않아야 함
모든 시퀀스의 첫 번째 토큰은 항상 특별한 분류 토큰([CLS])
이 토큰에 해당하는 최종 히든 상태는 분류 작업의 시퀀스 전체를 대표하는 표현으로 사용됨.
Input 시퀀스는 문장의 한 쌍으로 구성된다.
문장 쌍의 각 문장들은 [SEP] 토큰으로 분리된다. 또한 각 문장이 A문장인지, B문장인지 구분하기 위한 임베딩(Segment Embeddings) 역시 진행한다.
Input representation은 이러한 대응되는 토큰(segment + token + position)을 전부 합치면 됨
BERT는 두가지 unsupervised task를 사용해서
pre-train을 시킴
직관적으로 우리는 양방향 모델이 기존의 것들보다 더 강력하다고 믿을 수도 있지만 양방향 학습을 할때는 단어가 간접적으로 자기 자신을 볼 수 있게 되어서 목표단어를 쉽게 예측할 수 있게됨 (그냥 단서가 많아진다는 말임)
그래서 MLM이라는 기법을 도입한다.
마스크된 토큰에 해당하는 최종 hidden-vector => FC layer=>softmax=>CE-Loss
이를 통해 양방향으로의 학습이 가능해지지만, fine-tuning 중에 [MASK] 토큰이 나타나지 않기 때문에(빈칸 단어 예측은 그냥 빈칸 단어로 주어지기 때문), 사전 훈련과 fine-tuning 사이에 불일치를 만들어내는 단점이 있다.
그래서 아래와 같은 추가적인 작업을 해준다.
mismatch를 줄 일 수 있게
WordPiece 토큰의 15%를 무작위로 마킹하며 마킹한 것들의
많은 NLP의 downstream task들은 두 문장 사이의 관계를 이해하는 것이 중요하다.
이를 학습하기 위해 BERT는 NSP를 사용함.
pretraining-example을 구성할 때, 실제로 다음에 오는 문장 50% (labeled as IsNext) , 무작위로 선택된 문장 50% (labeled as NotNext)으로 dataset을 구성함
[SEP]을 통해서 문장을 구분하고
NSP 예측 헤드는 [CLS]토큰의 최종 히든벡터 C를 추출해서 이진분류 작업을 수행함
Data
BooksCorpus(8억 단어)와 영어 위키피디아(25억 단어)를 사용
BERT는 텍스트 쌍을 연결(concatenate)하여 self-attention으로 인코딩함으로써 bidirectional cross attention을 포함한다.
[CLS] 문장1 [SEP] 문장2 [SEP]
형식으로 입력.[CLS]
토큰의 히든 스테이트를 통해 두 문장이 같은 의미인지 여부를 예측하는 이진 분류.[CLS] 이론 [SEP] 가설 [SEP]
형식으로 입력.[CLS]
토큰의 히든 스테이트를 사용하여 함의 관계(엔테일먼트, 중립, 모순)를 예측하는 다중 클래스 분류.[CLS] 문맥 [SEP] 질문 [SEP]
형식으로 입력.Tagging:
[CLS] 문장 [SEP]
형식으로 입력.Text Pair Classification:
[CLS] 문장1 [SEP] 문장2 [SEP]
형식으로 입력.[CLS]
토큰의 히든 스테이트를 사용하여 두 문장 간의 관계를 예측하는 분류 작업.fine-tuning작업은 짧게 끝난다고 한다
TPU에서 1시간
GPU에서 몇시간