네이버 부스트캠프/LEVEL-2

[부스트캠프][P-stage][WK09 / Day41] KLUE RE 5

1. 금일 목표

  1. 강의 5,6,7 강(오전 마무리)
  2. 베이스라인 코드 받아와 klue/roberta-large로 optuna 실험
  3. 3시 멘토링
  4. 베이스라인 코드에 confusion matrix 추가해서 실험하기

2. 진행사항

1) 강의 5,6,7 강(오전 마무리)

BERT 언어모델 기반의 단일 문장 분류, 두 문장 관계 분류, 문장 토큰 분류에 관련된 강의를 수강하였습니다.

BERT 모델 기반의 단일 문장 분류

  • KLUE 데이터 셋
  • 의존 구문 분석: 단어들 사이의 관계를 분석하는 task
    • 의미의 중심이 되는 지배소와 지배소가 갖는 의미를 보완해주는 의존소로 구성되어 있음
    • 지배소는 후위언으로 항상 의존소보다 뒤에 위치, 교차 의존 구조는 없음
    • sequence labeling 방식으로 앞 어절에 의존소가 없고 다음 어절이 지배소인 어절을 삭제하며 의존 관계를 만듬
    • 자연어의 형태를 구조화해서 표현 가능하며 대상에 대한 정보 추출 가능
  • 문장 분류 task
    • 감정분석(Sentiment Analysis)
    • 주제 라벨링(Topic Labeling)
    • 언어감지(Language Detection)
    • 의도 분류(Intent Classification)
    • 데이터: Kor_hate, Kor_sarcasm, Kor_sae, Kor_3i4k
  • 단일 문장 분류 모델 학습
    • 주요 매개 변수:
    • 학습 과정

BERT 언어모델 기반의 두 문장 관계 분류

  • 두 문장 관계 분류 task
    • 주어진 2개의 문장에 대해, 두 문장의 자연어 추론과 의미론적인 유사성을 측정하는 task
  • 두 문장 관계 분류를 위한 데이터
    • Natural-Language-Inference-(NLI): 언어 모델이 자연어의 맥락을 이해할 수 있는지 검증, 전제문장(Premise)과 가설문장(Hypothesis)을 Entailment(함의), Contradiction(모순), Neutral(중립) 으로 분류
    • Semantic-text-pair: 두 문장의 의미가 서로 같은 문장인지 검증하는 task
  • BERT를 활용해 IRQA 챗봇을 만들기 실습

BERT 언어 모델 기반의 문장 토큰 분류

  • 문장 토큰 관계 분류 task
    • 주어진 문장의 각 token이 어떤 범주에 속하는지 분류하는 task
    • Named Entity Recognition (NER): 개체명 인식은 문맥을 파악해서 인명, 기관명, 지명 등과 같은 문장 또는 문서에서 특정한 의미를 가지고 있는 단어 또는 어구(개체) 등을 인식하는 과정 -> 같은 단어라도 문맥에서 다양한 개체(Entity)로 사용 됨
    • Part-of-speech tagging (POS TAGGING): 주어진 문장의 각 성분에 대하여 가장 알맞는 품사를 태깅하는 것
  • 문장 token 분류를 위한 데이터
    • kor_ner: 한국해양대학교 자연어 처리 연구실에서 공개한 한국어 NER 데이터셋.일반적으로 NER 데이터셋은 pos tagging도 함께 존재
    • B: 개체명의 시작(Begin), I: 내부(Inside), O: 다루지 않는 개체면(Outside)

  • 문장 토큰 분류 모델 학습
    • 학습 과정

2) 베이스라인 코드 받아와 klue/roberta-large로 optuna 실험

elif hps_args.backend == 'optuna':
    def hp_space_optuna(trial):
        # KLUE Paper Baseline
        # How to set : https://optuna.readthedocs.io/en/stable/reference/generated/optuna.trial.Trial.html?highlight=suggest_float#optuna.trial.Trial.suggest_float
        return {
            "per_device_train_batch_size": trial.suggest_categorical("per_device_train_batch_size", hps_args.hp_per_device_train_batch_size),
            "per_device_eval_batch_size": trial.suggest_categorical("per_device_eval_batch_size", hps_args.hp_per_device_eval_batch_size),
            "learning_rate": trial.suggest_categorical("learning_rate", hps_args.hp_learning_rate),
            "warmup_ratio":  trial.suggest_categorical("warmup_ratio", hps_args.hp_warmup_ratio),
            "weight_decay":  trial.suggest_categorical("weight_decay", hps_args.hp_weight_decay),
            "num_train_epochs":  trial.suggest_categorical("num_train_epochs", hps_args.hp_num_train_epochs),
            "max_steps": 1 if smoke_test else -1
        }

    best_trial = trainer.hyperparameter_search(
        hp_space=hp_space_optuna,
        backend=hps_args.backend,
        n_trials=num_samples,
        compute_objective=my_objective
        )

3) 3시 멘토링

스몰톡 및 질의응답 시간을 가졌습니다.

4) 베이스라인 코드에 confusion matrix 추가해서 실험하기

아직 마무리 하지 못했습니다. 주말동안 다른 작업들과 함께 진행 예정입니다.

5) 모델 바꾸어 추가 실험, 튜닝 결과 적용


생각만큼 성능이 잘나오지는 않았습니다.


3. 피어세션 정리

  • 진행상황 공유
  • 앞으로 진행할 모델 방향과 추가적인 데이터 처리 작업 진행
  • 모델 정리
  • 코드 merge
  • 온전하지 않은 데이터로 augmentation 하는 게 옳은가? 에 대한 논의

4. 학습 회고

이번주는 강의를 수장하고 실습도 진행했지만 코드를 가져와 정리하지는 않았습니다.
컴피티션이 종료되고 여유가 생기면 더욱 자세하게 학습정리를 진행할 예정입니다.

컴피티션에 많은 시간을 투자한 한 주 였습니다. 하지만 더 많은 아이디어를 내지 못해 아쉬움이 남는데, 주말동안 추가 작업을 거치고 더 많은 아이디어를 떠올려 실험에 적용해 봐야 겠습니다.