부스트캠프 AI Tech 4기

(KLUE) BERT Pre-Training

쉬엄쉬엄블로그 2023. 8. 16. 15:53
728x90

이 색깔은 주석이라 무시하셔도 됩니다.

한국어 언어 모델 학습 및 다중 과제 튜닝

BERT Pre-Training

BERT 모델 학습

  • BERT 학습의 단계

    1. Tokenizer 만들기
    2. 데이터셋 확보
    3. Next sentence prediction (NSP)
    4. Masking
  • 이미 있는 거 쓰지, 왜 새로 학습해야 하는가?

    • 도메인 특화 task의 경우, 도메인 특화된 학습 데이터만 사용하는 것이 성능이 더 좋다!

      !

    • 생물학, 생리학 자연어 task에 대해서 기존 BERT를 fine tuning하는 것 보다 생물학, 생리학 데이터로 바닥부터 학습한 모델의 성능이 더 좋음

  • 학습을 위한 데이터 만들기

    • BERT 입장에서 입력은 input_ids, token_type_ids, positional encoding 형태로 만들어야 함
      • 이런 형태로 만든 것이 데이터셋 이라 함

[BERT MASK Attack 실습] (공유 X)

  • BERT 모델은 [MASK] token을 잘 예측하기 위해 학습한다.
    그래서 [MASK] token을 예측하는 task를 통해 개인정보를 획득할 수도 있다.
    • BERT를 통해 지식 그래프가 확장될 수 있고 학습에 사용됐던 데이터가 드러날 수 있음
    • 계좌번호, 직책, 소속 등 개인 정보를 알아낼 수도 있기 때문에 모델을 학습할 때 개인정보가 해소된 데이터를 활용해야 함
  • 모델을 load한 후에는 제대로 토큰화가 되는지 확인하기 위해 반드시 토크나이저를 실행해봐야 함

[한국어 BERT Pre-Training 실습] (공유 X)

  • 실제 현업에서 정확도 3~5%는 의미가 없기 때문에 BertConfig를 수정하여 모델 사이즈를 줄이기도 함

  • max_len 보다 길이가 긴 토큰들이 들어오면 문장1과 문장2의 토큰을 랜덤하게 하나씩 제거하는 코드

      # 이제 126 token을 넘는다면 truncation을 해야한다.
      # 이 때, 126 token 이내로 들어온다면 행위를 멈추고,
      # 만약 126 token을 넘는다면, segmentA와 segmentB에서 랜덤하게 하나씩 제거한다.
      def truncate_seq_pair(tokens_a, tokens_b, max_num_tokens):
          """Truncates a pair of sequences to a maximum sequence length."""
          while True:
              total_length = len(tokens_a) + len(tokens_b)
              if total_length <= max_num_tokens:
                  break
              trunc_tokens = tokens_a if len(tokens_a) > len(tokens_b) else tokens_b
              assert len(trunc_tokens) >= 1
              # We want to sometimes truncate from the front and sometimes from the
              # back to add more randomness and avoid biases.
              if random.random() < 0.5:
                  del trunc_tokens[0]
              else:
                  trunc_tokens.pop()

출처: 부스트캠프 AI Tech 4기(NAVER Connect Foundation)