NEW暗黑模式现已上线 🌓 Label Studio 1.18.0 版本发布

理解Label Studio JSON格式

指南

简介

好了,各位!系好安全带,准备好键盘准备起飞——我们将深入探索Label Studio JSON格式的核心教程。不过不需要特技表演或护目镜——这是一次平易近人且通俗易懂的入门介绍。

让我们开始吧。

什么是JSON?

JSON(JavaScript对象表示法)是一种数据格式,它以易于访问的方式支持信息的存储和组织。其作用类似于一位极其有条理的图书管理员,能够轻松从庞大的档案库中检索任何书籍。在机器学习和数据科学领域——由于其简单的结构和广泛的兼容性,这是您会遇到的最流行的文件类型之一。

想了解更多JSON基础知识并开始使用?查看Mozilla的JSON指南

Label Studio与JSON如何配合使用?

当您需要将标注(及其附带的所有丰富元数据)从一个地方迁移到另一个地方时,JSON文件格式往往被广泛接受。虽然存储和共享数据有多种不同格式——逗号分隔值(CSV)就是其中流行的一种——但JSON能轻松导出和导入带有额外上下文和元数据的数据。再加上它能够被Javascript和Python轻松读取和理解,这使得它自然成为数据科学家和机器学习专业人士的理想选择。

JSON的轻量级格式使其能够快速创建结构化数据对象以便在应用程序间共享,但围绕它已形成一个庞大的生态系统(包括模式库可为特定应用引入更多结构和类型检查),这种灵活性使其能够适应各种使用场景。它具备足够的结构化特性便于解析和理解,同时保留了充分的灵活性以适应不同用例需求。

何时需要使用Label Studio JSON格式?

Label Studio JSON格式对于导入数据、预标注以及与Label Studio ML后端协作至关重要。Label Studio可以导入多种不同的数据格式,包括纯文本和CSV文件,但若要导出标注记录或实现标注流程自动化,JSON是与Label Studio进行标注任务交互的首选格式。

导入数据

当您需要同时导入多种类型的数据进行标注时,例如带说明文字的图片或带转录文本的录音,必须使用Label Studio的基础JSON格式。

时间序列数据

如果您想将时间序列数据直接导入Label Studio,可以创建并导入一个JSON文件,该文件按照Label Studio JSON格式构建,包含指定时间和通道的键。

导出标注

标注人员完成任务标注后,Label Studio会以JSON结构呈现每个已完成的标注结果。这是Label Studio的原生输出格式。

使用Label Studio JSON格式可以让您与该平台的原生数据结构协同工作,确保在导入和导出过程中的兼容性与流畅的数据处理。

解析Label Studio JSON格式

JSON格式包含三个主要部分;

  1. 数据(任务数据)
  2. 标注
  3. 预测结果。

这三种类型的数据被分解为更小的块,称为对象。

在我们深入探讨这些对象如何协同工作以创建任务、标注和预测之前——让我们首先分解一下我们将遇到的不同元素。

`id`

这是您数据对象的唯一标识符。就像您在学校时的学号一样,只不过这次在食堂排队时被问到您不会忘记它。每个数据对象都有一个,可用于将来引用。

`data`

这里存放您的数据,比如文本、图像或任何您要标注的内容。在本例中,我们有一个简单的文本字符串"Hello, world!" 它就像是三明治里的面包片。

'标注'

这里存储了所有关键的标注细节,就像三明治中的肉和奶酪一样重要。它可以包含多个标注对象,但并非必须,因此使用数组(列表)表示法[]。

'from_name', 'to_name', 'type'

这部分数据是JSON文件的监控核心。'from_name'、'to_name'和'type'用于指导标注流程,让我们了解数据来源、去向以及预期用途。

'值'

这里记录了实际标签的详细信息,包括标签的起始和结束位置、被标注的文本内容以及所应用的标签类型。它就像是标签的详细报告单。

任务数据:

从本质上讲,任务数据被分解为以下格式。通常,一个任务对应一个数据项,不仅代表数据本身,还包括其所有的标注和预测结果。

task = { 
  data: {...}, 
  annotations: [{...}, {...}], 
  predictions: [{...}, {...}] 
}

该任务数据通常还会包含一些额外字段,如created_at或project,但为了简化说明,我们将从这里开始。任务数据可以构成一个更大的数据集,当处理多张图像和标签时,其结构可能会更加复杂,例如...

{ 
  images: [{name: "xxx", url: "gcs://1/1.jpg"}, {...}, ...],
  texts: ["123", "456", "789"], 
  number: 42
}

或者像这个来自单个任务的示例一样,非常简单...

{
 image: "gcs://1/1.jpg",
 text: "123"
}

标注配置如何影响任务数据。

如果您之前使用过Label Studio,可能会注意到如何完全自定义Label Studio的界面或配置。这在为标注团队提供进一步说明或上下文时非常方便。

在Label Studio的界面编辑器中自定义您的标注界面。

然而,Label Studio界面和标注模板中的自定义设置会影响您任务数据的最终结果。

Label Studio界面可使用XML进行自定义,但此代码可能会影响最终的JSON结果。

如果您的标注配置指定了一个特定值,例如'image value',您必须将该值添加到任务数据中。

示例1:

向配置中添加图像值:

<image name="image" value="$imagefilename"/>

还需要我们在任务数据中调用这个值。

‘data’:
{
 image: “https://example.com/1.jpg”
}

了解您添加的值及其如何影响导出,可以让您更轻松地跟踪工作进度——尤其是在与更大的团队合作时。

JSON实战应用

让我们来看几个JSON类型在实际应用中的示例。

图像分类任务,包含两个标签“狗”和“猫”

在Label Studio中看起来会是这样...

Label Studio标注界面中的XML截图

标注界面图片,包含"Dog"和"Cat"选项。

而您的JSON导出将类似于以下内容...

{
    "id": 1,
    "data": {
        "image_value": "https://example.com/dog_or_cat.jpg"
    },
    "annotations": [
        {
            "result": [
                {
                    "value": {
                        "choices": ["Dog"]
                    },
                    "from_name": "class",
                    "to_name": "image",
                    "type": "choices"
                }
            ]
        }
    ]
}

包含三个标签的文本分类任务:“正面”、“负面”和“中性”

{
    "id": 2,
    "data": {
        "text": "I absolutely love Label Studio!"
    },
    "annotations": [
        {
            "result": [
                {
                    "value": {
                        "choices": ["Positive"]
                    },
                    "from_name": "sentiment",
                    "to_name": "text",
                    "type": "choices"
                }
            ]
        }
    ]
}

在这两个示例中,from_name表示标签,to_name表示数据源,而type描述了执行的标注类型。

值中的选项代表特定数据所选择的标签。

加载标注数据以在Python Notebook中探索

在首次验证数据集或构建新模型时,在Python笔记本中打开数据是进行质量保证(QA)、进一步分析和检查标注数据、继续模型开发工作或记录步骤以便后续复现的好方法。


运行下面的代码片段将允许您打开JSON文件并开始进行探索。这里使用了prettyprint库,它能为您提供JSON文件更详细的细节和上下文信息。对于数据分析,使用像PandasMatPlotLib这样的库可以进一步协助您的研究工作。

import json
import pprint


with open('your_labelstudio_file.jso') as file:
    data = json.load(file)

pprint.pprint(data)

在Label Studio中加载任务

您也可以将JSON文件加载到Label Studio中作为待标注任务。如果已有大型数据集或JSON文件,通过JSON格式将其导入Label Studio可能会节省您的时间。

以下是两个示例,展示如何构建JSON文件以将任务加载到Label Studio中。

[
    {
        "id": 1,
        "data": {
            "image": "https://example.com/dog_or_cat.jpg"
        }
    },
]

[
    {
        "id": 2,
        "data": {
            "text": "I absolutely love Label Studio!"
        }
    }
]

准备好JSON文件后,您可以通过完成以下说明将其添加到Label Studio中。

  1. 在您的网页浏览器中导航至Label Studio用户界面。
  2. 前往您想要导入任务的项目。
  3. 点击"导入"按钮。
  4. 选择“上传文件”并上传您的JSON文件

JSON格式的故障排除与常见错误

Label Studio JSON格式的常见错误包括:在准备预测数据时忘记包含result字段,或在将任务上传到Label Studio时未能正确标识数据类型("image"或"text")。

在准备文件时,特别是处理大批量数据时,先上传一小部分进行测试,然后再上传全部数据会很有帮助。

要点总结

既然您已经掌握了基本规则,现在就能更高效地使用Label Studio了。就像精心规划的行程表一样,Label Studio的JSON格式以连贯标准化的方式,为我们提供了多种数据类型(文本、图像、音频和视频)标注工作的结构和上下文背景。这对于确保数据标注工作的一致性至关重要,最终能提升机器学习模型的性能。此外,它还使我们能够与机器学习生态系统中的其他工具和应用程序进行有效沟通。祝您标注愉快!


相关内容