BERT
는 2018년 구글이 개발한 자연어 처리 신경망 구조이다. 기존의 단방향 자연어 처리 모델들의 단점을 보완한 양방향 자연어 처리 모델이다. BERT
는 트랜스포머를 이용해 구현되었다.
여기서 기존의 단방향 자연어 처리 모델
들은 앞에서 뒤로 순서대로 읽을 수 밖에 없다는 문제점을 지니고 있다. 이러한 문제점 때문에 predict를 할 때 이전 토큰만 참조한다는 단점이 있다. 하지만 BERT
는 양방향 자연어 처리 모델
이다. 이러한 방법은 기존의 단방향 자연어 처리 모델의 문제점을 해결한 방식이다. 그렇기 때문에 BERT
는 SOTA 성능을 보였고 현재 가장 많이 사용하는 모델이다.
BERT Input
BERT에 들어가는 데이터의 형식은 아래와 같다.
기존의 단방향 자연어 처리 모델들과 똑같이 문장의 시작은 [CLS]
, 문장의 끝은 [SEP]
로 표시한다.
- Token Embedding
Word Piece 임베딩 방식을 사용, 실질적인 입력이 되는 워드 임베딩
- Position Embedding
위치 정보를 학습하기 위한 임베딩
- Segment Embedding
두 개의 문장을 구분하기 위한 임베딩
BERT
는 이러한 embedding 과정을 거쳐서 입력값을 넣어주고 연산이 되는 것이다.
Pre-training
BERT
는 MLM
과 NSP
라는 2가지의 기법을 사용해 Pre-training을 수행하게 된다.
MLM
기존의 Pre-train은 모델들을 단순하게 연결한 뒤 사용했다는 점에서 제대로된 양방향 자연어 처리를 하지못했다. 하지만 BERT
는 MLM
을 사용해 양방향 자연어 처리가 가능했다.
위의 사진에서 왼쪽그림은 BERT
로 양방향으로 자연어를 처리하는 모습을 볼 수 있다. 하지만 OpenAI GPT
모델은 한쪽 방향으로 자연어 처리를 하고 있다. 원래 양방향 자연어 처리 모델에서는 이전 Layer의 모든 Output에서 모든 Token에 대한 정보를 담게 되기 때문에 특정 Token을 Masking했다고 하더라도 다음 Layer에서는 자기 자신에 대한 정보를 간접적으로 참조할 수 있게된다는 문제점이있는데 이를 해결하기 위해서 BERT
는 Masking을 하되, 그 중 80%에 대해서만 실제 Maks Token으로 변경하고 10%에 대해서는 random한 다른 Token으로, 나머지 10%에 대해서는 변경을 하지 않음으로써 이를 해결했다.
NSP
위의 방법인 MLM
방법만으로 Pre-training을 하게 될 경우 token level의 정보만을 학습하기 때문에 NSP
기법을 통해 sentence level의 정보도 학습하게 한다. 두 문장이 서로 연결되는 문장인지를 isNext, NotNet의 Binary classification으로 해석하게 된다. 50%의 확률로 isNest, NotNext의 data를 생성한 뒤에 학습을 시키는데 이 때 위에서 언급한 [CLS]
Token이 사용된다.
BERT의 한계점
BERT
모델은 미리 방대한 양의 코퍼스를 이용해 학습을 시켜놓기 때문에 일반적인 NLP 모델에서는 잘 작동한다. 하지만 특정분야의 언어 모델에서는 성능이 좋지 않다고 한다. 그렇기 때문에 특정 분야에서 BERT
모델의 성능을 개선하기 위해선 그 분야에 맞는 언어데이터를 수집하고 학습시켜줘야 한다.