ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Label Studio Data Manager 完全指南:任务过滤、排序、Tab 分片与批量操作实战

Label Studio Data Manager 完全指南:任务过滤、排序、Tab 分片与批量操作实战 Label Studio Data Manager 完全指南任务过滤、排序、Tab 分片与批量操作实战【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studioData Manager数据管理器是 Label Studio 中查看与管理项目标注任务的核心页面支持对任务进行排序、过滤、Tab 分组、批量删除以及各类批量操作。本文围绕 manage_data.md 的完整功能脉络结合 data_manager 模块源码系统讲解 Data Manager 的过滤排序机制、Tab 用法、任务/标注删除流程与源码级实现原理帮助你高效组织标注队列并落地先标新数据按置信度排序标注多标注者分片协作等实战方案。Data Manager 是什么一行数据 一个标注任务Data Manager 页面集中展示了项目中的所有标注任务。每一行代表数据集中的一个标注任务Task你可以在此完成以下工作查看全部任务及其元信息ID、创建时间、标注数量、预测分数等通过过滤器与排序将数据切分成不同区块交由不同标注者处理或按预测分数、时间等字段调整标注顺序导入与导出数据对任务执行批量动作删除任务、删除标注、删除预测、触发预测等。从源码看Data Manager 的每个视图View/Tab在数据库中都有独立记录。data_manager/models.py 中的ViewBaseModel定义了视图的持久化结构data自定义视图数据、ordering排序参数、orderTab 从左到右的位置、selected_items选中的任务、filter_group关联的过滤器组以及user视图创建者。这意味着你保存的每个过滤器组合、排序方式和选中状态都会持久化下次打开依然生效。项目创建与配置相关的内容参见 Create and configure projects。任务状态任务在 Data Manager 中的流转在 Label Studio Enterprise 中每个任务在操作过程中会经历一系列状态如待标注、进行中、已标注、已跳过、待复审、已接受、已拒绝等。任务状态由 FSM有限状态机驱动核心定义位于 fsm/task_transitions.py 与 fsm/state_choices.py标注动作类型则定义在 tasks/choices.py如imported、submitted、skipped、accepted、rejected、fixed_and_accepted等。完整的任务状态流转说明参见 Project and Task State Management。过滤与排序项目数据过滤器和 Tab 可以帮你将数据拆分成不同区块交给不同标注者标注按预测分数或数据中的其他值设定特定顺序从而按优先级标注。一个关键区别是过滤和排序可以随时修改而任务采样task sampling决定的是整个项目级的任务顺序且不可更改。你在标注前对数据做的过滤与排序会直接影响标注界面中看到哪些任务、以什么顺序看到。Data Manager 中可用的过滤列Data Manager 的过滤列分为两大类均由 prepare_params.py 中的Column枚举定义任务级系统列以filter:tasks:前缀标识包括列标识类型含义filter:tasks:idNumber任务 IDfilter:tasks:inner_idNumber项目内任务序号从 1 开始filter:tasks:ground_truthBoolean任务是否为 ground truthfilter:tasks:annotations_resultsString任务的全部标注结果filter:tasks:predictions_scoreNumber任务的预测分数filter:tasks:predictions_model_versionsString生成预测的模型版本filter:tasks:predictions_resultsString任务的全部预测结果filter:tasks:file_uploadString创建任务时上传的文件名filter:tasks:created_atDatetime任务创建时间filter:tasks:updated_atDatetime任务更新时间如新增标注、复审等filter:tasks:annotatorsList完成任务的标注者Community 版可含已分配标注者Enterprise 版filter:tasks:total_predictionsNumber任务预测总数filter:tasks:cancelled_annotationsNumber任务被取消/跳过的标注数filter:tasks:total_annotationsNumber任务标注总数filter:tasks:completed_atDatetime任务完成全部标注的时间filter:tasks:agreementNumber任务标注一致性分数Enterprise 版filter:tasks:reviewersString复审该任务的复审者Enterprise 版filter:tasks:reviews_rejected/reviews_acceptedNumber复审中拒绝/接受的标注数Enterprise 版filter:tasks:comments/unresolved_comment_countNumber任务评论数 / 未解决评论数任务数据字段列task.data.*由项目的标注配置与导入数据决定例如filter:tasks:data.image、filter:tasks:data.text等。支持的过滤运算符Operator枚举prepare_params.py定义了完整的运算符集合equal/not_equal等于 / 不等于greater/greater_or_equal/less/less_or_equal数值/时间范围比较contains/not_contains包含 / 不包含exists/not_exists字段存在 / 不存在starts_with/ends_with前缀 / 后缀匹配inIs between/not_inIs not between介于 min 与 max 之间值格式为{min: 1, max: 7}in_listIs any of/not_in_listIs none of值是否为列表中元素之一值需为 JSON 数组如[1, 2, 3]或[a, b]仅支持任务 ID、Inner ID 与task.data.*字段。Type枚举定义了值类型NumberFloat 或 Integer、Datetimestrftime(%Y-%m-%dT%H:%M:%S.%fZ)格式、Boolean、String、List与UnknownUnknown 会显式转换为字符串格式。过滤器组合逻辑conjunction 与嵌套多个过滤器通过conjunction组合取值仅支持or或and二选一同一过滤器列表内不允许混用 and/or。底层模型中Filter 通过parent外键支持一层嵌套子过滤器与其父过滤器以 AND 语义合并且子过滤器不能再嵌套子过滤器。每个过滤器包含column字段名、type字段类型、operator运算符与value过滤值四个要素FilterGroup负责组合多个过滤器。示例一优先标注新数据按日期排序聚焦最新数据在项目中将数据的Order排序从默认值改为Created at创建时间。将排序方式改为升序ascending使最新创建的任务排在最前面。选择Label Tasks As Displayed按显示顺序标注任务从最新到最旧开始标注。排序字段在源码中以tasks:created_at形式表达加负号-tasks:created_at即表示降序ordering_schema。示例二按预测分数排序如果你上传了带预测分数的预标注数据或你的机器学习后端在模型输出中生成预测分数就可以按预测分数排序在项目中将数据的Order从默认值改为Prediction score预测分数字段。按升序或降序排列决定优先标注高置信度还是低置信度预测。选择Label Tasks As Displayed按预测分数顺序开始标注。也可以使用任务采样配合预测分数排序。源码层面预测分数对应predictions_score列含义为任务全部预测分数的平均值见 functions.py 中的列定义。示例三用 Tab 和过滤器拆分数据集面对大规模数据集如 300 张图片可以用 Tab 与过滤器拆成多个小区块配合 Tab 重命名实现按标注者分片在项目中创建过滤器条件为ID 字段 is between介于值 1 与 100。点击过滤器外部以查看该 Tab 下的过滤结果。点击 Tab 的垂直省略号选择Rename重命名以某个标注者的名字命名该 Tab。点击图标新建一个 Tab同样通过垂直省略号Rename命名为第二位标注者。在新 Tab 上创建过滤器ID 字段 is between值 101 与 200点击过滤器外部查看结果。点击再新建一个 Tab命名为第三位标注者。在新 Tab 上创建过滤器ID 字段 is between值 201 与 300点击过滤器外部查看结果。各标注者登录后导航到对应 Tab点击Label标注按钮即可标注自己分片内的任务子集。注意Community 版无法将标注者显式分配到具体任务用 Tab 重命名是一种变通的任务分配方式Enterprise 版则支持正式的标注者分配见下文。将过滤器保存为 Tab你可以在 Data Manager 中创建 Tab用于拆分数据集给不同标注者标注按任务状态分离任务已标注、有预测、未标注其他任何管理需求。Tab 可用的字段取决于你的标注配置因为标注配置定义了可过滤、可排序的数据字段。重要提醒如果修改了标注配置Data Manager 中已有的 Tab 会被移除。因此请务必先完成项目设置再搭建复杂的 Tab。从源码角度Tab 即View记录filter_group外键关联一组过滤器ordering保存排序参数order字段决定 Tab 从左到右的排列位置models.py。修改标注配置时项目会重建列结构旧 Tab 引用的列可能失效因此被整体清空。此外新版还支持 Tab 锁定is_locked/locked_by/locked_at字段锁定的 Tab 禁止修改配置防止协作中配置被意外改动。将标注者分配到任务Enterprise 版在 Label Studio Enterprise 中管理员或项目经理可以将标注者分配到特定项目的任务。前提是先将标注者添加到项目或工作区再为任务分配标注者。如果你使用手动任务分发模式则必须将标注者分配到任务。在 Data Manager 中选中项目中的任务。点击下拉菜单选择Assign Annotators分配标注者。选择标注者姓名点击箭头将标注者分配给选中的任务。点击Assign分配。批量分配技巧先用过滤器精确定位要分配的任务再点击 Data Manager 顶部的全选框选中当前显示的所有任务一次性分配给标注者。API 层面分配操作由 data_manager/actions 下的动作处理器执行动作按order排序并通过check_action_permission校验当前用户是否具备执行权限见 actions/init.py。删除任务或标注当存在重复任务或需要清空标注时可以删除任务或标注在 Label Studio UI 中打开要修改的项目。在 Data Manager 页面上过滤只显示要删除的数据。例如按特定标注、或按特定标注者的标注进行过滤。勾选要删除的任务或标注的复选框。点击带有任务数量的下拉菜单选择Delete tasks删除任务或Delete annotations删除标注。点击Ok确认操作。重要如果想修改标注界面或执行不同类型的标注应先把数据集的所有标注全选并删除。删除的源码级实现删除动作在 data_manager/actions/basic.py 中实现三个核心动作均注册了对应权限Delete Tasksdelete_tasks需要tasks_delete权限。实现上先将任务与项目解除关联queryset.update(projectNone)再通过异步任务删除任务并重置项目摘要project.summary.reset()。删除全部任务时项目下所有 Tab 也会被清除前端强制刷新reloadTrue同时向 webhook 发出TASKS_DELETED事件。Delete Annotationsdelete_tasks_annotations需要tasks_change与annotations_delete权限。可配合annotator参数仅删除指定标注者的标注。删除时同步清理任务级与标注级的草稿draft更新任务计数器与is_labeled标记并触发ANNOTATIONS_DELETEDwebhook。数据量大时以异步后台任务执行queue_namelow响应中携带async: True标志前端会高亮Refresh按钮等待任务完成避免第一次点击看似没删除的错觉。Delete Predictionsdelete_tasks_predictions需要predictions_any权限删除选中任务的全部预测并更新任务计数器。删除动作的对话框确认文本、可选的标注者下拉表单通过动作注册表中的dialog字段描述delete_tasks_annotations_form会动态生成标注者选择表单basic.py。一致性列Agreement ColumnsEnterprise 版Data Manager 中的一致性列反映任务内标注者之间的共识程度。完整的协议agreement计算说明参见 Task agreement。可用的协议列包括Agreement总体一致性任务的总体一致性计算方式为该任务所有 control tag 一致性分数的平均值详见 Overall agreement。[Control tag] agreement各控件标签一致性每个 control tag 拥有独立的一致性分数其计算方式取决于项目设置详见 Per-control-tag agreement。选择标注者与模型参与计算点击任一协议列可选择参与协议计算的特定标注者与模型默认情况下所有标注者不含模型被选中参与协议计算可以自定义为仅比较部分标注者、仅比较模型、或模型与标注者混合。例如共有 10 名标注者若只选 3 名总体一致性分数与各 control tag 的一致性分数都会基于你的选择重新计算。注意两点限制必须至少选择两个对象进行比较你的选择会同时应用于 Data Manager 中的所有协议列不能为不同协议列选择不同的标注者与模型组合。Ground truth 匹配如果项目包含 ground truth 标注可以使用此选项将单个标注者或单个模型与 ground truth 标注进行比较。Label Studio 会沿用项目配置的协议指标与方法论但把计算范围限定为所选标注者/模型与标记为 ground truth 的标注。一致性弹窗点击任一协议列会弹出信息弹窗展示所用指标与方法论。若使用Pairwise两两比较方法论弹窗会展示所选标注者与模型的协议分数明细。协议相关的 Data Manager 列agreement、reviewers、reviews_accepted、reviews_rejected等由 Column 枚举中的 Enterprise 专属条目定义Community 版不提供这些列。Community 版的Annotation results过滤器是对任务全部标注的无结构文本搜索无法实现 Enterprise 版对单个标注结果的精确过滤。源码视角过滤与排序的底层原理从 UI 到 SQL参数管线Data Manager 的过滤与排序最终会转换成 Django ORM 查询。核心链路为前端将视图ViewID 或内联的filters/ordering/selectedItems参数传给后端functions.py 的get_prepare_params将其规范化为PrepareParams结构project、ordering、selectedItems、filters、dataView.get_prepare_tasks_params则负责从数据库读取视图的过滤器组与排序参数models.pymanagers.py 的only_filtered接收PrepareParams依次执行apply_filters与apply_ordering生成最终查询集。过滤与排序的字段名需要经过preprocess_field_name规范化functions.py去掉filter:/tasks:前缀与降序标记-并将data.xxx点号访问转换为 ORM 的data__xxxJSON 字段查找同时正确处理$undefined$数据列。排序的数值化处理apply_orderingmanagers.py对排序做了特殊处理对task.dataJSON 字段使用KeyTextTransformCast将 JSON 值转换为数值类型以支持数字排序排序时使用nulls_lastTrue保证缺失值的任务排在最后对任务状态字段state通过Case/When将状态枚举映射为数字权重后再排序使进行中 → 已标注 → 已复审等状态具备可预期的排列顺序若启用了 Enterprise 的协议列排序会处理协议相关字段的排序。安全性设计防止 ORM 注入过滤与排序的用户输入直接参与 ORM 查询构建仓库对此有严格防护preprocess_field_name的注释明确指出该函数不能以引入 ORM 泄漏漏洞的方式修改对应历史漏洞编号 #5012只允许移除字符串开头的前缀与降序标记_reject_fk_traversalprepare_params.py实现了 CVE-2023-47117 的防御策略除task.data字段与DATA_MANAGER_FILTER_ALLOWLIST白名单外过滤/排序列名中禁止出现__Django 外键关系遍历语法否则直接抛出校验错误column_names.py 定义了可查询列名校验规则列名若包含引号、方括号、分号、井号、空白、控制字符或 SQL 注释标记#、--、/*、*/将无法作为过滤、排序或列选择目标。这些防护确保过滤/排序功能在面向复杂数据字段时保持查询安全。Data Manager 的 API 端点Data Manager 相关 REST API 注册于 data_manager/urls.py主要端点包括端点说明GET/POST /api/dm/views/视图Tab的增删改查GET /api/dm/columns/获取当前项目可用的过滤/排序列前端据此渲染列选择器GET /api/dm/projects/pk/user-options/项目内用户选项用于分配标注者、删除标注表单等GET /api/dm/actions/列出当前用户可用的批量动作GET /api/dm/actions/action_id/form/获取动作的附加表单如删除标注时的标注者选择这些端点由 data_manager/api.py 实现可供二次开发或脚本化批量管理任务时直接调用。总结Data Manager 是 Label Studio 数据管理的中枢通过列、运算符与 conjunction 组合的过滤体系、持久化 Tab、批量动作与协议计算可以灵活编排标注队列。无论是先标新数据按预测置信度排序还是多标注者分片协作都可以在不修改底层数据的前提下通过过滤器、排序与 Tab 的组合快速落地。其底层实现PrepareParams→apply_filters/apply_ordering→ ORM 查询既保证了功能的灵活性也通过列名白名单与 ORM 遍历防护确保了查询安全。若需通过代码方式管理视图与过滤器可参考 prepare_params.py 中的Filters结构与example_request示例结合/api/dm/端点进行二次开发。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表