ViClickbait-2025 / run_all.sh
minhy112's picture
Upload ViClickbait-2025 project (PhoBERT + GPT-OSS-20B LoRA SFT)
af55aed verified
Raw
History Blame Contribute Delete
5.08 kB
#!/usr/bin/env bash
# run_all.sh – ChαΊ‘y toΓ n bα»™ pipeline: chuαΊ©n bα»‹ dα»― liệu β†’ PhoBERT β†’ GPT-OSS-20B β†’ So sΓ‘nh
# ========================================================================================
# DΓΉng:
# bash run_all.sh # full pipeline
# bash run_all.sh --skip_gpt # chỉ PhoBERT
#
# BiαΊΏn mΓ΄i trường cΓ³ thể ghi Δ‘Γ¨:
# CSV_PATH : đường dαΊ«n tα»›i file CSV gα»‘c (mαΊ·c Δ‘α»‹nh: /tmp/dataset_nlp/clickbait_dataset_vietnamese.csv)
# DATA_DIR : thΖ° mα»₯c chα»©a splits (mαΊ·c Δ‘α»‹nh: data/splits)
# PB_OUT : output PhoBERT (mαΊ·c Δ‘α»‹nh: outputs/phobert)
# GPT_OUT : output GPT-OSS-20B (mαΊ·c Δ‘α»‹nh: outputs/gpt20b)
# GPT_MODEL : HuggingFace model ID (mαΊ·c Δ‘α»‹nh: openai/gpt-oss-20b)
# ========================================================================================
set -euo pipefail
# ── CΓ i Δ‘αΊ·t mαΊ·c Δ‘α»‹nh ─────────────────────────────────────────────────────────
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
# ── Parse args ────────────────────────────────────────────────────────────────
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 "------------------------------------------------------------"
# ── BΖ°α»›c 0: CΓ i dependencies nαΊΏu cαΊ§n ─────────────────────────────────────────
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}
# ── BΖ°α»›c 1: ChuαΊ©n bα»‹ dα»― liệu ─────────────────────────────────────────────────
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
# ── BΖ°α»›c 2: PhoBERT Baseline ──────────────────────────────────────────────────
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
# ── BΖ°α»›c 3: GPT OSS 20B (LoRA SFT) ─────────────────────────────────────────
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
# ── BΖ°α»›c 4: So sΓ‘nh kαΊΏt quαΊ£ ───────────────────────────────────────────────────
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 "============================================================"