Boost(9)

City_Duck·2022년 11월 15일
0

부스트캠프

목록 보기
11/16
post-thumbnail
  • VSCode 단축키

    • 같은 코드, 같은 단어, 반복되는 코드 한번에 선택하는 단축키
      • ⌘ + D
    • 같은 변수명/함수명 모두 선택해서 한번에 바꾸는 단축키
      • F2
    • 주석처리, 주석처리 해제하는 단축키
      • ⌘ + /
    • 코드 한 줄을 위/아래로 이동하는 단축키
      • ⌥ + ↑ 또는 ↓
    • 코드 한 줄을 위/아래로 복사하는 단축키
      • ⌥ + ⇧ + ↑ 또는 ↓

  • Relation Extraction

    • 관계 추출(Relation Extraction)은 문장의 단어(Entity)에 대한 속성과 관계를 예측하는 문제입니다.
    • 역할 : Model Team

  • 협업 방식

    • Notion
      • Kanban Board
    • Git
      • Git Flow 방식의 branch strategy
      • pre-commit
        • black
        • isort
        • autoflake
        • flake8
      • GitHub Action
        • pre-commit
        • Commit Convention

  • EDA

    • Entity의 위치가 embedding size인 512를 넘어가는 데이터 Drop
    • 한자가 포함되어 있는 데이터 확인
      • 한자가 포함되어 있는 데이터가 train data의 10%이며 한자가 포함된 entity는 약 1%
      • < unk > 토큰으로 처리되는 한자들이 많았기에 두 가지 옵션을 사용
      1. substitution : 한자를 한국어로 대체
        • 대부분의 한자가 고유명사이기에 효과가 없음
      2. 한자의 번역을 bracket 사이에 넣어줌
        • 한자를 한국어로 번역 시 두 가지 음을 가지는 한자에 취약
    • Baseline의 Preprocessing 코드가 Entity를 모두 들고오지 않음
      • before : entity 'word' : 희극 배우
      • after : entity 'word' : 희극 배우, MC, 배우, 가수
      • Micro F1 score 소폭 상승, AUPRC 감소
      • 이에 해당되는 데이터가 적었기에 변경된 데이터 Relation 추론을 포기했다고 판단된다.
      • 이처럼 추가되는 Entity를 통해 증강 시도
        • 'Relation이 같다' 가정 하에 조합 방식으로 추가시 원본 데이터와 3:1 비율로 증강 가능
        • Micro F1 score 상승
    • An Improved Baseline for Sentence-level Relation Extraction 논문 적용
      • 아쉽게도 좋은 성적을 내지 못했다.

  • Model

    • PyTorch Lightning 이식 : Baseline code의 모듈 화 및 실험 편의를 위해

    • Trainer Config

      • Optimizer

        • AdamW

        • Weight decay : 0.01

          • OverFitting 및 Generation Error를 줄이기 위해 도입
        • LR Scheduler

          • Constant with warm up : 정해진 Step까지 LR이 선형적으로 증가하며(warm up) 이후 고정
          • Cosine with warm up : Warm Up 이후 Cosine 함수를 통해 LR Scaling 수행
            • 성능이 향상되었다
            • Early OverFitting 방지 및 학습 진행과 함께 LR 감소가 이뤄져 Loss가 튀는 것을 방지
        • LR finder : Cyclical Learning Rates 방식으로 초기 LR을 찾아줍니다.

          • 성능 소폭 상승
      • Loss Function

        • CrossEntropy : 일반적으로 성능이 가장 좋았다.
        • Focal Loss : 불균형한 데이터셋이기에 hard example에 가중을 주는 해당 function
          • 성능이 좋지 않았다.
          • hard example의 수가 너무 적어서 성능이 좋지 않았다고 판단했다.
        • Label Smoothing Loss : miss labeled된 데이터를 발견하여 도입하였으며 label을 smooth하게 부여합니다. 이를 통해 모델이 overconfident해지는 경향을 줄일 수 있습니다.
          • 성능이 좋았습니다.
      • PL Function 추가

        • seed_everything & deterministic을 사용하여 재현 보장
        • Mixed precision : GPU resource를 효율적으로 사용하며 연산속도 증가
        • Batch Size Finder : 모델이 사용할 수 있는 largest batch size를 찾는 기능
      • 모델 개선

        • Stratified KFold : 불균형한 데이터셋이기에 모델 일반화 성능 측정 및 앙상블 수행
        • R-BERT : 분류시 CLS 토큰 뿐만 아닌 Entity를 함께 Embedding하는 아이디어를 ROBERTa-Large에 적용하였습니다.
          • 성능이 좋아지지 않았습니다.
          • BERT와 다르게 이미 충분히 성적이 좋아진 ROBERTa-Large이기에 성능 향상이 보이지 않았다고 판단했습니다.

  • DATA

    • Data pre-processing : 한자 대부분이 UNK 토큰이기에 special token으로 처리하였지만 성능 하락
    • Data Augmentation
      • Back Translation : 1.5:1 비율로 추가하였지만 성능 하락
        • 전체 Sentence가 아닌 Entity 역번역을 통한 유의어 교체 시도 예정
      • SR(동의어 교체)를 시도하였으나 지명, 이름, 고유명사 등이 많아서 제외
      • Generation : koGPT3에 entity를 주어 새로운 문장을 만들었지만 성능 하락
      • Masked Language : 문장에 entity를 [MASK]하여 새로운 단어를 찾는 시도
        • 원본 데이터보다 향상되지 않았다.

  • 후기

    • '대회 점수에 집중하지 않고 부캠에서 배웠던 것들을 적용시켜보자' 라는 팀 모토로 접근했기에 성적이 좋게 나오진 않았지만 Reference 없이 Pytorch Lightning을 사용한 경험은 큰 자산으로 남을 것 같다.
    • Prediction 결과를 분석하여 Model 개선 시도를 추가할 예정이다.
    • 최신 기법을 적용하기 전 데이터와 Task를 충분히 분석해야 효율적으로 적용할 수 있다는 것을 배웠다.
profile
AI 새싹

0개의 댓글