YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

ViClickbait GNN

Phân loại tiêu đề tiếng Việt clickbait / non-clickbait trên bộ dữ liệu ViClickbait-2025 bằng 4 hướng thực nghiệm:

  • TF-IDF + Logistic Regression
  • PhoBERT-only
  • GCN-only
  • PhoBERT + GCN Fusion

Project này đã được chạy thực nghiệm đầy đủ và đã sinh sẵn log, checkpoint, metric, confusion matrix và file dự đoán trong thư mục outputs/.

Overview

Mục tiêu của project là kiểm tra tính khả thi của một mô hình lai gồm:

  • Nhánh văn bản: PhoBERT mã hóa tiêu đề.
  • Nhánh đồ thị: GCN học trên similarity graph giữa các tiêu đề.
  • Bộ phân loại cuối: kết hợp tín hiệu ngữ nghĩa và tín hiệu cấu trúc.

Pipeline tổng quát:

  1. Tiền xử lý dữ liệu, chuẩn hóa titlelabel.
  2. Chia train / val / test theo stratified split.
  3. Train hai baseline văn bản: TF-IDF + LRPhoBERT-only.
  4. Trích xuất embedding PhoBERT cho toàn bộ node.
  5. Xây k-NN graph với k=5k=10.
  6. Train GCN-onlyFusion.

Dataset

Dữ liệu gốc nằm trong:

  • data/raw/clickbait_dataset_vietnamese.csv
  • data/raw/clickbait_dataset_vietnamese.jsonl

Sau preprocessing:

  • Tổng số mẫu: 3414
  • non-clickbait: 2349
  • clickbait: 1065

Thiết lập chia dữ liệu:

  • train: 2389
  • val: 342
  • test: 683

Main Results

Model Config Accuracy Precision Recall Macro-F1
TF-IDF + Logistic Regression baseline 0.7540 0.7164 0.7276 0.7210
PhoBERT-only vinai/phobert-base, 5 epochs 0.8448 0.8171 0.8308 0.8231
GCN-only k=10 selected by validation 0.8433 0.8167 0.8207 0.8187
PhoBERT + GCN Fusion k=5 selected by validation 0.8463 0.8185 0.8357 0.8258

Ghi chú:

  • Fusion k=10 có test Macro-F1 = 0.8265, nhỉnh hơn Fusion k=5.
  • Tuy vậy, thư mục outputs/fusion/ được giữ theo cấu hình k=5 vì đây là run được chọn bằng validation, phù hợp cách báo cáo thực nghiệm chuẩn hơn.

Chi tiết đầy đủ nằm tại:

Project Layout

viclickbait_gnn/
├── REPORT_DRAFT.md
├── appendix/
├── configs/
├── data/
│   ├── raw/
│   ├── processed/
│   └── graphs/
├── outputs/
│   ├── baseline/
│   ├── phobert/
│   ├── gcn/
│   ├── fusion/
│   ├── gcn_k5/
│   ├── gcn_k10/
│   ├── fusion_k5/
│   └── fusion_k10/
├── requirements.txt
└── src/

Quick Start

1. Preprocess

cd /root/gnn/viclickbait_gnn
python3 src/preprocess.py \
  --input data/raw/clickbait_dataset_vietnamese.csv \
  --output data/processed/all.csv

2. Split data

python3 src/split_data.py \
  --input data/processed/all.csv \
  --output_dir data/processed \
  --train_ratio 0.7 \
  --val_ratio 0.1 \
  --test_ratio 0.2 \
  --seed 42

3. Baseline

python3 src/train_baseline.py \
  --train data/processed/train.csv \
  --val data/processed/val.csv \
  --test data/processed/test.csv \
  --output_dir outputs/baseline

4. PhoBERT-only

python3 src/train_phobert.py \
  --train data/processed/train.csv \
  --val data/processed/val.csv \
  --test data/processed/test.csv \
  --output_dir outputs/phobert \
  --model vinai/phobert-base \
  --device cuda

5. Extract PhoBERT embeddings

python3 src/extract_embeddings.py \
  --input data/processed/all.csv \
  --model vinai/phobert-base \
  --checkpoint outputs/phobert/best_model.pt \
  --backend transformer \
  --batch_size 32 \
  --max_length 64 \
  --pooling cls \
  --output data/graphs/node_features.npy \
  --device cuda

6. Build graphs

python3 src/build_graph.py \
  --features data/graphs/node_features.npy \
  --k 5 \
  --store_features \
  --output data/graphs/graph_knn_k5.pt

python3 src/build_graph.py \
  --features data/graphs/node_features.npy \
  --k 10 \
  --store_features \
  --output data/graphs/graph_knn_k10.pt

7. Train graph models

python3 src/train_gnn.py \
  --all data/processed/all.csv \
  --train data/processed/train.csv \
  --val data/processed/val.csv \
  --test data/processed/test.csv \
  --graph data/graphs/graph_knn_k10.pt \
  --output_dir outputs/gcn \
  --device cuda

python3 src/train_fusion.py \
  --all data/processed/all.csv \
  --train data/processed/train.csv \
  --val data/processed/val.csv \
  --test data/processed/test.csv \
  --graph data/graphs/graph_knn_k5.pt \
  --output_dir outputs/fusion \
  --device cuda

Config Files

Các file trong configs/ lưu bộ siêu tham số chuẩn của project:

Hiện tại các script nhận tham số qua CLI là chính. Các file YAML đóng vai trò cấu hình tham chiếu để đưa vào báo cáo và tái lập thực nghiệm.

Outputs

Mỗi thư mục run có thể chứa:

  • train.log
  • best_model.pt
  • metrics.json
  • confusion_matrix.png
  • cls_report.txt
  • pred_test.csv

Thư mục chính để trích số cho báo cáo:

Thư mục ablation:

Reproducibility Notes

  • node_id được tạo cố định ngay sau bước preprocessing để tránh lệch thứ tự giữa CSV, embedding và graph.
  • GCNFusion được huấn luyện theo kiểu full-graph, nhưng loss chỉ tính trên train labels.
  • Việc chọn cấu hình chính được ưu tiên theo validation, không theo test.
  • Môi trường chạy thực nghiệm đầy đủ đã dùng GPU NVIDIA GeForce RTX 4090.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support