[BERT] BERT 기본개념
What is BERT?
Bidirectional Encoder Representations from Transformers
Bidirection: 양방향
Encoder: 입력값을 숫자의 형태로 바꾸는 모듈을 의미
BERT: 문맥을 양방향으로 이해해서 숫자의 형태로 바꿔주는 딥러닝 모델이다.
인코더 디코더를 가진다.
질적으로 좋은 데이터를 선별하는 능력도 중요하다.
Transformer
Encoder 순서
-
데이터 입력
-
포지션 벡터와 결합
-
Attention 벡터는 fc로 전송되는데 6번 반복해서 진행된다.
-
최종 출력 값은 트렌스포머 Decoder의 입력값으로 사용된다.
기억해야할 점: 인코더는 모든 토큰을 한 방에 계산한다. 왼쪽에서 오른쪽으로 하나씩 읽어나가는 과정이 없다.
Decoder 순서
-
Encoder에서 온 입력값과. 최초 start 스페셜 토큰으로 왼쪽부터 오른쪽으로 출력값을 생성한다.
-
Decoder도 Attention 벡터와 fc 결합을 6번 진행한다.
-
End 스페셜 토큰이 출력될 때까지 반복한다.
Is BERT a language model?
양방향으로 학습되는 언어모델이다!
Traditinal LM (GPT) vs bidirectinal LM (BERT)
GPT(단방향): 현재까지 나온 단어로 다음 단어 예측
- how are you를 입력 받으면 다음 단어인 doing을 예측한다.
BERT(양방향): 가려진 단어 예측
- how are /// doing을 입력 받으면 you을 예측한다.
BERT의 특징 (Pretraining)
사람이 레이블링할 필요가 없다. 랜덤하게 단어를 가리고, 가려진 단어를 학습하기 때문이다.
두 줄 이상 입력 받을 수 있다.
-
ex) 질의응답 - 질문과 정답이 들어있는 문맥을 받아서 정답을 출력한다.
-
토큰 간의 상관관계뿐만 아니라, 문장 간의 상관관계도 학습할 수 있다.
Token
-
CLS: 문장 전체가 하나의 벡터로 표현되는 스페셜 토큰이며, 분류에 사용된다.
-
SEP: 두 문장을 구별하는 토큰이다.
Embeddings
-
Token Embeddings
- WordPiece Embedding을 이용해서 문장을 토큰 단위로 분리한다. 따라서 흔치 않은 단어들에 대한 예측 성능이 향상된다.
-
Segment Embeddings
- 문장을 구별한다. 두 개의 문장이 있을 때, 각 문장에 각각 다른 숫자를 더해줌으로써 두 개의 문장이 있다는 것을 알려준다.
-
Position Embeddings
-
토큰들의 상대적인 위치 정보를 알려준다.
-
sin, cos 함수를 이용한다.
-
이유
-
입력값에 따라 출력값이 달라진다. => 상대적인 위치 파악 가능하다.
-
출력값이 규칙적으로 증가, 감소한다. => 상대적인 위치 쉽게 계산 가능하다.
-
무한대 길이의 입력값도 상대적인 위치로 출력할 수 있다.
-
-
-
BERT vs GPT
BERT
양방향 언어 모델이다.
BERT는 Fine Tuning을 하기 위해서 만들어졌다 (loves fine tuning)
Pretraining & Fine Training으로 나뉜다.
모델이 상대적으로 작다.
- 각각의 다른 자연어처리를 위해서 따로 fine tuning이 필요하다!
학습시키는데 상대적으로 적은 시간이 들지만 fine tuning을 개발자가 해야하고 fine tuning에 별도의 시간과 돈이 든다.
선행학습된 BERT는 인터넷에서 쉽게 다운받을 수 있다.
- 개발자가 해야할 일: 다운받은 pre 모델을 어떻게 fine tuning 할까 생각해야한다!
GPT
단방향 언어 모델이다.
GPT는 Fine Tuning이 필요 없도록 만들어졌다. (hates fine tunig)
모델이 상대적으로 크다.
- 선행 학습된 모델 그 자체로 여러가지 목적의 자연어 처리 가능하다. 그렇기 때문에 모델이 굉장히 크다
한 번 학습시키는데 어마한 시간과 돈이 든다.
BERT Fine Tuning examples
(a) 두 문장의 관계를 예측하는 모델
- 두 문장을 SEP 토큰으로 구분해 입력해서 출력값의 첫번째인 CLS토큰이 두 문장의 관계를 나타내도록 학습시킨다.
(b) 문장을 분류하는 모델
- 문장 1개를 입력 받고 CLS 토큰이 분류값 중 하나가 되도록 학습시킨다.
(c) 질의 및 응답에 사용되는 모델
-
입력값으로 질문과 정답이 포함된 장문을 SEP 토큰으로 구분해서 준다.
-
BERT의 출력값으로 마지막 토큰들이 장문 속에 위치한 정답의 시작 인덱스와 마지막 인덱스를 출력하도록 학습시킨다.
(d) 문장 속 단어를 태깅하는 모델
- 각각의 입력 토큰에 대한 출력값이 있다. 각각의 출력값이 원하는 태깅으로 출력되도록 학습시킨다.
BERT Performance
BERT의 성능은 상당히 우수하다.
GPT1과 동일한 사이즈의 BERT GPT1보다 높은 성능을 보이며, 더 큰 모델은 더 높은 성능을 보인다.
허민석 강사님의 BERT 강의를 듣고 정리했습니다.
https://www.youtube.com/watch?v=30SvdoA6ApE
댓글남기기