Alan Lee

试用开源标注平台 Label Studio

2020/03/15 Share

Photo by Josh Sorenson on Unsplash

数据标注是人工智能背后的女人。—— 我说的

初探

在 reddit 上看到一个人提了一个问题:What is your favourite (free) labelling tool?,你最喜欢的(免费)标注工具是什么。由于我一直关注标注工具,而且没找到好用、漂亮的标注工具(甚至一度计划自己做一个),也认为这块很重要,所以就点进去看了下。收获不少,帖子楼主提到的 Prodigy,我点进去看了看,确实很漂亮,但是收费,来看下价格:

Prodigy 价格

罢了。

贫穷让我看到了 Label Studiodoccanobrat,brat 我之前就知道,只是没那么美观。剩下两个都很不错,开源也美观,这次我们来看看前者。

Label Studio

以命名实体识别任务的数据标注为例,先来看下使用 Label Studio 进行标注的效果:

ner演示.gif

查看任务进度:

查看任务进度

后端使用的是 flask,前端使用的是 React。

OK,如果你还满意的话可以继续往下看安装、导入数据等部分了。接下来我会以标注 NER 数据为例,介绍如何使用 Label Studio。标注类别有人名、地名、公司名、产品和时间,标注数据放在 sentences.txt 中,内容如下:

1
2
3
4
5
狼牙山,我站在你面前,显得多么矮小呀!
1976年9月间,我与《福建文艺》编辑部的几位同事,专程到上杭县举办改稿学习班。
罗湾村为修建一座庙宇,从筹集资金、征集土地,到竣工持续近10年。
20日凌晨1时许,博物馆附设的“艺术咖啡”酒吧招待员克罗科洛与监控室的3名女看守联系,没有得到回答。
可口可乐公司的发言人辩称,饮料市场本来就是竞争高度激烈的地方,百事可乐应该直接到市场去竞争,而不是在法庭上争斗。

安装和启动

主要有三种方式 :

  • pip:pip install label-studio,建议使用 conda 等虚拟环境
  • docker:docker pull heartexlabs/label-studio,docker 镜像版本可能会滞后
  • 源码:
    1
    2
    3
    git clone https://github.com/heartexlabs/label-studio.git
    cd label-studio
    python setup.py develop

建议使用 pip 方式安装。

假设我们计划将标注相关文件放在 ner_labeling 文件夹中,你不用事先创建。安装好后使用如下命令启动:

1
label-studio start ner_labeling --init

这会初始化这个项目并默认在 8200 端口启动服务,生成一些默认文件和文件夹:

1
2
3
4
5
ner_labeling/
├── completions # 存放标注好的数据,json 文件,每一个标注完成的任务都放在一个以其 ID 命名的 json 文件中
├── config.json # 项目设置,例如服务端口
├── config.xml # 标签(label)设置
└── tasks.json # 所有导入的任务,key 为任务 ID,value 为任务数据

然后你就可以在 http://{your-server-ip}:8200 访问了。

设置标签

第一步就是要设置标签,具体包括标签名称、颜色等。可以在网页上直接修改并直观看到效果:

设置标签

如图修改标签名称和颜色,满意后点击左下角的 Save 按钮,保存设置到 config.xml 中。

注意官方并不建议直接修改项目中的文件,建议使用网页或者命令修改。

导入任务

接着点击左上角图标回到主页面,进行第二步导入任务,可以导入 json、csv、tsv 和 txt 等文件格式。对于本文的例子来说,我们使用 txt 文件最为方便,一行是一个句子,直接将文件拖入上传框中即可,完成后会显示导入任务数和耗费时间:

单个 txt 文件大小不超过 1M,如果超过 1M,可以使用 split 命令分割。

导入任务

关闭后点击右上方导航栏的 Tasks,可看到导入的任务数和任务存放地址,就是那个 tasks.json,任务 ID 默认从 0 开始计数,生成的 tasks.json 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
"0": {
"id": 0,
"data": {
"text": "狼牙山,我站在你面前,显得多么矮小呀!"
}
},
"1": {
"id": 1,
"data": {
"text": "1976年9月间,我与《福建文艺》编辑部的几位同事,专程到上杭县举办改稿学习班。"
}
},
"2": {
"id": 2,
"data": {
"text": "罗湾村为修建一座庙宇,从筹集资金、征集土地,到竣工持续近10年。"
}
},
"3": {
"id": 3,
"data": {
"text": "20日凌晨1时许,博物馆附设的“艺术咖啡”酒吧招待员克罗科洛与监控室的3名女看守联系,没有得到回答。"
}
},
"4": {
"id": 4,
"data": {
"text": "可口可乐公司的发言人辩称,饮料市场本来就是竞争高度激烈的地方,百事可乐应该直接到市场去竞争,而不是在法庭上争斗。"
}
}
}

开始标注

导入数据后就可以开始标注了,点击导航栏的 TasksStart Labeling 或者直接点击导航栏的 Labeling 即可开始标注:

标注示例.gif

每次点击 Submit 就会保存标注好的数据到 completions 文件夹中,同时也可以在 Tasks 中查看已完成的任务及完成时间:

查看已完成的任务及完成时间

导出数据

导出数据这块是 Label Studio 的一个缺点,官方目前支持的是 JSON、CSV、TSV、CoNLL 2003、COCO 和 Pascal VOC XML,其中 CoNLL 2003 是 ner 数据格式的一种,但是经过我测试导出这种格式并不成功,导出的文件是空的。

但是我们可以先导出为 JSON 文件,然后编写一个脚本转换成我们需要的格式,例如 BIEOS。

优缺点

经过我粗浅的使用,发现一些优缺点:

优点:

  • 界面相对美观
  • 部署方便
  • 配置方便,有多种内置模板
  • 导入数据方便
  • 可以明晰了解任务的完成度及每条任务的完成时间
  • 支持图像、文本和音频等多种数据格式和多种任务数据的标注

缺点:

  • 速度较慢,尤其是保存标注结果并进行下一条标注时
  • 没有账号体系,但是有一个 multisession mode,暂未深入研究

Reference

END

CATALOG
  1. 1. 初探
  2. 2. 安装和启动
  3. 3. 设置标签
  4. 4. 导入任务
  5. 5. 开始标注
  6. 6. 导出数据
  7. 7. 优缺点
  8. 8. Reference
  9. 9. END