Nkululeko 1.0: A Python package to predict speaker characteristics with a high-level interface
Nkululeko 1.0: A Python package to predict speaker characteristics with a high-level interface - Published in JOSS (2025)
Science Score: 95.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 1 DOI reference(s) in JOSS metadata -
✓Academic publication links
Links to: zenodo.org -
✓Committers with academic emails
1 of 14 committers (7.1%) from academic institutions -
○Institutional organization owner
-
✓JOSS paper metadata
Published in Journal of Open Source Software
Keywords
Repository
Machine learning speaker characteristics
Basic Info
Statistics
- Stars: 41
- Watchers: 3
- Forks: 10
- Open Issues: 22
- Releases: 24
Topics
Metadata Files
README.md
Nkululeko
Nkululeko is a software to detect speaker characteristics by machine learning experiments with a high-level interface. The idea is to have a framework (based on e.g. sklearn and torch) that can be used to rapidly and automatically analyse audio data and explore machine learning models based on that data.
Some abilities that Nkululeko provides: combines acoustic features and machine learning models (including feature selection and features concatenation); performs data exploration, selection and visualization the results; finetuning; ensemble learning models; soft labeling (predicting labels with pre-trained model); and inference the model on a test set.
Nkululeko orchestrates data loading, feature extraction, and model training, allowing you to specify your experiment in a configuration file. The framework handles the process from raw data to trained model and evaluation, making it easy to run machine learning experiments without directly coding in Python.
Who is this for?
Nkululeko is for speech processing learners, researchers and ML practitioners focused on speaker characteristics, e.g., emotion, age, gender, or disorder detection.
Installation
Nkululeko requires Python 3.9 or higher with the following build status:
Create and activate a virtual Python environment and simply install Nkululeko:
```bash
using python venv
python -m venv .env source .env/bin/activate # specify OS versions, add a separate line for Windows users pip install nkululeko
using uv in development mode
uv venv --python 3.12 source .venv/bin/activate uv pip install -r requirements.txt
or run directly using uv run after cloning
uv run python -m nkululeko.nkululeko --config examples/exppolishtree.ini ```
Optional Dependencies
Nkululeko supports optional dependencies through extras:
```bash
Install with PyTorch support
pip install nkululeko[torch]
Install with CPU-only PyTorch
pip install nkululeko[torch-cpu]
Install with TensorFlow support
pip install nkululeko[tensorflow]
Install all optional dependencies
pip install nkululeko[all] ```
Manual Installation Options
You can also install dependencies manually:
PyTorch Installation
For CPU-only installation (recommended for most users):
bash
pip install torch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 --index-url https://download.pytorch.org/whl/cpu
For GPU support (cuda 12.6):
bash
pip install torch torchvision torchaudio
Some functionalities require extra packages to be installed, which we didn't include automatically:
- For spotlight adapter:
bash pip install PyYAML # Install PyYAML first to avoid dependency issues pip install nkululeko[spotlight]
Some examples for ini-files (which you use to control nkululeko) are in the examples folder.
Documentation
The documentation, along with extensions of installation, usage, INI file format, and examples, can be found nkululeko.readthedocs.io.
Usage
ini-file values
Basically, you specify your experiment in an "ini" file (e.g. experiment.ini) and then call one of the Nkululeko interfaces to run the experiment like this:
bash
python -m nkululeko.nkululeko --config experiment.ini
A basic configuration looks like this:
ini
[EXP]
root = ./
name = exp_emodb
[DATA]
databases = ['emodb']
emodb = ./emodb/
emodb.split_strategy = speaker_split
target = emotion
labels = ['anger', 'boredom', 'disgust', 'fear']
[FEATS]
type = ['praat']
[MODEL]
type = svm
[EXPL]
model = tree
plot_tree = True
Read the Hello World example for initial usage with Emo-DB dataset.
Here is an overview of the interfaces/modules:
All of them take --config
- nkululeko.nkululeko: do machine learning experiments combining features and learners (e.g. opensmile with SVM)
- nkululeko.ensemble: combine several nkululeko experiments and report on late fusion results
- nkululeko.multidb: do multiple experiments, comparing several databases cross and in itself
- nkululeko.demo: demo the current best model on the command line
- nkululeko.test: predict a given data set with the current best model
- nkululeko.explore: perform data exploration
- nkululeko.augment: augment the current training data
- nkululeko.aug_train: augment the current training data and do a training including this data
- nkululeko.predict: predict features like SNR, MOS, arousal/valence, age/gender, with DNN models
- nkululeko.segment: segment a database based on VAD (voice activity detection)
- nkululeko.resample: check on all sampling rates and change to 16kHz
- nkululeko.optim: do meta parameter optimization (e.g. grid search for SVM C and gamma)
- nkululeko.flags: a convenient module to conduct multiple experiments with different configuration parameters on the command line.
Hello World example
- NEW: Here's a Google colab that runs this example out-of-the-box, and here is the same with Kaggle
- I made a video to show you how to do this on Windows
- Set up Python on your computer, version >= 3.8
- Open a terminal/command line/console window
- Test python by typing
python, python should start with version >3 (NOT 2!). You can leave the Python Interpreter by typing exit() - Create a folder on your computer for this example, let's call it
nkulu_work - Get a copy of the Berlin emodb in audformat and unpack inside the folder you just created (
nkulu_work) - Make sure the folder is called "emodb" and does contain the database files directly (not box-in-a-box)
- Also, in the
nkulu_workfolder:- Create a Python environment
python -m venv venv- Then, activate it:
- under Linux / mac
source venv/bin/activate
- under Windows
venv\Scripts\activate.bat
- if that worked, you should see a
(venv)in front of your prompt - Install the required packages in your environment
pip install nkululeko- Repeat until all error messages vanish (or fix them, or try to ignore them)...
- Now you should have two folders in your nkulu_work folder:
- emodb and venv
- Download a copy of the file exp_emodb.ini to the current working directory (
nkulu_work) - Run the demo
python -m nkululeko.nkululeko --config exp_emodb.ini
- Find the results in the newly created folder exp_emodb
- Inspect
exp_emodb/images/run_0/emodb_xgb_os_0_000_cnf.png - This is the main result of your experiment: a confusion matrix for the emodb emotional categories
- Inspect
- Inspect and play around with the demo configuration file that defined your experiment, then re-run.
- There are many ways to experiment with different classifiers and acoustic feature sets, all described here
Features
The framework is targeted at the speech domain and supports experiments where different classifiers are combined with different feature extractors.
- Classifiers: Naive Bayes, KNN, Tree, XGBoost, SVM, MLP
- Feature extractors: Praat, Opensmile, openXBOW BoAW, TRILL embeddings, Wav2vec2 embeddings, audModel embeddings, ...
- Feature scaling
- Label encoding
- Binning (continuous to categorical)
- Online demo interface for trained models
- Visualization: confusion matrix, feature importance, feature distribution, epoch progression, t-SNE plot, data distribution, bias checking, uncertainty estimation
Here's a rough UML-like sketch of the framework (and here's the real one done with pyreverse).

Currently, the following linear classifiers are implemented (integrated from sklearn): * SVM, SVR, XGB, XGR, Tree, Treeregressor, KNN, KNNregressor, NaiveBayes, GMM and the following ANNs (artificial neural networks) * MLP (multi-layer perceptron), CNN (convolutional neural network)
For visualization, besides confusion matrix, feature importance, feature distribution, t-SNE plot, data distribution (just names a few), Nkululeko can also be used for bias checking, uncertainty estimation, and epoch progression.
Bias checking
Uncertainty
Here's an animation that shows the progress of classification done with nkululeko.
News
License
Nkululeko can be used under the MIT license.
Contributing
Contributions are welcome and encouraged. To learn more about how to contribute to nkululeko, please refer to the Contributing guidelines.
Citation
If you use Nkululeko, please cite the paper:
F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schuller: Nkululeko: A Tool For Rapid Speaker Characteristics Detection, Proc. Proc. LREC, 2022
@inproceedings{Burkhardt:lrec2022,
title = {Nkululeko: A Tool For Rapid Speaker Characteristics Detection},
author = {Felix Burkhardt and Johannes Wagner and Hagen Wierstorf and Florian Eyben and Björn Schuller},
isbn = {9791095546726},
journal = {2022 Language Resources and Evaluation Conference, LREC 2022},
keywords = {machine learning,speaker characteristics,tools},
pages = {1925-1932},
publisher = {European Language Resources Association (ELRA)},
year = {2022},
}
JOSS Publication
Nkululeko 1.0: A Python package to predict speaker characteristics with a high-level interface
Authors
Tags
speech machine learning data exploration speaker characteristicsGitHub Events
Total
- Create event: 59
- Commit comment event: 3
- Release event: 2
- Issues event: 54
- Watch event: 8
- Delete event: 4
- Issue comment event: 95
- Push event: 245
- Pull request review comment event: 65
- Pull request review event: 90
- Pull request event: 110
- Fork event: 3
Last Year
- Create event: 57
- Commit comment event: 1
- Release event: 2
- Issues event: 51
- Watch event: 8
- Delete event: 4
- Issue comment event: 86
- Push event: 233
- Pull request review comment event: 65
- Pull request review event: 90
- Pull request event: 105
- Fork event: 3
Committers
Last synced: 5 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| FBurkhardt | f****t@a****m | 877 |
| Bagus Tris Atmaja | b****s@y****m | 223 |
| Felix Burkhardt | f****k@g****m | 208 |
| Bagus Tris Atmaja | b****s@o****m | 159 |
| felixbur | f****r@u****m | 93 |
| Bagus Tris Atmaja | b****a@g****m | 72 |
| b-atmaja | b****a@a****p | 47 |
| bagustris | b****s@u****m | 31 |
| Devin AI | 1****]@u****m | 22 |
| Bagus Tris Atmaja | b****s@e****d | 12 |
| Bagus Tris Atmaja | b****s@n****p | 3 |
| Bagus Tris Atmaja | b****s@c****p | 1 |
| FBurkhardt | f****t@A****l | 1 |
| google-labs-jules[bot] | 1****]@u****m | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 4 months ago
All Time
- Total issues: 125
- Total pull requests: 176
- Average time to close issues: 3 months
- Average time to close pull requests: 1 day
- Total issue authors: 5
- Total pull request authors: 6
- Average comments per issue: 1.98
- Average comments per pull request: 0.26
- Merged pull requests: 154
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 31
- Pull requests: 87
- Average time to close issues: 13 days
- Average time to close pull requests: 1 day
- Issue authors: 4
- Pull request authors: 6
- Average comments per issue: 0.74
- Average comments per pull request: 0.24
- Merged pull requests: 71
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- felixbur (82)
- bagustris (38)
- Pascal-H (3)
- fakufaku (1)
- isdanni (1)
Pull Request Authors
- bagustris (141)
- felixbur (31)
- Copilot (1)
- febaCODE2025 (1)
- kally1218 (1)
- faroit (1)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- pypi 1,744 last-month
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 243
- Total maintainers: 1
pypi.org: nkululeko
Machine learning audio prediction experiments based on templates
- Homepage: https://github.com/felixbur/nkululeko
- Documentation: https://github.com/felixbur/nkululeko
- License: MIT
-
Latest release: 1.0.1
published 4 months ago
