为每条样本打一个或多个类别标签,是几乎所有监督学习项目的必经之路。看似简单,做好却需要规范、工具和质量控制。
给每条数据分配预定义类别中的一个或多个标签
情感分析、垃圾邮件过滤、图文分类、意图识别等
★☆☆☆☆ 入门级,标注效率高,适合众包
每条样本只能属于一个类别,互斥关系。
每条样本可以同时属于多个类别,独立勾选。
类别之间有父子关系,先选大类再选小类。
明确有哪些类别、互斥还是多选、以及遇到模棱两可的样本怎么判(如"一般吧不算好也不算差"算正面还是负面?)。产出 label_guide.md
按格式准备数据,选标注工具(开源/商业/自研)
人工逐条打标,可用 LLM 做弱监督预标注提速
导出标注结果,做数据分布检查
| 工具 | 类型 | 费用 | 分类标注 | 亮点 |
|---|---|---|---|---|
| Label Studio ▼ | 开源自部署 | 免费 | ✅ 强 | 支持 text/image/audio,插件丰富 |
| Doccano | 开源自部署 | 免费 | ✅ 强 | 专为 NLP 设计,界面极简 |
| Labelbox | SaaS 平台 | 付费 | ✅ 强 | UI 精致,团队协作好 |
| Prodigy | Python 库 | 付费 | ✅ 强 | 主动学习 + spaCy 生态 |
# 1. 启动 Label Studio(Docker 一键起) docker run -p 8080:8080 -v $(pwd)/mydata:/label-studio/data \ heartexlabs/label-studio:latest # 2. 准备待标注数据 (JSONL) import json with open('reviews.jsonl', 'r') as f: for line in f: item = json.loads(line) print('{"text": "%s"}' % item['review']) # 3. Label Studio 里配置标签 → 批量导入 → 开始标注 # 4. 导出结果后用 Python 解析 import pandas as pd import json with open('annotations.json') as f: data = json.load(f) rows = [] for item in data: text = item['data']['text'] # 提取第一个标注结果 labels = item['annotations'][0]['result'] tag = labels[0]['value']['choices'] rows.append({'text': text, 'label': tag[0]}) df = pd.DataFrame(rows) print(df.head())