Crowd-Kit:众包的计算质量控制
Crowd-Kit 是一个功能强大的 Python 库,实现了众包标注中常用的聚合方法,并提供了相关的指标和数据集。我们致力于实现简化众包数据处理的各项功能。
目前,Crowd-Kit 包含:
- 针对分类、成对、文本和分割响应的常用聚合方法的实现;
- 不确定性、一致性与聚合结果一致性的指标;
- 流行众包数据集的加载器。
此外,learning 子包包含众包深度学习的 PyTorch 实现以及高级聚合算法。
安装
要安装 Crowd-Kit,请运行以下命令:pip install crowd-kit。如果您还想使用 learning 子包,请输入 pip install crowd-kit[learning]。
如果您有兴趣为 Crowd-Kit 做出贡献,请使用 uv 来管理依赖项:
uv venv
uv pip install -e '.[dev,docs,learning]'
uv tool run pre-commit install
我们使用 pytest 进行测试,并使用多种 linter,包括 pre-commit、Black、isort、Flake8、pyupgrade 和 nbQA,以简化代码维护。
入门
本示例展示了如何使用 Crowd-Kit 通过经典的 Dawid-Skene 算法进行类别聚合。
首先,让我们完成所有必要的导入。
from crowdkit.aggregation import DawidSkene
from crowdkit.datasets import load_dataset
import pandas as pd
然后,你需要将你的注释读取到具有列 task、worker、label 的 Pandas DataFrame 中。或者,你可以下载一个示例数据集:
df = pd.read_csv('results.csv') # should contain columns: task, worker, label
# df, ground_truth = load_dataset('relevance-2') # or download an example dataset
然后,您可以使用 scikit-learn 库中的 fit_predict 方法来聚合工作节点的响应:
aggregated_labels = DawidSkene(n_iter=100).fit_predict(df)
已实现的聚合方法
以下是当前已实现方法的列表,包括已可用(✅)和进行中(🟡)的方法。
类别型响应
| 方法 | 状态 |
|---|---|
| 多数投票 | ✅ |
| 单硬币 Dawid-Skene | ✅ |
| Dawid-Skene | ✅ |
| 黄金多数投票 | ✅ |
| M-MSR | ✅ |
| Wawa | ✅ |
| 零基技能 | ✅ |
| GLAD | ✅ |
| KOS | ✅ |
| MACE | ✅ |
多标签响应
| 方法 | 状态 |
|---|---|
| 二元相关性 | ✅ |
文本型响应
| 方法 | 状态 |
|---|---|
| RASA | ✅ |
| HRRASA | ✅ |
| ROVER | ✅ |
图像分割
| 方法 | 状态 |
|---|---|
| 分割 MV | ✅ |
| 分割 RASA | ✅ |
| 分割 EM | ✅ |
成对比较
| 方法 | 状态 |
|---|---|
| Bradley-Terry | ✅ |
| 含噪 Bradley-Terry | ✅ |
[!TIP] 考虑使用更现代的 Evalica 库来聚合成对比较。
从众包中学习
| 方法 | 状态 |
|---|---|
| CrowdLayer | ✅ |
| CoNAL | ✅ |
引用
- Ustalov D., Pavlichenko N., Tseitlin B. (2024). 使用 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},
}
支持与贡献
请使用 GitHub Issues 寻求支持并提交功能请求。我们接受通过 GitHub 对 Crowd-Kit 的贡献,具体请遵循 CONTRIBUTING.md 中的指南。
许可证
© Crowd-Kit 团队作者,2020–2025。基于 Apache License, Version 2.0 授权。更多详情请参阅 LICENSE 文件。
