BERT
Bidirectional Encoder Representations from Transformer
- 트랜스 포머의 인코더를 양방향(마스킹)으로 사용한 모델
Task1 . Masked language model (MLM):
임의의 순서의 해당하는 위치를 마스킹[Mask]을 해놓고 마스킹된 부분을 예측하도록 하는 모델
선행하는 단어와 후행하는 단어를 모두 사용하여 예측하겠다는 것(양방향이라고 할 수 있다.)
Task2 . Next Sentence Prediction (NSP):
특정의 두 쌍의 문장이 들어왔을 때
두 번째 문장이 첫 번째 문장과 의미가 이어지는 가
(두 번째 문장이 첫 번째 문장 다음에 등장했던 문장인가)를 판단하는 Task
판단은 input 으로 넣었던 copus를 기준으로 함.
* 챗봇에 Multi-turn 구현에 사용하면 좋을 것 같다.
BERT는 언어모델 중 하나로 Pre-train 만 수행한다.
BERT의 아웃풋 도출 이후에 사용자가 필요한 Layer를 쌓아서(Fine-Tuning) 여러 가지 자연어 처리 Task를 수행할 수 있다.
SQuAD , NER , MNLI 등등...
BERT : Model Architecture
BERT - Base | BERT - Large | |
히든 레이어 수(Number of layers) | 12 | 24 |
히든 레이어 노드 수(Hidden size) | 768 | 1,024 |
멀티 해드 어텐션 수 (Number of self attention heads) |
12 | 16 |
학습데이터 수(Total parameters) | 110M(1억 천만개) | 340M(3억 4천만개) |
(1). 두 개의 Masked Sentence을 Input으로 받는다. *랜덤으로 지정된 단어가 [Mask] 토큰으로 변환된 문장들
(2). 스페셜 토큰을 넣어준다.
[CLS] : 모든 문장의 시작을 알리는 토큰
[SEP] : 두 문장을 구분해주기 위한 토큰
(3). NSP -> 스페셜 토큰인 [CLS] 토큰의 최종 hidden state vector
- 단순 분류모델로 사용할 경우 다른 vector를 사용하지 않고 NSP 값만 사용해서 분류함.
- Next Sentence Prediction 예측 결과(뒤에 자세한 설명)
(4). NSP 를 제외한 나머지는 각각 N번째 토큰의 hidden state vector 임
*이 vector 들은 Masking 된 단어들을 예측할 때 사용됨.
BERT : Input/Output Representations
버트의 Input은 한 문장(single sentence)일수도 있고 한 쌍(pair of sentence) 일 수도 있다.
: 어떤 Task 인지에 따라 다르다. ( 두 쌍이 필수는 아님 )
버트의 Input은 pre-train 이후에 자연어 처리 Task 를 유연하게 처리하기 위해 특별한 방법을 사용한다.
버트의 input은 3가지 임베딩 벡터로 표현이 된다.
(1). 토큰 임베딩 : WordPiece 로 토크나이즈 된 임베딩 (총 30,000개의 토큰 = vocabulary size)
(2). 세그먼트 임베딩 : 서로 다른 문장을 나눠주는 임베딩 [SEP]을 기준으로 함.
*하나의 문장을 사용한 Task의 경우 세그먼트 임베딩은 다 0으로 사용한다.
(3). 포지션 임베딩 : 각각의 포지션에 대한 정보(트렌스 포머와 비슷)
BERT : Pre-training
버트의 학습방법
Task1. Masked Language Model(MLM)
- 전체 시퀀스의 15%가 랜덤 하게 [MASK] 토큰으로 변환함.
- 위 예시에서 나온 마스크 된 W4 단어를 주위 단어를 통해 예측함
- 예측값 W4'를 실제 W4가 되도록 학습함.
* 마스킹 기법은 Pre-train 단계에서만 일어남 fine-tuning 단계에서는 일어나지 않음
이럴 경우 Pre-training 과 Fine-tuning 간에 Mismatch 될 수 있다.(Mask 기법의 단점)
그래서 본 BERT 논문은 Mask 비율을 적절하게 조합하여 이 문제를 해결했다.
80% 는 진짜 마스킹을 진행함.
10% 는 랜덤 단어를 넣어서 진행함.
10% 는 마스킹을 진행하지 않음.
8:1:1 비율이 가장 성능이 높았다고함.
Task2. Next Sentence Prediction (NSP)
: 다음 문장을 예측하는 테스크에서 사용됨 ( QA , NLI )
QA , NLI 문제는 두 문장 사이의 관계를 이해해야지 해결할 수 있는 문제임.
이전에 쓰였던 문장 단위의 언어 모델(ELMO , GPT)은 두 문장사이 관계를 이해할 수 없음
학습 방법 ( Binarized next sentence prediction )
데이터 분할
Copus에서 50%는 실제 이어지는 문장 쌍을 사용함(IsNext) : True
Copus에서 나머지 50%는 랜덤 문장 쌍을 사용함(NotNext) : False
학습 결과 : True / False (문장이 이어지는 문장이다 / 아니다 )
BERT : Fine-tuning
Pre-training 된 BERT모델 이후에 Fine-tuning을 통해 여러 Task를 해결할 수 있다.
*BERT 모델 제일 윗단에 하나의 레이어만 쌓아도 됨.
* 앞서 언급한 대로 반드시 두 문장을 넣어야 하는 것은 아니다.
문장 분류 모델의 경우는 두 문장을 넣을 필요가 없음
이제야 내가 노래 가사 긍/부정 모델을 학습시킬 때 왜 세그먼트 인풋을 전부 0으로 고정했는지 이해가 되었다.
BERT를 처음 알게 되었을 때가 3달 전이였는데
구현까지 했었지만 내부구조에 대해서 잘 알지 못했고(선 구현 후 리뷰 ㅋㅋ)
내부구조를 한 번에 이해하긴 어려웠지만 계속해서 보니까 그나마 조금 이해가 되는듯하다.
코드를 하나씩 뜯어보면서 더 자세히 알아봐야겠다.
참고 영상 : https://www.youtube.com/watch?v=Yk1tV_cXMMU (고려대학교 산업경영공학과 강필성 교수님 강의)
'Machine learning > NLP' 카테고리의 다른 글
[전처리]. 한국어 존댓말과 반말을 구별하는 방법(feat. komoran) (0) | 2021.10.14 |
---|---|
[NLP] . 자연어처리 프로젝트 파일 구조 ( 인공지능 디자인 패턴 ) (0) | 2021.09.05 |
[NLP] . OOV 를 해결하는 방법 - 1. BPE(Byte Pair Encoding) (1) | 2021.08.22 |
[NLP] Transformer : Masked Multi-Head Attention - part3 (0) | 2021.08.21 |
[NLP] Transformer : Self-Attention ( Multi-head-Attention ) - part2 (0) | 2021.08.19 |