Crowd-Kit is a powerful Python library that implements commonly-used aggregation methods for crowdsourced annotation and offers the relevant metrics and datasets. We strive to implement functionality that simplifies working with crowdsourced data.
Currently, Crowd-Kit contains:
- implementations of commonly-used aggregation methods for categorical, pairwise, textual, and segmentation responses;
- metrics of uncertainty, consistency, and agreement with aggregate;
- loaders for popular crowdsourced datasets.
Also, the learning subpackage contains PyTorch implementations of deep learning from crowds methods and advanced aggregation algorithms.
To install Crowd-Kit, run the following command: pip install crowd-kit. If you also want to use the learning subpackage, type pip install crowd-kit[learning].
If you are interested in contributing to Crowd-Kit, use uv to manage the dependencies:
uv venv
uv pip install -e '.[dev,docs,learning]'
uv tool run pre-commit installWe use pytest for testing and a variety of linters, including pre-commit, Black, isort, Flake8, pyupgrade, and nbQA, to simplify code maintenance.
This example shows how to use Crowd-Kit for categorical aggregation using the classical Dawid-Skene algorithm.
First, let us do all the necessary imports.
from crowdkit.aggregation import DawidSkene
from crowdkit.datasets import load_dataset
import pandas as pdThen, you need to read your annotations into Pandas DataFrame with columns task, worker, label. Alternatively, you can download an example dataset:
df = pd.read_csv('results.csv') # should contain columns: task, worker, label
# df, ground_truth = load_dataset('relevance-2') # or download an example datasetThen, you can aggregate the workers' responses using the fit_predict method from the scikit-learn library:
aggregated_labels = DawidSkene(n_iter=100).fit_predict(df)Below is the list of currently implemented methods, including the already available (β ) and in progress (π‘).
| Method | Status |
|---|---|
| Majority Vote | β |
| One-coin Dawid-Skene | β |
| Dawid-Skene | β |
| Gold Majority Vote | β |
| M-MSR | β |
| Wawa | β |
| Zero-Based Skill | β |
| GLAD | β |
| KOS | β |
| MACE | β |
| Method | Status |
|---|---|
| Binary Relevance | β |
| Method | Status |
|---|---|
| RASA | β |
| HRRASA | β |
| ROVER | β |
| Method | Status |
|---|---|
| Segmentation MV | β |
| Segmentation RASA | β |
| Segmentation EM | β |
| Method | Status |
|---|---|
| Bradley-Terry | β |
| Noisy Bradley-Terry | β |
Tip
Consider using the more modern Evalica library to aggregate pairwise comparisons.
| Method | Status |
|---|---|
| CrowdLayer | β |
| CoNAL | β |
- Ustalov D., Pavlichenko N., Tseitlin B. (2024). Learning from Crowds with Crowd-Kit. Journal of Open Source Software, 9(96), 6227
@article{CrowdKit,
author = {Ustalov, Dmitry and Pavlichenko, Nikita and Tseitlin, Boris},
title = {{Learning from Crowds with Crowd-Kit}},
year = {2024},
journal = {Journal of Open Source Software},
volume = {9},
number = {96},
pages = {6227},
publisher = {The Open Journal},
doi = {10.21105/joss.06227},
issn = {2475-9066},
eprint = {2109.08584},
eprinttype = {arxiv},
eprintclass = {cs.HC},
language = {english},
}Please use GitHub Issues to seek support and submit feature requests. We accept contributions to Crowd-Kit via GitHub as according to our guidelines in CONTRIBUTING.md.
Β© Crowd-Kit team authors, 2020β2025. Licensed under the Apache License, Version 2.0. See LICENSE file for more details.