數據標註是人工智能背後的女人。—— 我說的
初探
在 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