BERT의 학습 단계
- 토크나이저 만들기
- 데이터셋 확보
- Next Sentence Prediction(NSP)
- Masking
이미 학습된 것들이 많이 있는데, 왜 이 과정을 학습해야할까요?
도메인 특화된 태스크의 경우, 도메인에 특화된 학습 데이터만 사용하는 것이 성능이 좋기 때문입니다.
왜 그럴까요?
언어 모델은 토큰의 주변에 어떤 토큰들이 등장하는지를 기본으로 그 토큰의 의미를 벡터화 합니다.
그렇기 때문에, 각 도메인마다 토큰의 의미는 변화 될 수 있습니다.
예를 들어, 일상 대화의 "애완동물"과 법률 도메인의 "애완동물"은 그 쓰임새가 좀 다를 것입니다.
일상 대화에서는 귀엽다, 키운다, 강아지, 이런 단어들과 같이 사용이 되겠지요.
하지만 법률 도메인에서는 주변 단어들이 매우 전문적이고 딱딱할 것입니다.
첫번째로, 관련된 도메인들의 자료를 모아 토크나이저를 학습시킵니다.
그 도메인에 자주등장하는 것들을 중심으로 단어 사전이 형성될 수 있습니다.
두번째는 학습을 위한 데이터 만들기 입니다.
여기에는 데이터셋과 데이터로더 두가지 측면이 있습니다.
데이터셋은 모델에게 주기위한 입력의 형태를 만드는 것입니다.
데이터 로더는 데이터셋이 만든 입력들을 모델에게 어떻게 줄 것인지를 결정합니다.
입력의 형태란 어떤 것일 까요?
BERT는 Mask된 토큰을 예측하는 것과, 두개의 문장이 주어졌을 때 이어지는 문장인지 아닌지를 예측하는 두가지 태스크로 학습이 된다고 학습했습니다.
전자가 Masking, 후자가 NSP라고 명명된 태스크들 입니다.
하지만, 과연이런 Masking 방식으로 정말 언어에 대한 의미를 학습할 수 있을까? 의심이 생길 수 있습니다.
간단하게 Masking에 대한 실험을 진행해 봅시다.
nlp_fill = pipeline('fill-mask', top_k=5, model=model, tokenizer=tokenizer)
nlp_fill('Barack Hussein Obama graduated from [MASK] University.')
nlp_fill('Obama was [MASK] of the United States.')
결과가 어떤가요?
오바마는 하버드 로 스쿨을 졸업했습니다.
그리고 가장 유사한 토큰으로 하버드를 예측해 주었습니다.
{'score': 0.07715228945016861, 'sequence': 'Barack Hussein Obama graduated from Harvard University.', 'token': 16744, 'token_str': 'Harvard'} |
그 다음 예측도 한번 살펴보겠습니다.
오바마는 미국의 대통령이죠! 어떤 토큰을 예측해 주었나요?
대통령입니다! 모델이 Masking 태스크를 통해 충분히 사전지식들을 학습할 수 있다는 것을 확인했습니다.
{'score': 0.48057445883750916, 'sequence': 'Obama was President of the United States.', 'token': 12811, 'token_str': 'President'} |
생각해보기
1) 도메인에 따라 토큰의 특성이 달라지는 예는 또 무엇이 있을까요?
2) Next Sentence Prediction은 BERT가 언어를 학습하는데 얼마나 도움이 되었을까요?
참고자료
comment