编写您自己的机器学习后端
使用Label Studio ML后端将Label Studio与机器学习模型集成。Label Studio ML后端是一个SDK,可用于封装您的机器学习模型代码并将其转换为Web服务器。该机器学习服务器使用uWSGI和supervisord,并通过RQ处理后台训练任务。
按照以下步骤使用Label Studio ML SDK封装自定义机器学习模型代码,或查看我们的示例ML后端库,与流行的机器学习框架和工具(如Huggingface的Transformers、OpenAI、Langchain等)集成。
有关使用Label Studio示例后端的信息,请参阅设置示例ML后端。
企业
Label Studio Enterprise 提供了一套开箱即用的LLM辅助标注解决方案。您只需连接我们支持的模型之一即可开始使用。更多信息,请参阅Prompts。
如需视频教程,请参阅以下内容:
1. 安装ML后端仓库
从仓库下载并安装 label-studio-ml-backend
:
git clone https://github.com/HumanSignal/label-studio-ml-backend.git
cd label-studio-ml-backend/
pip install -e .
2. 创建一个空的机器学习后端
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后端(您无需修改此文件)。README.md
必须包含如何运行ML后端的说明。requirements.txt
是存放Python依赖项的文件。requirements_base.txt
和requirements_test.txt
是基础依赖项(您无需修改此部分)test_api.py
是存放模型测试文件的地方
3. 实现预测逻辑
在您的模型目录中,找到model.py
文件(例如:my_ml_backend/model.py
)。
model.py
文件包含一个继承自 LabelStudioMLBase
的类声明。该类为 Label Studio 用于与 ML 后端通信的 API 方法提供了封装。您可以重写这些方法来实现自己的逻辑:
def predict(self, tasks, context, **kwargs):
"""Make predictions for the tasks."""
return predictions
predict
方法用于对任务进行预测。它使用以下内容:
tasks
: Label Studio任务以JSON格式context
: Label Studio 上下文,JSON格式 - 用于交互式标注场景predictions
: JSON格式的预测结果数组
一旦你实现了predict
方法,就可以在Label Studio中看到来自连接的机器学习后端的预测结果。
支持在您的ML后端中进行交互式预标注
如果希望在机器学习后端支持交互式预标注功能,可以使用predict()
方法编写推理调用。关于文本标注项目中实现此功能的示例,请参阅此子字符串匹配代码示例。
完成以下步骤:
- 按照上述方式使用
predict()
方法定义推理调用。predict()
方法接收任务数据和上下文数据:
tasks
参数包含有关待预标注任务的详细信息。参见 Label Studio tasks in JSON format。context
参数包含在Label Studio中执行的标注操作详情,例如以Label Studio标注结果格式发送的高亮文本字符串。context
具有以下属性。annotation_id
: 标注ID。draft_id
: 草稿标注ID。user_id
: 用户ID。result
: 这是标注结果,但包含一个用户可修改的is_positive: true
标志。例如,通过按住Alt键并使用关键点在用户界面中与图像交互。
- 根据任务和上下文数据,利用从Label Studio接收的数据构建预测。
- 返回一个符合Label Studio预测格式的结果,该格式会根据执行的标注类型而变化。
有关如何在NER标注项目中执行此操作的更多详细信息,请参考上面链接的代码示例。
有关启用预标注的更多信息,请参阅交互式预标注。
4. 实现训练逻辑(可选)
你也可以实现fit
方法来训练你的模型。fit
方法通常用于在标注数据上训练模型,尽管它也可以用于任何需要数据持久化的任意操作(例如,将标注数据存储到数据库、保存模型权重、保留LLM提示历史记录等)。
默认情况下,在Label Studio中执行任何数据操作(如创建新任务或更新标注)时,都会调用fit
方法。您可以通过Webhooks来修改此行为。
要实现fit
方法,您需要在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)
包含:
event
: 事件类型。可以是'ANNOTATION_CREATED'
,'ANNOTATION_UPDATED'
等。data
: 从事件接收到的有效载荷(参见Webhook事件参考)。
此外,还有两个辅助方法可用于从ML后端存储和检索数据:
self.set(key, value)
- 在ML后端存储数据self.get(key)
- 从ML后端检索数据
这两种方法都可以在机器学习后端代码的其他地方使用,例如在predict
方法中获取新的模型权重。
通过Webhooks触发训练
从Label Studio 1.4.1版本开始,当您向项目添加机器学习后端时,Label Studio会创建一个指向该后端的webhook,以便在每次创建或更新标注时发送事件通知。
默认情况下,webhook事件的有效负载不包含标注本身。您可以通过以下方式获取标注:修改Label Studio发送的webhook事件以发送完整负载,或使用Label Studio API通过按ID获取标注端点、使用SDK的按ID获取任务方法,或从您设置的存储标注的目标存储中检索。
查看标注webhook事件参考获取关于webhook事件的更多详细信息。
其他方法和参数
LabelStudioMLBase
类中还提供了其他方法和参数:
self.label_interface
- 返回Label Studio标签界面对象,该对象包含标注任务的所有相关信息。self.model_version
- 返回当前模型版本。
4. 确保机器学习后端能够访问Label Studio数据
如果您的数据存储在云端、本地目录或已导入Label Studio,您需要设置LABEL_STUDIO_URL
和LABEL_STUDIO_API_KEY
环境变量。
更多信息,请参阅允许机器学习后端访问Label Studio数据。
5. 运行ML后端服务器
使用Docker Compose运行:
docker-compose up
ML后端服务器地址为http://localhost:9090
。当将ML后端连接到Label Studio时可以使用该URL。
备注
localhost
是一个特殊的域名,它会直接回环到您的本地环境。在Docker托管的容器实例中,这个域名会回环到容器本身,而不是托管容器的主机。Docker提供了一个特殊域名作为解决方案:docker.host.internal。如果您在Docker内部署Label Studio和ML后端服务,可以尝试使用该域名替代localhost。(http://host.docker.internal:9090
)
不使用Docker运行
要在不使用Docker的情况下运行(例如出于调试目的),可以使用以下命令:
pip install -r my_ml_backend
label-studio-ml start my_ml_backend
修改主机和端口
要修改主机和端口,请使用以下命令行参数:
label-studio-ml start my_ml_backend -p 9091 --host 0.0.0.0
测试您的机器学习后端
修改my_ml_backend/test_api.py
文件以确保您的机器学习后端按预期工作。
6. 将机器学习后端连接到Label Studio
您可以通过API或设置 > 模型进行操作。更多详情请参阅将模型连接到Label Studio。