数据标注开源框架 Label Studio
数据标注开源框架 Label Studio
Label Studio
是一个开源的、灵活的数据标注平台,旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据(如文本、图像、音频、视频等)以及复杂的标注任务(如分类、命名实体识别、边界框标注、语义分割等)。通过直观的用户界面和强大的 API 集成,Label Studio 为构建和训练机器学习模型提供了坚实的基础。
安装/启动
# 进入虚拟环境
conda activate label_studio
# 安装
pip install label-studio
# 启动,默认8080端口
label-studio start
# 后台启动
nohup label-studio start &
# 指定端口启动
label-studio start --port 9001
访问:http://localhost:8080
第一次访问,填写Email地址和登录密码创建登录账号,访问登录页
创建项目
点击右上角的Create按钮,弹出框上有三个Tab页面,代表创建项目的三个步骤。
- 第一步,填写项目名称;
- 第二步,数据导入。支持txt,csv等常见格式;
- 第三步,设置标签。为了简化设置,你可以选择一个模板。Label Studio自带的模板支持的范围很广,常见的大类就有计算机视觉、自然语言处理、语音处理等,每个大类下面又分很多小类,例如自然语言处理大类下面有文本分类、关系抽取、机器翻译和文本摘要等。
选择了一个模板以后,可以根据自己的需求设置标签。两种方式设置标签:
- Visual 可视化方式
- Code 代码方式
可视化方式如下图,需要配置标注的文本字段的名称,如图中的 $review
,review
这个名称是步骤二中上传的文档里的其中一个字段的名称。
再看下图中的 Add choices
。此配置是数据标注的选项,默认有三个选项:正向、中性和负向。
以上两个配置好以后,就可以在右侧的 UI preview
中看到标注人员的预览界面。给你一段文字和三个选项,你只需要用鼠标点击其中某一个或多个选项即可,也可以使用选项右上角的快捷键1、2、3。
代码方式采用 XML 格式,语法非常简单,本文不做重点介绍。
创建好以后的项目列表如下图
点击列表中某一项任务,如下图
集成机器学习后端
Label Studio ML
后端是一个SDK,可以包装您的机器学习代码并将其转换为Web服务器。Web服务器可以连接到正在运行的 Label Studio
实例以自动执行标签任务。Label Studio
提供了一个代码示例库,用户可以拿来使用或者自己扩展。
Label Studio
的机器学习( ML
)后端,可以提供以下几个功能:
- 预标注:在标注师人工标注之前,ML可提前预测标签作为参考;
- 交互式标注:每标注完一个标签,就能更新完善ML模型,使模型更精准实时;
- 模型评估和微调:标注师可以审查模型的准确性,对模型进行纠正。
ML
和 Label Studio
的交互流程是:
- 用户打开任务
Label Studio
发送请求给ML
后端ML
后端对请求的数据进行预测- 预测结果返回给
Label Studio
并显示在UI
中
启动后端
# 安装
git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend/
pip install -e .
# 启动示例中的机器学习后端,sklearn_text_classifier 是利用线性回归算法对文本进行分类的示例
cd /opt/label_studio/label-studio-ml-backend/label_studio_ml/examples/sklearn_text_classifier
label-studio-ml start ../sklearn_text_classifier
# 启动指定主机和端口
label-studio-ml start ../sklearn_text_classifier -p 9091 --host 0.0.0.0
# 验证后端是否启动成功
curl http://localhost:9090/
label-studio-ml start
启动命令在哪个路径下执行,模型文件 model.pkl
就会在哪个路径下更新,所以一定要在算法的后端目录下执行启动命令。
例如,如果在 examples
目录下执行 label-studio-ml start sklearn_text_classifier
,则 model.pkl
会保存在 examples
目录下。
添加到 Label Studio
点击项目列表右上角的 Settings
按钮
选择 Model
选项卡,点击 Connect Model
按钮
将后端服务的地址填进去,点击 Validate and Save
按钮。其中, Interactivate preannotations
配置如果打开,表示允许以交互方式向机器学习的后端服务发送请求。
打开了Interactivate preannotations
开关,会在任务界面的下面出现一个 Auto-Annotation
的开关。
Interactivate preannotations
开关的作用是使 Label Studio
在标注过程中实时与 ML
后端进行交互,系统会动态地请求模型生成标注建议,并立即将这些建议展示给标注人员
点击 Validate and Save
按钮后,如果验证通过,会出现如下界面, Connected
状态表示 Label Studio
和机器学习后端服务连接成功。
Start model training on annotation submission
****这个开关的意思是它可以让你实现一个主动学习(Active Learning)循环,即每当有新的标注提交时,系统会自动触发模型训练。即在任务界面点了 Submit
或 Update
按钮之后, Label Studio
会调用 ML
接口请求对模型进行训练,以达到对模型微调的效果。
预标注
选择 Annotation
选项卡, 打开预标注( Prelabeling
)开关,表示在项目创建伊始,就会预先调用后端服务进行预测,并将预测保存。当然这只是预测操作,最终的标注结果还是要标注师点击 Submit
按钮保存标注结果。
编写自己的后端
Label Studio ML
后端是一个SDK,可用于包装机器学习模型代码并将其转换为Web服务器。
首先创建自己的空 ML
后端
label-studio-ml create my_ml_backend
创建后的目录结构如下
my_ml_backend/
├── Dockerfile
├── .dockerignore
├── docker-compose.yml
├── model.py
├── _wsgi.py
├── README.md
├── requirements-base.txt
├── requirements-test.txt
├── requirements.txt
└── test_api.py
Dockerfile
、**docker-compose.yml
和.dockerignore
**用于使用Docker运行ML后端model.py
是主文件,可以在其中实现自己的训练和推理逻辑- **
_wsgi.py
**是一个帮助文件,用于使用Docker运行ML后端,不需要修改它 requirements.txt
是放置Python依赖的地方- **
requirements_base.txt
和requirements_test.txt
**是基本的依赖项,不需要修改它 - **
test_API.py
**是放置模型测试的地方
覆盖**model.py
**文件中的 predict
方法,实现自己的预测推理逻辑
def predict(self, tasks, context, **kwargs):
"""Make predictions for the tasks."""
return predictions
覆盖**model.py
文件中的fit
**方法,实现自己的训练逻辑
def fit(self, event, data, **kwargs):
"""Train the model on the labeled data."""
old_model = self.get('old_model')
# write your logic to update the model
self.set('new_model', new_model)
参考
- Label Studio 官网
Label Studio Documentation — Quick start guide for Label Studio
- 教程:使用 Label Studio 的 machine learning backend 进行辅助标注和训练
教程:使用 Label Studio 的 machine learning backend 进行辅助标注和训练 | OpenBayes 贝式计算
- A.2【数据标注】:基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等
A.2【数据标注】:基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等_label studio关系抽取标注已有实体-CSDN博客