試用開源標註平台 Label Studio
- 2020 年 3 月 18 日
- 筆記
數據標註是人工智慧背後的女人。—— 我說的
初探
在 reddit 上看到一個人提了一個問題:What is your favourite (free) labelling tool?,你最喜歡的(免費)標註工具是什麼。由於我一直關註標注工具,而且沒找到好用、漂亮的標註工具(甚至一度計劃自己做一個),也認為這塊很重要,所以就點進去看了下。收穫不少,帖子樓主提到的 Prodigy,我點進去看了看,確實很漂亮,但是收費,來看下價格:

罷了。
貧窮讓我看到了 Label Studio、doccano 和 brat,brat 我之前就知道,只是沒那麼美觀。剩下兩個都很不錯,開源也美觀,這次我們來看看前者。

以命名實體識別任務的數據標註為例,先來看下使用 Label Studio 進行標註的效果:

查看任務進度:

後端使用的是 flask,前端使用的是 React。
OK,如果你還滿意的話可以繼續往下看安裝、導入數據等部分了。接下來我會以標註 NER 數據為例,介紹如何使用 Label Studio。標註類別有人名、地名、公司名、產品和時間,標註數據放在 sentences.txt
中,內容如下:
狼牙山,我站在你面前,顯得多麼矮小呀! 1976年9月間,我與《福建文藝》編輯部的幾位同事,專程到上杭縣舉辦改稿學習班。 羅灣村為修建一座廟宇,從籌集資金、徵集土地,到竣工持續近10年。 20日凌晨1時許,博物館附設的「藝術咖啡」酒吧招待員克羅科洛與監控室的3名女看守聯繫,沒有得到回答。 可口可樂公司的發言人辯稱,飲料市場本來就是競爭高度激烈的地方,百事可樂應該直接到市場去競爭,而不是在法庭上爭鬥。
安裝和啟動
主要有三種方式 :
- pip:
pip install label-studio
,建議使用 conda 等虛擬環境 - docker:
docker pull heartexlabs/label-studio
,docker 鏡像版本可能會滯後 - 源碼:git clone https://github.com/heartexlabs/label-studio.git cd label-studio python setup.py develop
建議使用 pip 方式安裝。
假設我們計劃將標註相關文件放在 ner_labeling
文件夾中,你不用事先創建。安裝好後使用如下命令啟動:
label-studio start ner_labeling --init
這會初始化這個項目並默認在 8200 埠啟動服務,生成一些默認文件和文件夾:
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
如下:
{ "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": "可口可樂公司的發言人辯稱,飲料市場本來就是競爭高度激烈的地方,百事可樂應該直接到市場去競爭,而不是在法庭上爭鬥。" } } }
開始標註
導入數據後就可以開始標註了,點擊導航欄的 Tasks
→ Start Labeling
或者直接點擊導航欄的 Labeling
即可開始標註:

每次點擊 Submit
就會保存標註好的數據到 completions
文件夾中,同時也可以在 Tasks
中查看已完成的任務及完成時間:

導出數據
導出數據這塊是 Label Studio 的一個缺點,官方目前支援的是 JSON、CSV、TSV、CoNLL 2003、COCO 和 Pascal VOC XML,其中 CoNLL 2003 是 ner 數據格式的一種,但是經過我測試導出這種格式並不成功,導出的文件是空的。
但是我們可以先導出為 JSON 文件,然後編寫一個腳本轉換成我們需要的格式,例如 BIEOS。
優缺點
經過我粗淺的使用,發現一些優缺點:
優點:
- 介面相對美觀
- 部署方便
- 配置方便,有多種內置模板
- 導入數據方便
- 可以明晰了解任務的完成度及每條任務的完成時間
- 支援影像、文本和音頻等多種數據格式和多種任務數據的標註
缺點:
- 速度較慢,尤其是保存標註結果並進行下一條標註時
- 沒有帳號體系,但是有一個 multisession mode,暫未深入研究
Reference
- [D] What is your favourite (free) labelling tool? : MachineLearning
- Label Studio
- doccano/doccano: Open source text annotation tool for machine learning practitioner.
- Prodigy · An annotation tool for AI, Machine Learning & NLP
- brat rapid annotation tool