背景:最近的工作需要對(duì)文本先進(jìn)行標(biāo)注存璃,然后才可以做接下來的文本分類工作驱证。其中主要內(nèi)容是對(duì)一段文本打標(biāo)簽撑毛,標(biāo)記該文本描述了一個(gè)我們預(yù)定義的種類標(biāo)簽。
原來文本數(shù)量少的時(shí)候可以手工標(biāo)注愁憔,隨著文本數(shù)量的增多腕扶,需要借助標(biāo)注工具,調(diào)研了目前常用的幾種:
1吨掌,BRAT?
?https://github.com/nlplab/brat
首先是業(yè)內(nèi)常用的BRAT半抱,官網(wǎng)地址:http://brat.nlplab.org/ 脓恕,這是很早以前出現(xiàn)的一個(gè)工具,基于web的文本標(biāo)注工具代虾,主要用于對(duì)文本的結(jié)構(gòu)化標(biāo)注进肯,用BRAT生成的標(biāo)注結(jié)果能夠把無結(jié)構(gòu)化的原始文本結(jié)構(gòu)化,供計(jì)算機(jī)處理棉磨。利用該工具可以方便的獲得各項(xiàng)NLP任務(wù)需要的標(biāo)注語料。面向unix-like系統(tǒng)
最大的特點(diǎn)是在標(biāo)注實(shí)體的同時(shí)可以進(jìn)行關(guān)系的標(biāo)注学辱。而且是一個(gè)server服務(wù)端乘瓤,搭建好后可以多人訪問,也適合多人協(xié)同標(biāo)注策泣。據(jù)說可以通過tomcat搭建衙傀,博主沒自己試驗(yàn)過。
經(jīng)過調(diào)研比較萨咕,我們最終選定還是用brat進(jìn)行標(biāo)注统抬,接下來介紹如何使用brat,其他的標(biāo)注工具調(diào)研在后面有介紹危队。
1聪建,安裝brat
1.1如果你是win10系列,那么你可能需要一個(gè)unix-like環(huán)境茫陆,比如
通過虛擬機(jī)virtualBox金麸,Ubuntu18.04,? https://blog.csdn.net/zcooa/article/details/80615743
或者通過在win上安裝cgwin來實(shí)現(xiàn)?cgwin https://blog.csdn.net/heshushun/article/details/78664384
1.2如果你在osx或者linux系統(tǒng)上就可以直接按照下面安裝
博主是放在一個(gè)服務(wù)器server上安裝簿盅,然后通過訪問ip的方式來完成標(biāo)注工作挥下。
先下載,http://brat.nlplab.org/installation.html桨醋,brat-v1.3_Crunchy_Frog.tar.gz這個(gè)文件
然后解壓棚瘟,運(yùn)行即可
tar -xf brat-v1.3_Crunchy_Frog.tar
cd brat-v1.3_Crunchy_Frog
./install.sh –u
這里會(huì)提示你輸入username,可以自己設(shè)置喜最,將來標(biāo)注的時(shí)候偎蘸,支持多人標(biāo)注。
python standalone.py #(不可用python3)
2返顺,使用brat
以上操作在Xshell中完成禀苦,此時(shí)brat服務(wù)已經(jīng)啟動(dòng),如果你的服務(wù)器有圖形界面遂鹊,或者ubuntu中振乏,那么你可以直接用自帶的瀏覽器訪問 127.0.0.1:8001
我這里沒有圖形界面,所以命令行訪問firefox
然后會(huì)打開一個(gè)窗口秉扑,這個(gè)功能需要xmanager軟件慧邮,會(huì)提示你安裝的调限,
,繼續(xù)訪問127.0.0.1:8001就可以了
3误澳,安裝完成后耻矮,做中文標(biāo)注
3.1支持中文
brat本身是不支持中文的,如果在配置文件里定義中文會(huì)報(bào)錯(cuò)忆谓,解決辦法是./server/src/projectconfig.py文件的第163行裆装,加上中文支持即可:?
n = re.sub(u'[^a-zA-Z\u4e00-\u9fa5<>,0-9_-]', '_', n)
3.2 增加用戶(這個(gè)一般不需要)
官方文檔:If you want to add additional users, you can edit the config.py file, which contains further instructions.
找到config.py 對(duì)應(yīng)的行,增加:
USER_PASSWORD = {?'admn': 'admin',?'test': 'test',?# (add USERNAME:PASSWORD pairs below this line.)?}
重新啟動(dòng)后倡缠,使用test就可以登錄了
注意:當(dāng)前用戶只能針對(duì)自己的標(biāo)注進(jìn)行修改哨免,并不能修改其他人進(jìn)行的標(biāo)注
3.3 導(dǎo)入collection
導(dǎo)入文件的時(shí)候,必須要文件符合:文件名.xxx和文件名.ann 一一對(duì)應(yīng)的格式即可
直接將包含txt數(shù)據(jù)集的文件夾放置到安裝文件下一個(gè)data的目錄下昙沦,然后使用命令:
find 文件夾名稱 -name '*.txt'|sed -e 's|\.txt|.ann|g'|xargs touch
其意思是對(duì)每個(gè)txt文件都創(chuàng)建一個(gè)空的標(biāo)引文件.ann琢唾,因?yàn)锽RAT是要求的collection中,每個(gè)txt文件是必須有一個(gè)對(duì)應(yīng)的.ann文件的盾饮,方便放置標(biāo)引內(nèi)容采桃,這個(gè)ann文件的格式也挺規(guī)范
將要標(biāo)注的文件導(dǎo)入項(xiàng)目中data/路徑下即可,可以查看其中examples文件下以及tutorials文件下幫助文檔丘损。
3.4具體標(biāo)注配置
brat通過配置文件來決定對(duì)語料的標(biāo)注可以滿足何種任務(wù)普办,包括四個(gè)文件
??????????annotation.conf: annotation type configuration
??????????visual.conf: annotation display configuration
??????????tools.conf: annotation tool configuration
??????????kb_shortcuts.conf: keyboard shortcut tool configuration
一般只需要修改annotation.conf即可,該文件用于對(duì)標(biāo)注的數(shù)據(jù)結(jié)構(gòu)進(jìn)行配置号俐,典型的配置如下:
?每個(gè)文件需要包含四類模塊:entities泌豆、relations、events吏饿、attributes踪危。各個(gè)模塊都可以定義為空,其中
entities用來定義標(biāo)注的實(shí)體名稱猪落,其格式為每行一個(gè)實(shí)體類型贞远,比如:人名、地名笨忌、英雄名蓝仲、技能名等,可以采用tab來增加二級(jí)標(biāo)注官疲,如下面的實(shí)體標(biāo)注中技能下的二級(jí)標(biāo)注戰(zhàn)斗技能等袱结。
relations用來定義實(shí)體間的關(guān)系,格式為每行定義一種關(guān)系途凫,第一列為關(guān)系類型垢夹,隨后是用逗號(hào)分隔的ArgN:實(shí)體名,用來表示關(guān)系的各個(gè)相關(guān)者维费。比如例子中果元,同盟關(guān)系是存在于英雄之間
events用來定義事件促王,每行定義一類事件,第一列為事件名而晒,隨后是用逗號(hào)分隔的Participant:實(shí)體名蝇狼,用來表示事件的各個(gè)參與者。比如例子中倡怎,1v1事件需要多個(gè)英雄參加
attributes用來定義屬性迅耘,每行一個(gè)屬性,第一列為屬性名诈胜,隨后是用逗號(hào)分隔的Arg:<模塊類型>, Value:屬性值豹障,注意屬性值可以有多個(gè),比如例子中焦匈,定義了實(shí)體類型可以有攻擊力,值從1-3
[entities]
英雄
? ? 北歐英雄
? ? 希臘英雄
技能
? ? 戰(zhàn)斗技能
? ? 生活技能
? ? ? ? 采礦
? ? ? ? 種地
? ? ? ? ? ? 種白菜
? ? ? ? ? ? 種大米
[relations]
同盟Arg1:英雄, Arg2:英雄
擁有Arg1:英雄, Arg2:技能
[events]
1v1Participant1:英雄, Participant2:英雄
[attributes]
攻擊力Arg:<ENTITY>, Value:1|2|3|4|5
選中要標(biāo)注的文本昵仅,會(huì)彈出窗口缓熟,選中標(biāo)注label,然后完成標(biāo)注
標(biāo)注完成后摔笤,鼠標(biāo)移動(dòng)到上面够滑,點(diǎn)擊data
點(diǎn)擊OK將標(biāo)注信息作為ann導(dǎo)出,如下:
? 1 T2? OTH 3 15? ? 一噸碳挑戰(zhàn)的目的是什么吕世?
? 2 T1? NUM,MNY 37 75? 加國政府由自由黨主政的2003年至2006年間彰触,通過多少經(jīng)費(fèi)來挹注為此計(jì)劃?
? 3 T3? OTH 92 114? 廖秋成跟劉業(yè)經(jīng)教授和劉棠瑞教授學(xué)了什么學(xué)科命辖?
踩坑記錄:
1况毅,如果導(dǎo)入文本編碼格式不是utf-8,就無法正常導(dǎo)入尔艇。導(dǎo)入文本名稱為英文.txt
2尔许,如果要標(biāo)注中文標(biāo)簽,直接在annotation.conf中寫入中文標(biāo)簽终娃,會(huì)出現(xiàn)報(bào)錯(cuò)信息
最終解決方案是在annotation.conf中用label1味廊,label2來表示,然后在視覺配置visual.conf中對(duì)應(yīng)修改
如上面:
[labels]
label1 | 攻擊行為
label2 | 違紀(jì)行為
2棠耕,Chinese-Annotator
https://github.com/deepwel/Chinese-Annotator
該工具靈感來自于Prodigy余佛,每一次的標(biāo)注只需要用戶解決一個(gè)case的問題。以文本分類為例窍荧,對(duì)于算法給出的分類結(jié)果辉巡,只需要點(diǎn)擊“正確”提供正樣本,“錯(cuò)誤”提供負(fù)樣本搅荞,“略過”將不相關(guān)的信息濾除红氯,“Redo”讓用戶撤回操作框咙,四個(gè)功能鍵以最簡模式讓用戶進(jìn)行標(biāo)注操作。真正應(yīng)用中痢甘,應(yīng)該還要加入一個(gè)用戶自己加入標(biāo)注的交互方式喇嘱,比如用戶可以高亮一個(gè)詞然后選擇是“公司”,或者鏈接兩個(gè)實(shí)體選擇他們的關(guān)系等等塞栅。?主要可以用來做命名實(shí)體者铜。
優(yōu)點(diǎn)是界面友好,面向OSX的放椰,沒試過win10可不可用
我們的任務(wù)更多的是對(duì)一段文本的信息進(jìn)行標(biāo)注作烟,判斷是否這段文本表示了我們預(yù)先定義的一個(gè)label,所以這個(gè)工具不太適合砾医,也沒有具體安裝使用拿撩。
3,YEDDA
YEDDA是由新加坡科技大學(xué)yangjie等人開發(fā)的如蚜,前身也就是SUTDAnnotator压恒,https://github.com/jiesutd/YEDDA
開發(fā)用于在文本(幾乎所有語言,包括英語错邦、中文)探赫、符號(hào)甚至表情符號(hào)上注釋塊/實(shí)體/事件。它支持快捷注釋撬呢,手工注釋文本非常有效伦吠。用戶只需選中文本并按快捷鍵如A,就會(huì)自動(dòng)標(biāo)注魂拦。它還支持命令注釋模型毛仪,該模型可以批量注釋多個(gè)實(shí)體,并支持將帶注釋的文本導(dǎo)出為序列文本晨另。此外潭千,更新版本還包括智能推薦和管理員分析。與所有主流操作系統(tǒng)兼容借尿,在win10可以直接用刨晴,但是是基于python2開發(fā)的,所以安裝需要用python2路翻。
需要標(biāo)注的文檔用txt文件導(dǎo)入狈癞,編碼方式為utf-8,如果編碼方式不對(duì)茂契,會(huì)顯示亂碼蝶桶。
標(biāo)注結(jié)果參考brat,用.ann文件來保存掉冶。
目前仍在更新真竖,獲得2018ACL best demo nomination
優(yōu)點(diǎn)是安裝方便脐雪,標(biāo)注方便,如果要實(shí)現(xiàn)給同一個(gè)實(shí)體加多個(gè)標(biāo)簽恢共,也可以實(shí)現(xiàn)战秋,還有其他功能做的很贊
但是為了標(biāo)注方便,可以通過按鍵實(shí)現(xiàn)讨韭,使得快捷鍵設(shè)置不宜過多脂信,我們的工作中要求標(biāo)注標(biāo)簽在50個(gè)以上,所以這個(gè)工具不適合透硝,無法添加這么多工具狰闪,最后沒有采用,如果你的標(biāo)注標(biāo)簽要求較少濒生,這個(gè)工具很適合埋泵。
4,IEPY
IEPY主要特色在關(guān)系抽取罪治,基于java開發(fā)的秋泄,是一種開源的信息抽取工具
在github可以下載Python開發(fā)?https://github.com/machinalis/iepy」娣В可以閱讀https://iepy.readthedocs.io/en/latest/。
我們將數(shù)據(jù)加載到數(shù)據(jù)庫的方式是從csv文件導(dǎo)入數(shù)據(jù)瘦麸。使用應(yīng)用程序文件夾中提供的腳本csv_to_iepy來執(zhí)行此操作谁撼。特別擅長對(duì)大型數(shù)據(jù)集進(jìn)行關(guān)系抽取。
感覺不是很好用滋饲,而且我們主要是加標(biāo)簽的工作厉碟,不適合。
5屠缭,DeepDive (Mindtagger)
2017年后已經(jīng)不再更新箍鼓,DeepDive是一個(gè)從黑暗數(shù)據(jù)中提取價(jià)值的系統(tǒng)。與暗物質(zhì)一樣呵曹,暗數(shù)據(jù)是隱藏在文本款咖、表格、圖形和圖像中的大量數(shù)據(jù)奄喂,缺乏結(jié)構(gòu)铐殃,因此現(xiàn)有軟件基本上無法處理這些數(shù)據(jù)。通過從非結(jié)構(gòu)化信息(文本文檔)創(chuàng)建結(jié)構(gòu)化數(shù)據(jù)(SQL表)跨新,并將這些數(shù)據(jù)與現(xiàn)有的結(jié)構(gòu)化數(shù)據(jù)庫集成富腊,DeepDive可以幫助將黑暗數(shù)據(jù)暴露出來。DeepDive用于提取實(shí)體之間復(fù)雜的關(guān)系域帐,并對(duì)涉及這些實(shí)體的事實(shí)進(jìn)行推斷赘被。深潛幫助人們處理各種各樣的問題
Labeling DeepDive data with Mindtagger
http://deepdive.stanford.edu/labeling
?A tool for labeling data
不好用是整,但是可以統(tǒng)計(jì)最后的標(biāo)注標(biāo)簽以及導(dǎo)出標(biāo)注信息可以保存為不同格式。
6民假,snorkel
https://github.com/HazyResearch/snorkel
用于快速創(chuàng)建浮入、建模和管理培訓(xùn)數(shù)據(jù)的系統(tǒng)。當(dāng)今最先進(jìn)的機(jī)器學(xué)習(xí)模型需要大量標(biāo)記的訓(xùn)練集阳欲,而這些訓(xùn)練集通常不存在于實(shí)際應(yīng)用中舵盈。相反,Snorkel是基于新的數(shù)據(jù)編程范式的球化,在這種范式中秽晚,開發(fā)人員將重點(diǎn)放在編寫一組標(biāo)記函數(shù)上,這些函數(shù)只是通過編程方式標(biāo)記數(shù)據(jù)的腳本筒愚。生成的標(biāo)簽是有噪聲的赴蝇,但是Snorkel會(huì)自動(dòng)為這個(gè)過程建模——從本質(zhì)上說巢掺,是學(xué)習(xí)句伶,哪個(gè)標(biāo)簽函數(shù)比其他函數(shù)更準(zhǔn)確——然后使用它來訓(xùn)練一個(gè)目標(biāo)
調(diào)研后發(fā)現(xiàn)不適合我們的工作。但是這個(gè)項(xiàng)目有興趣的可以跟一下陆淀。
7考余,Prodigy
https://prodi.gy/docs/
一個(gè)由主動(dòng)學(xué)習(xí)驅(qū)動(dòng)的注釋工具。具體的可以看文檔轧苫。
8楚堤,其他標(biāo)注方式
http://www.reibang.com/p/6d80d9ff43b4
9,圖像標(biāo)注軟件將來再介紹
https://www.cnblogs.com/alexanderkun/p/6936732.html