当前位置: 首页 > news >正文

数据标注开源框架 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 代码方式

可视化方式如下图,需要配置标注的文本字段的名称,如图中的 $reviewreview这个名称是步骤二中上传的文档里的其中一个字段的名称。

再看下图中的 Add choices 。此配置是数据标注的选项,默认有三个选项:正向、中性和负向。

以上两个配置好以后,就可以在右侧的 UI preview中看到标注人员的预览界面。给你一段文字和三个选项,你只需要用鼠标点击其中某一个或多个选项即可,也可以使用选项右上角的快捷键1、2、3。

代码方式采用 XML 格式,语法非常简单,本文不做重点介绍。

创建好以后的项目列表如下图

点击列表中某一项任务,如下图

集成机器学习后端

Label Studio ML 后端是一个SDK,可以包装您的机器学习代码并将其转换为Web服务器。Web服务器可以连接到正在运行的 Label Studio 实例以自动执行标签任务。Label Studio 提供了一个代码示例库,用户可以拿来使用或者自己扩展。

Label Studio 的机器学习( ML )后端,可以提供以下几个功能:

  • 预标注:在标注师人工标注之前,ML可提前预测标签作为参考;
  • 交互式标注:每标注完一个标签,就能更新完善ML模型,使模型更精准实时;
  • 模型评估和微调:标注师可以审查模型的准确性,对模型进行纠正。

MLLabel 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)循环,即每当有新的标注提交时,系统会自动触发模型训练。即在任务界面点了 SubmitUpdate 按钮之后, 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.txtrequirements_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 modelself.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博客

相关文章:

数据标注开源框架 Label Studio

数据标注开源框架 Label Studio Label Studio 是一个开源的、灵活的数据标注平台,旨在帮助开发者和数据科学家轻松创建高质量的训练数据集。它支持多种类型的数据(如文本、图像、音频、视频等)以及复杂的标注任务(如分类、命名实体…...

MyBatis最佳实践:MyBatis 框架的缓存

缓存的概念: 在内存中临时存储数据,速度快,可以减少数据库的访问次数经常需要查询,不经常修改的数据,不是特别重要的数据都适合存储到缓存中 缓存的级别: 一级缓存(默认开启):SqlSession 级别 …...

基于LangGraph、Groq和Tavily打造可以调用外部搜索引擎工具的对话机器人(核心代码 万字详解)

一、python环境 & 相关库版本信息 代码运行在 conda 创建的python环境下,python和相关库的版本信息如下: $ python --version Python 3.12.3$ pip list | grep langchain langchain 0.3.15 langchain-community 0.3.15 lang…...

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…...

PHP校园助手系统小程序

🔑 校园助手系统 —— 智慧校园生活 📱一款基于ThinkPHPUniapp框架深度定制的校园助手系统,犹如一把智慧之钥,专为校园团队精心打造,解锁智慧校园生活的无限精彩。它独家适配微信小程序,无需繁琐的下载与安…...

如何在Spring Boot项目中高效集成Spring Security

1 Spring Security 介绍 Spring Security 是一个功能强大且高度可定制的安全框架,专为保护基于Java的应用程序而设计。它不仅提供了认证(Authentication)和授权(Authorization)的功能,还支持防止各种常见的安全攻击模式。本文将详细介绍Spring Security的主要特点、功能…...

【PostgreSQL内核学习 —— (WindowAgg(一))】

WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...

PAT甲级-1020 Tree Traversals

题目 题目大意 给出一棵树的后序遍历和中序遍历,要求输出该树的层序遍历。 思路 非常典型的树的构建与遍历问题。后序遍历和中序遍历可以得出一个树的结构,用递归锁定根节点,然后再遍历左右子树,我之前发过类似题目的博客&…...

LVGL+FreeRTOS实战项目:智能健康助手(Max30102篇)

MAX30102 心率血氧模块简介 功能:用于检测心率和血氧饱和度,集成了红外和红光 LED 以及光电二极管。 接口:支持 I2C 通信,默认 I2C 地址为 0x57。 应用:广泛用于健康监测设备中,如智能手环、手表等。 硬…...

人脸识别【python-基于OpenCV】

1. 导入并显示图片 #导入模块 import cv2 as cv#读取图片 imgcv.imread(img/wx(1).jpg) #路径名为全英文,出现中文 图片加载失败,"D:\picture\wx.jpg" #显示图片 (显示标题,显示图片对象) cv.imshow(read_picture,im…...

redis常用命令和内部编码

文章目录 redis 为什么快redis中的Stringsetsetnxsetex getmsetmget计数操作incr、incrby、decr、decrby、incrbyfloatincrincrbyincrbyfloat 拼接(append)、获取(getrange)、修改字符串(setrange)、获取字符串长度(strlen)操作appendgetrangesetrangest…...

UI操作总结

该类 SolarWebx 继承自 Webx 和 IUixLikeMixin,主要用于扩展 giraffe.EasyUILibrary 的功能,提供了一系列与网页操作、元素定位、截图、图片处理等相关的方法。以下是对该类中每个方法的简要总结: __init__ 方法 作用:初始化 Sola…...

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…...

力扣hot100-->滑动窗口、贪心

你好呀,欢迎来到 Dong雨 的技术小栈 🌱 在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。 👉 我的小世界:Dong雨 📌 分享我的学习旅程 🛠️ 提供贴心的实用工具 💡 记…...

Linux 内核中的高效并发处理:深入理解 hlist_add_head_rcu 与 NAPI 接口

在 Linux 内核的开发中,高效处理并发任务和数据结构的管理是提升系统性能的关键。特别是在网络子系统中,处理大量数据包的任务对性能和并发性提出了极高的要求。本文将深入探讨 Linux 内核中的 hlist_add_head_rcu 函数及其在 NAPI(网络接收处理接口)中的应用,揭示这些机制…...

centos哪个版本建站好?centos最稳定好用的版本

在信息化飞速发展的今天,服务器操作系统作为构建网络架构的基石,其稳定性和易用性成为企业和个人用户关注的重点。CentOS作为一款广受欢迎的开源服务器操作系统,凭借其强大的性能、出色的稳定性和丰富的软件包资源,成为众多用户建…...

软件越跑越慢的原因分析

如果是qt软件,可以用Qt Creator Profiler 作性能监控如果是通过web请求,可以用JMeter监控。 软件运行过程中逐渐变慢的现象,通常是因为系统资源(如 CPU、内存、磁盘 I/O 等)逐渐被消耗或软件中存在性能瓶颈。这个问题…...

LeetCode 力扣热题100 二叉树的直径

class Solution { public:// 定义一个变量 maxd,用于存储当前二叉树的最大直径。int maxd 0; // 主函数,计算二叉树的直径。int diameterOfBinaryTree(TreeNode* root) {// 调用 maxDepth 函数进行递归计算,并更新 maxd。maxDepth(root);// …...

【图文详解】lnmp架构搭建Discuz论坛

安装部署LNMP 系统及软件版本信息 软件名称版本nginx1.24.0mysql5.7.41php5.6.27安装nginx 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 关闭防火墙 systemctl stop firewalld &&a…...

小哆啦解题记:整数转罗马数字

小哆啦解题记:整数转罗马数字 小哆啦开始力扣每日一题的第十四天 https://leetcode.cn/problems/integer-to-roman/submissions/595220508/ 第一章:神秘的任务 一天,哆啦A梦接到了一项任务——将一个整数转换为罗马数字。他心想:…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...