ViClickbait-2025 / README.md
HF Automation
Add Streamlit local demo, GPT scoring fix, and detailed run guide
e42c3fa
|
Raw
History Blame Contribute Delete
5.21 kB
# ViClickbait-2025 – Vietnamese Clickbait Detection
Phân lớp clickbait tiếng Việt trên dataset ViClickbait-2025 (3.414 tin tức).
Baseline: **PhoBERT** · Model chính: **openai/gpt-oss-20b** (LoRA + BF16)
## Cấu trúc dự án
```
scripts/
├── prepare_data.py ← Chia split 80/10/10 stratified, tạo cột text
├── train_phobert.py ← Fine-tune PhoBERT baseline
├── train_gpt_oss_20b.py ← Fine-tune openai/gpt-oss-20b với LoRA SFT
└── compare_results.py ← So sánh kết quả 2 model
run_all.sh ← Chạy toàn bộ pipeline 1 lệnh
data/splits/ ← train.csv / val.csv / test.csv (tự sinh)
outputs/
├── phobert/ ← Checkpoint + test_results.json
└── gpt20b/ ← LoRA adapter + test_results.json
```
## Dataset
| | |
|---|---|
| Nguồn | [Mendeley Data – 3wc46bfcjc](https://data.mendeley.com/datasets/3wc46bfcjc/1) |
| Tổng mẫu | 3.414 tin tức tiếng Việt |
| Nhãn | `non-clickbait` (2349) / `clickbait` (1065) |
| Split | Train **2.731** / Val **341** / Test **342** (stratified 80/10/10) |
| Text input | `title [SEP] lead_paragraph` |
## Cài đặt
```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
```
## Chạy nhanh – Toàn bộ pipeline
```bash
# Đặt đường dẫn CSV
export CSV_PATH=/tmp/dataset_nlp/clickbait_dataset_vietnamese.csv
# Full pipeline: PhoBERT + GPT-OSS-20B + So sánh
bash run_all.sh
# Chỉ PhoBERT (nếu GPU nhỏ)
bash run_all.sh --skip_gpt
```
## Demo Streamlit (PhoBERT + GPT-OSS-20B local)
### A. Clone repo tu Hugging Face
```bash
git clone https://huggingface.co/minhy112/ViClickbait-2025
cd ViClickbait-2025
```
Neu repo private/gated:
```bash
git clone https://user:HF_TOKEN@huggingface.co/minhy112/ViClickbait-2025
cd ViClickbait-2025
```
### B. Tao moi truong va cai dat dependencies
```bash
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install torchvision
```
### C. Khoi chay demo tren server/Vast
```bash
export HF_TOKEN=your_hf_token
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
streamlit run streamlit_app.py \
--server.address 0.0.0.0 \
--server.port 8501 \
--server.fileWatcherType none
```
### D. Mo demo tren Mac local
Neu port 8501 da mo public, co the mo truc tiep:
```text
http://SERVER_IP:8501
```
Khuyen nghi dung SSH tunnel:
```bash
ssh -N -p SSH_PORT root@SERVER_IP -L 8501:localhost:8501
```
Sau do mo tren Mac:
```text
http://localhost:8501
```
Neu muon map sang cong local khac:
```bash
ssh -N -p SSH_PORT root@SERVER_IP -L 8080:localhost:8501
```
Mo:
```text
http://localhost:8080
```
### E. Cau hinh trong app
- PhoBERT path mac dinh: `outputs/phobert/checkpoint-430`
- GPT base model id mac dinh: `openai/gpt-oss-20b`
- GPT adapter path mac dinh: `outputs/gpt20b/checkpoint-430`
- GPT score hien thi dang xac suat 0-1 (softmax tren 2 log-score)
- Co the nap sample nhanh tu `data/splits/test.csv`
### F. Troubleshooting nhanh
1. Loi CUDA out of memory:
```bash
pkill -f "streamlit run streamlit_app.py" || true
pkill -f "python.*streamlit_app.py" || true
nvidia-smi
```
Sau do chay lai lenh Streamlit o buoc C.
2. Loi model dang nam o CPU/GPU khac nhau:
- Ban code hien tai da ep GPT len cung 1 GPU de tranh mismatch.
3. Khong load duoc base model GPT:
- Them `HF_TOKEN` hop le neu model bi gated.
4. Khong vao duoc web tu Mac:
- Kiem tra dung SSH port cua Vast.
- Kiem tra tunnel dang mo va khong bi xung dot cong local.
### G. Push thay doi len Hugging Face repo
```bash
git add README.md streamlit_app.py requirements.txt
git commit -m "Add Streamlit local demo for PhoBERT + GPT-OSS-20B and setup docs"
git push
```
## Chạy từng bước
### 1. Chuẩn bị dữ liệu
```bash
python3 scripts/prepare_data.py \
--csv /tmp/dataset_nlp/clickbait_dataset_vietnamese.csv \
--out_dir data/splits
```
### 2. Huấn luyện PhoBERT baseline
```bash
python3 scripts/train_phobert.py \
--data_dir data/splits \
--output_dir outputs/phobert \
--model_name vinai/phobert-base-v2 \
--batch_size 32 --lr 2e-5 --epochs 10 \
--patience 5
```
### 3. Huấn luyện GPT-OSS-20B (LoRA SFT)
```bash
python3 scripts/train_gpt_oss_20b.py \
--data_dir data/splits \
--output_dir outputs/gpt20b \
--batch_size 4 --grad_accum 8 \
--lr 2e-5 --epochs 10 \
--patience 3 --lora_r 32 --lora_alpha 64
```
### 4. So sánh kết quả
```bash
python3 scripts/compare_results.py \
--phobert_dir outputs/phobert \
--gpt_dir outputs/gpt20b
```
## Thông số kỹ thuật
| | PhoBERT | GPT-OSS-20B |
|---|---|---|
| Model | `vinai/phobert-base-v2` | `openai/gpt-oss-20b` |
| Phương pháp | Full fine-tune (SeqCls) | LoRA SFT (Generative, BF16) |
| LoRA | Không | r=32, alpha=64 |
| VRAM cần | ~4 GB | ~40 GB (BF16) |
| Batch hiệu quả | 32 | 32 (4 × grad_accum 8) |
| LR | 2e-5 | 2e-5 |
| Epochs (max) | 10 | 10 |
| Optimizer | AdamW | AdamW |
| Metrics | Accuracy, F1, Precision, Recall | ← như nhau |
| Early stopping | patience=5 | patience=3 |