https://drive.google.com/drive/folders/1iSDUgYfhMp2LQU6AGOQJWPQSPcYTaSnF?usp=sharing
데이터 증강 & 학습시 사용한 모델은 다음과 같습니다.
- Data Augmentation
https://huggingface.co/SEOKDONG/llama3.1_korean_v1.1_sft_by_aidx
https://huggingface.co/rtzr/ko-gemma-2-9b-it
- Train
https://huggingface.co/team-lucid/deberta-v3-base-korean- ckpt, data 파일은 위의 Pretrained Checkpoint & dataset 섹션에서 다운로드 받은후 드라이브 구조와 동일하게 위치하면 됩니다.
- data_augmentation 코드를 활용하여 데이터 증강을 진행했으며, 완료된 결과 또한 드라이브에 포함되어 있습니다.
SW-2025/
├── ckpt/ # weight files
│ ├── full_text
│ │ └── epoch_1.pt
│ ├── gemma
│ │ └── checkpoint_2
│ ├── llama
│ │ └── checkpoint_3
│ ├── self_training
│ │ └── checkpoint_1
│ └── train_pseudo
│ └── checkpoint_1
├── data/ # 기존 데이터 & 증강 데이터
│ ├── train.csv
│ ├── train_pseudo_label.csv
│ ├── train_llama.csv
│ ├── train_gemma.csv
│ ├── test.csv
│ └── sample_submission.csv
├── data_augmentation/ # 데이터 증강 코드
│ ├── gemma_augmentation.py
│ └── llama_augmentation.py
├── emsemble/ # 앙상블 코드
│ ├── ensemble_2.py
│ └── ensemble.py
├── inference/ # 추론 코드
│ ├── inference_custom.py
│ └── inference.py
├── pseudo_labeling/ # 수도 레이블링 코드
│ └── pseudo_labeling.py
├── scripts/ # 추론 스크립트
│ └── inference.sh
├── train/ # 학습 코드
│ ├── train_custom.py
│ └── train.py
├── README.md
└── requirements.txt- 라이브러리 버전은 requirements에 저장되어 있습니다.
- 아래 명령어를 순서대로 실행시키면 됩니다.
conda create -n sw python=3.10
conda activate sw
python -m pip install -r requirements.txt- Inference_full_text
- Inference_Augmetnation(llama)
- Inference_Augmetnation(gemma)
- Inference_pseudo_label
- Inference_self_training
- 추론 수행 후 앙상블을 진행하는 파일을 쉘 스크립트를 통해 작성하였습니다.
- 아래 명령어를 실행시키면 됩니다.
chmod +x ./scripts/inference.sh
./scripts/inference.sh이후 최종 결과물은 submission/final_ensemble.csv 에 저장됩니다.
- 학습과정은 위에서 추론을 5번 한거와 같이 총 5개의 학습을 진행했습니다.
- 가장 먼저 학습을 진행하기전, 데이터증강을 위한 코드입니다.
- 이 과정을 통하여 나온결과는 드라이브에 동일하게 포함되어 있습니다.
- 문단별로 train 분리하기
python ./data_augmentation/train_paragraphs.py- llama증강
python ./data_augmentation/llama_augmentation.py \- gemma증강
python ./data_augmentation/gemma_augmentation.pytrain.csv를 sliding window를 활용하여 학습하는 코드입니다.
python ./train/train_custom.py \
--train_csv ./data/train.csv \
--batch_size 16 \
--lr 2e-5 \
--epochs 3 \
--seed 42 \
--save_dir ./ckpt/full_text파인튜닝 모델을 활용하여 수도 레이블링하는 코드입니다.
python ./pseudo_labeling/pseudo_labeling.py증강한 데이터셋(llama, gemma)를 학습하는 코드입니다.
python ./train/train.py \
--train_csv ./data/train_llama.csv \
--sampling 18000 39000 \
--batch_size 4 \
--lr 1e-5 \
--scheduler_type cosine \
--weight_decay 0.01 \
--drop_out 0.2 \
--epochs 3 \
--test_size 0.2 \
--seed 42 \
--save_dir ./ckpt/llama
python ./train/train.py \
--train_csv ./data/train_gemma.csv \
--batch_size 4 \
--lr 1e-5 \
--scheduler_type cosine \
--weight_decay 0.01 \
--drop_out 0.2 \
--epochs 3 \
--test_size 0.2 \
--seed 42 \
--save_dir ./ckpt/gemma
수도레이블 데이터셋을 학습하는 코드입니다.
python ./train/train.py \
--train_csv ./data/train_pseudo_label.csv \
--sampling 6 \
--batch_size 4 \
--lr 1e-5 \
--scheduler_type cosine \
--weight_decay 0.01 \
--drop_out 0.2 \
--epochs 3 \
--test_size 0.2 \
--seed 42 \
--save_dir ./ckpt/train_pseudo
sliding window로 학습한 모델에 이어서 수도레이블 데이터셋을 학습(Self-Training)하는 코드입니다.
python ./train/train.py \
--train_csv ./data/train_pseudo_label.csv \
--model_ckpt ./ckpt/full_text/epoch_1.pt \
--batch_size 4 \
--lr 1e-5 \
--scheduler_type cosine \
--weight_decay 0.01 \
--drop_out 0.2 \
--epochs 3 \
--test_size 0.2 \
--seed 42 \
--save_dir ./ckpt/self_training