Skip to main content

SetFit-based multi-label classifier for water-related conflict events

Project description

Water Conflict Classifier

SetFit-based multi-label text classifier for identifying water-related conflict events in news headlines.

This folder contains the package source code. For usage instructions with the published package, see the PyPI page.

Project: Experimental research supporting the Pacific Institute's Water Conflict Chronology
Developer: Baobab Tech
License: CC BY-NC 4.0 (Non-Commercial)
PyPI Package: water-conflict-classifier


Package Installation & Usage

Install from PyPI:

pip install water-conflict-classifier

Use the trained model:

from setfit import SetFitModel

model = SetFitModel.from_pretrained("baobabtech/water-conflict-classifier")
predictions = model.predict(["Taliban attack workers at dam"])
# Returns: [[1, 1, 1]]  # [Trigger, Casualty, Weapon]

The rest of this README is for developers who want to train their own model or modify the package.

Frugal AI: Training with Limited Data

This classifier demonstrates an intentional approach to building AI systems with limited data using SetFit - a framework for few-shot learning with sentence transformers. Rather than defaulting to massive language models (GPT, Claude, or 100B+ parameter models) for simple classification tasks, we fine-tune a small, efficient model (~33M parameters) on a focused dataset.

Why this matters: The industry has normalized using trillion-parameter models to classify headlines, answer simple questions, or categorize text - tasks that don't require world knowledge, reasoning, or generative capabilities. This is computationally wasteful and environmentally costly. A properly fine-tuned small model can achieve comparable or better accuracy while using a fraction of the compute resources.

Our approach:

  • Train on ~600 examples (few-shot learning with SetFit)
  • Deploy a 33M parameter model vs. 100B-1T parameter alternatives
  • Achieve specialized task performance without the overhead of general-purpose LLMs
  • Reduce inference costs and latency by orders of magnitude

This is not about avoiding large models altogether - they're invaluable for complex reasoning tasks. But for targeted classification problems with labeled data, fine-tuning remains the professional, responsible choice.

Package Structure

This is the source code for the water-conflict-classifier Python package, published to PyPI.

classifier/
├── __init__.py                         # Package marker
├── data_prep.py                        # Data loading & preprocessing
├── training_logic.py                   # Core training logic
├── evaluation.py                       # Model evaluation & metrics
├── model_card.py                       # Model card generation
├── train_setfit_headline_classifier.py # Local training script
├── pyproject.toml                      # Package configuration
├── setup.py                            # Build configuration
└── README.md                           # This file

Note: Scripts that use this package (like cloud training with HF Jobs) are in the ../scripts/ folder.


Local Training

Train on your own hardware with local data files.

Setup

  1. Install the package in development mode:
uv pip install -e .
# or with regular pip:
pip install -e .

This installs the modules (data_prep, training_logic, etc.) so they can be imported.

  1. Prepare training data:

Training data should be in ../data/:

  • ../data/positives.csv - Water conflict headlines with labels
  • ../data/negatives.csv - Non-water conflict headlines

Generate negatives from ACLED (if needed):

cd ../scripts
python transform_prep_negatives.py
  1. Train:
python train_setfit_headline_classifier.py

Model saved to ./water-conflict-classifier/


Cloud Training

For training on HuggingFace Jobs (managed GPUs), see ../scripts/train_on_hf.py and the scripts README.


Publishing to PyPI

See PUBLISHING.md for complete instructions on building and publishing the package.


Data Sources

The training data combines:

Both positive and negative examples are labeled for three categories: Trigger, Casualty, and Weapon.

Resources


License

Copyright © 2025 Baobab Tech

This project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License.

You are free to use, share, and adapt this work for non-commercial purposes with appropriate attribution to Baobab Tech. For commercial licensing inquiries, please contact Baobab Tech.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

water_conflict_classifier-0.1.4.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

water_conflict_classifier-0.1.4-py3-none-any.whl (15.6 kB view details)

Uploaded Python 3

File details

Details for the file water_conflict_classifier-0.1.4.tar.gz.

File metadata

File hashes

Hashes for water_conflict_classifier-0.1.4.tar.gz
Algorithm Hash digest
SHA256 2ab4f8db79df03aac72f9ed79a583169d721e313765b4d8ce457b8673bae03cf
MD5 5cb0841333e8f0d8e14c50ff1ea2c288
BLAKE2b-256 4f2034b29e1b884038d03e41b51f064f8f8eba636aa4f24e13e1999592bbdaab

See more details on using hashes here.

File details

Details for the file water_conflict_classifier-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for water_conflict_classifier-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0e1d148ced22acac00ab956966a14e746f632626c8b61fe761bc3a3f1a1bbfa9
MD5 77a00028c0fb99b7e43c58a00f1d7e4b
BLAKE2b-256 20cda8246304b5d353f1f689dc655dc380bc2e8e32f06c64c03b6f671036a8b1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page