DSAA 5003 Final Project - AutoML and Hyperparameter Optimization
This project applies Automated Machine Learning (AutoML) techniques, specifically focusing on Hyperparameter Optimization (HPO), to solve the LLM-generated content detection problem. We systematically compare four different HPO methods (Random Search, Grid Search, TPE via Optuna, and SMAC via OpenBox) across three diverse machine learning models (LightGBM, SVM, and MLP). Our experimental framework emphasizes reproducibility, comprehensive analysis, and fair comparison through controlled variables and unified search spaces.
| Member | Role | Code Responsibilities | Report Sections |
|---|---|---|---|
| Jiawei He | Data & Baseline | Feature extraction (DeBERTa), search space definition, Random Search | Introduction, Data Preprocessing |
| Ling Zhao | Grid Search | Grid Search implementation, model analysis | Related Work, Model Description |
| Ran Mei | TPE/Optuna | TPE optimization implementation | HPO Algorithms, Experimental Setup |
| Bowen Xiao | SMAC/OpenBox | SMAC implementation, result analysis | Experiments & Analysis, Conclusion |
LLM-generated content detection aims to identify which Large Language Model generated a given text based on question-answer pairs. This is a multi-class classification problem with 7 target categories.
- Controlled Experiment Design: Unified DeBERTa embeddings and consistent search spaces across all methods
- Comprehensive HPO Comparison: Four different optimization strategies evaluated systematically
- Multi-Model Analysis: Three diverse models representing different algorithm paradigms
- Reproducible Pipeline: Automated workflow with minimal configuration required
.
├── main.py # Main entry point for experiments
├── config/
│ └── search_spaces.json # Unified hyperparameter search spaces
├── src/
│ ├── models/ # Model implementations
│ │ ├── lgb_model.py # LightGBM (Gradient Boosting)
│ │ ├── svm_model.py # Support Vector Machine
│ │ └── mlp_model.py # Multi-Layer Perceptron
│ ├── hpo/ # HPO algorithm implementations
│ │ ├── random_search.py # Random Search (Baseline)
│ │ ├── grid_search.py # Grid Search
│ │ ├── tpe_optuna.py # TPE via Optuna
│ │ └── smac_optimizer.py # SMAC via OpenBox
│ ├── feature_extraction.py # DeBERTa feature extraction
│ ├── preprocess_features.py # Feature standardization
│ └── extract_n_trials.py # Tool for extracting N-trial results
├── data/
│ ├── raw/ # Original Kaggle data
│ └── processed/ # Extracted features (.npy)
├── models/ # Saved models and optimization history
├── outputs/ # Kaggle submission files
└── README.md # This file
- Python 3.8+
- CUDA-capable GPU (optional, for LightGBM acceleration)
# Core dependencies
pip install numpy pandas scikit-learn lightgbm torch transformers matplotlib tqdm
# HPO libraries
pip install optuna # For TPE (Member C)
pip install openbox # For SMAC (Member D)Or install all at once:
pip install -r requirements.txtExtract DeBERTa embeddings from raw text data:
python main.py --mode extractThis generates feature files in data/processed/:
train_features.npy- Training features (768-dim DeBERTa embeddings)test_features.npy- Test featurestrain_labels.npy- Training labelstest_ids.npy- Test IDs
Standardize features for SVM and MLP convergence:
python src/preprocess_features.pyThis creates standardized features and backs up original files.
General Command Format:
python main.py --model [MODEL] --algo [ALGORITHM] --n_trials [N]Available Options:
- Models:
lightgbm,svm,mlp - Algorithms:
random,grid,tpe,smac - n_trials: Number of trials (default: 50)
Example Experiments:
# Random Search (Baseline)
python main.py --model lightgbm --algo random --n_trials 50
python main.py --model svm --algo random --n_trials 50
python main.py --model mlp --algo random --n_trials 50
# Grid Search
python main.py --model lightgbm --algo grid
python main.py --model svm --algo grid
python main.py --model mlp --algo grid
# TPE (Optuna)
python main.py --model lightgbm --algo tpe --n_trials 50
python main.py --model svm --algo tpe --n_trials 50
python main.py --model mlp --algo tpe --n_trials 50
# SMAC (OpenBox)
python main.py --model lightgbm --algo smac --n_trials 50
python main.py --model svm --algo smac --n_trials 50
python main.py --model mlp --algo smac --n_trials 50To compare performance at different trial counts (10, 20, 50):
# Extract first 10 trials from all experiments
python src/extract_n_trials.py --n_trials 10
# Extract first 20 trials
python src/extract_n_trials.py --n_trials 20This automatically processes all history files in models/ and generates:
{model}_{algo}_{N}trials_history.json- Optimization history{model}_{algo}_{N}trials_history.png- Convergence plot{model}_{algo}_{N}trials_submission.csv- Kaggle submission
- Data: Unified DeBERTa embeddings (768 dimensions) for all experiments
- Models: Three models representing different paradigms:
- LightGBM: Gradient Boosting Decision Trees
- SVM: Kernel-based large-margin classifier
- MLP: Neural network with adaptive learning
- Search Space: Consistent parameter ranges defined in
config/search_spaces.json - Evaluation: 5-fold stratified cross-validation with log-loss metric
- HPO Method: Random Search, Grid Search, TPE, SMAC
- Primary: Log-loss (lower is better)
- Secondary: Convergence speed, computational efficiency
- Analysis: Performance vs. trial count, parameter importance
Each experiment generates:
models/
├── {model}_{algo}_history.json # Optimization history for analysis
├── {model}_{algo}_history.png # Convergence visualization
└── {model}_fold_*.pkl # Trained model weights
outputs/
└── {model}_{algo}_submission.csv # Kaggle submission file
Hyperparameter search spaces are defined in config/search_spaces.json and shared across all HPO methods (except Grid Search, which uses discretized grids in src/hpo/grid_search.py).
- Fixed random seed: 42
- Deterministic cross-validation splits
- Reproducible model training
- Kaggle Competition: [LLM Generated Content Detection Challenge]
- Original dataset provided by competition organizers
- DeBERTa-v3-base: Microsoft's DeBERTa model via HuggingFace Transformers
- Citation: He, P., et al. (2021). "DeBERTa: Decoding-enhanced BERT with Disentangled Attention"
- Feature extraction pipeline adapted from HuggingFace examples
- Model implementations follow scikit-learn and LightGBM official documentation
- Unified Framework: Designed a fair comparison framework with consistent search spaces
- Multi-Model Analysis: Systematic evaluation across three diverse model types
- Automated Pipeline: One-command execution with minimal configuration
- Extraction Tool: Novel tool for comparing different trial counts from single experiment
- Jiawei He: Infrastructure setup, feature extraction pipeline, Random Search baseline
- Ling Zhao: Grid Search implementation with discretized spaces, model analysis
- Ran Mei: TPE integration with Optuna, search space design
- Bowen Xiao: SMAC integration with OpenBox, comprehensive result analysis
(Results provided in "5003 Final Project/models" package)
(Screenshots provided in submission package)
This project was completed in accordance with HKUST-GZ's Academic Honor Code. All external resources are properly cited. We used AI tools (ChatGPT/Claude) for:
- Code documentation polishing
- README structure suggestions
- English grammar correction
The core implementations, experimental design, and analysis are our original work.