Low-resource Vietnamese student feedback sentiment classification with data augmentation
# VSFC Low-resource Data Augmentation
Experimental pipeline for label-preserving data augmentation on Vietnamese
student feedback sentiment classification.
## Scope
This repository is organized around the execution plan in
`../execution_plan.md`. The initial bootstrap includes reproducible
configuration, utility helpers, and the project layout needed for later data,
augmentation, training, and analysis phases.
## Quick Checks
```bash
pip install -r requirements.txt
python -c "from src.utils.seed import set_seed; set_seed(42)"
python -c "import yaml; print(yaml.safe_load(open('configs/base.yaml')))"
```
## Environment Split for VietQuill
VietQuill uses a separate generation environment because its dependency pins
conflict with the PhoBERT training stack in `requirements.txt`.
- `gen-env`: install `requirements-vietquill.txt`. Use this only for
VietQuill paraphrase generation and VietQuill QE scoring.
- `train-env`: install `requirements.txt`. Use this for all PhoBERT training,
heuristic filtering, aggregation, and any PhoBERT-based judge work.
The handoff between the two environments is CSV text under `data/augmented/`
and QC tables under `results/tables/`. Do not install both dependency sets in
one environment; generate or score text in `gen-env`, then train from the CSVs
in `train-env`.
## Phase 3 GPU Run
Local CPU can verify code, but PhoBERT acceptance should run on a CUDA GPU
such as Kaggle/Colab T4.
```bash
python scripts/check_gpu.py
python scripts/setup_vncorenlp.py
python scripts/download_data.py
python -m src.data.subsample --train-csv data/raw/train.csv --seed 42
python -m src.experiments.run_phobert --ratio 1.00 --seed 42 --augmentation none --decision-rule tune_logit_bias --logging-steps 25
```
The notebook `notebooks/phase3_gpu_run.ipynb` contains the same flow for
Kaggle/Colab. It first runs a tiny GPU smoke test, then runs the full Phase 3
gate. On Kaggle, keep Internet on and use a GPU accelerator; the notebook
defaults to a single visib …