| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| |
| CSV_PATH="${CSV_PATH:-/tmp/dataset_nlp/clickbait_dataset_vietnamese.csv}" |
| DATA_DIR="${DATA_DIR:-data/splits}" |
| PB_OUT="${PB_OUT:-outputs/phobert}" |
| GPT_OUT="${GPT_OUT:-outputs/gpt20b}" |
| GPT_MODEL="${GPT_MODEL:-openai/gpt-oss-20b}" |
| SKIP_GPT=false |
|
|
| |
| while [[ $# -gt 0 ]]; do |
| case "$1" in |
| --skip_gpt) SKIP_GPT=true; shift ;; |
| --model) GPT_MODEL="$2"; shift 2 ;; |
| --csv) CSV_PATH="$2"; shift 2 ;; |
| *) echo "Unknown arg: $1"; exit 1 ;; |
| esac |
| done |
|
|
| echo "============================================================" |
| echo " ViClickbait-2025 β PhΓ’n lα»p Clickbait TiαΊΏng Viα»t" |
| echo "============================================================" |
| echo "CSV : $CSV_PATH" |
| echo "DataDir : $DATA_DIR" |
| echo "PB_Out : $PB_OUT" |
| echo "GPT_Model: $GPT_MODEL" |
| echo "GPT_Out : $GPT_OUT" |
| echo "Skip GPT : $SKIP_GPT" |
| echo "------------------------------------------------------------" |
|
|
| |
| echo "" |
| echo "[0/4] Kiα»m tra / cΓ i dependencies..." |
| pip install -q transformers datasets evaluate accelerate scikit-learn pandas peft bitsandbytes |
|
|
| PYTHON=${PYTHON:-python3} |
|
|
| |
| echo "" |
| echo "[1/4] ChuαΊ©n bα» dα»― liα»u (split 80/10/10 stratified)..." |
| $PYTHON scripts/prepare_data.py \ |
| --csv "$CSV_PATH" \ |
| --out_dir "$DATA_DIR" \ |
| --text_mode title_lead \ |
| --seed 42 |
|
|
| |
| echo "" |
| echo "[2/4] HuαΊ₯n luyα»n PhoBERT baseline..." |
| $PYTHON scripts/train_phobert.py \ |
| --data_dir "$DATA_DIR" \ |
| --output_dir "$PB_OUT" \ |
| --model_name vinai/phobert-base-v2 \ |
| --max_length 256 \ |
| --batch_size 32 \ |
| --lr 2e-5 \ |
| --epochs 10 \ |
| --warmup_ratio 0.1 \ |
| --weight_decay 0.01 \ |
| --patience 5 \ |
| --seed 42 |
|
|
| |
| if [ "$SKIP_GPT" = false ]; then |
| echo "" |
| echo "[3/4] HuαΊ₯n luyα»n GPT OSS 20B vα»i LoRA SFT..." |
| $PYTHON scripts/train_gpt_oss_20b.py \ |
| --data_dir "$DATA_DIR" \ |
| --output_dir "$GPT_OUT" \ |
| --model_name "$GPT_MODEL" \ |
| --max_length 256 \ |
| --batch_size 4 \ |
| --grad_accum 8 \ |
| --lr 2e-5 \ |
| --epochs 10 \ |
| --warmup_ratio 0.1 \ |
| --weight_decay 0.01 \ |
| --patience 3 \ |
| --lora_r 32 \ |
| --lora_alpha 64 \ |
| --lora_dropout 0.05 \ |
| --seed 42 |
| else |
| echo "" |
| echo "[3/4] Bα» qua GPT OSS 20B (--skip_gpt)" |
| fi |
|
|
| |
| echo "" |
| echo "[4/4] So sΓ‘nh kαΊΏt quαΊ£..." |
| $PYTHON scripts/compare_results.py \ |
| --phobert_dir "$PB_OUT" \ |
| --gpt_dir "$GPT_OUT" |
|
|
| echo "" |
| echo "============================================================" |
| echo " Pipeline hoΓ n tαΊ₯t!" |
| echo " KαΊΏt quαΊ£ PhoBERT : $PB_OUT/test_results.json" |
| if [ "$SKIP_GPT" = false ]; then |
| echo " KαΊΏt quαΊ£ GPT-20B : $GPT_OUT/test_results.json" |
| fi |
| echo "============================================================" |
|
|