(4강) 한국어 BERT 언어 모델 학습

💡
Huggingface Hub에 대해 알아본다.

BERT 모델 학습 단계

BERT Model을 학습시키기 위해선 다음과 같은 단계가 필요하다. 먼저, Tokenizer를 생성해야 한다. BERT가 자연어를 이해하는 기준을 세우고, 이에 맞는 Tokenizer를 만들어야 한다. 다음은, 학습시킬 Data를 확보해야 한다. BERT는 기본적으로 매우 큰 모델이기 때문에, 적절한 지점으로의 수렴을 위해서 대량의 Data를 구해야 한다. 이후, BERT Model이 학습하는 Task에 맞도록 Data를 정제해서 Feeding해야 한다. BERT 학습 Task인 Next Sentence Prediction을 위해서, Data에 Masking을 해야하는 것이다.

BERT 모델을 학습시키려는 원초적인 이유는, 성능 향상을 위해서이다. 도메인 특화 Task의 경우 해당 Data만을 학습한 Model이 성능이 더 좋은 것으로 알려져있다.

위에서 살펴보았듯, 학습을 위한 Data를 만들기 위해서는, Tokenizing 된 Data와, Token Type ID, Position ID, Mask ID 등 다양한 정보가 필요하다. 이 과정을 다음 실습 코드를 통해 알아보자.

실습 코드

BERT MASK Attack

한국어 BERT Pretraining


Reference

LM Training From Scratch

나만의 BERT Wordpiece Vocab 만들기 1

나만의 BERT Wordpiece Vocab 만들기 2

Extracting Training Data From Large Language Model

BERT 추가 설명


Project

오늘의 목표 및 진척상황

  • 각종 Issue에 따른 Baseline Code 개선
  • Label Smoothing
  • KoElectra Model

직면했던 문제와 학습한 내용

  1. Baseline Code 개선

    어제 설계했던, Baseline Code에서 다양한 Issue가 생겨 이를 방지하도록 Code를 설계했다.

    먼저, Trainer 객체의 Model 저장 방식을 변경했다. 기존에는 성능에 무관하게 새로운 Model을 저장하는 방식으로 설계되어 있어서, 일반화 성능을 가진 Model을 찾기가 어려웠다. 이외에도 계속되는 저장 및 삭제로 서버의 용량에 이슈가 생겼다. 이를 방지하고자 성능 기반으로 Model을 저장하도록 변경했고, Wandb에 Model을 저장하는 방식으로 Code를 개선했다.

    다음으로, Wandb를 Code와 연동시켰다. Wandb를 통해 모델도 저장할 뿐만 아니라, 각종 실험에 대한 Option과 성능을 한눈에 볼 수 있게 되었다. 기존의 실험 Code와 성능도 재확인 했다. 이를 통해 적절한 Epoch와 Option등을 단정지을 수 있게 되었다.

    이외에도, Mix Precision으로 학습하도록 설정하여 학습속도를 낮추는 등 각종 사항을 개선했다.

  1. Label Smoothing

    Data Augmentation에 대한 좋은 Idea가 생기지 않아, Training Option을 건드려봤다. Label Smoothing도 Option에 있기에 0.1과 0.2로 실험해보았다. 0.2는 확연한 성능 저하를 보였고, 0.1은 아주 작게 성능 저하를 보였다.

  1. KoElectra Model

    현재 SOTA로 알려져 있는 KoElectra Model의 성능도 확인하고자 실험을 진행했다. 이상하게도, Code에 문제가 있는지 제대로 된 학습이 진행되지 않았다. 내일 추가적으로 확인해보고, 재실험이 필요한 상태이다.

추가로 진행 할 사항

  • Wiki Data로 학습한 Model 확인
  • KoElectra Model 실험
  • Loss, Optimizer, Scheduler 실험

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P2] Saturday 17 April  (0) 2021.04.26
[P2] Day 55  (0) 2021.04.26
[P2] Day 53  (0) 2021.04.26
[P2] Day 52  (0) 2021.04.26
[P2] Day 51  (0) 2021.04.26

+ Recent posts