中文文本標(biāo)注工具調(diào)研以及BRAT安裝使用

背景:最近的工作需要對(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末含懊,一起剝皮案震驚了整個(gè)濱河市身冬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌岔乔,老刑警劉巖酥筝,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雏门,居然都是意外死亡嘿歌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門剿配,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搅幅,“玉大人,你說我怎么就攤上這事呼胚∏烟疲” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沪编。 經(jīng)常有香客問我呼盆,道長,這世上最難降的妖魔是什么蚁廓? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任访圃,我火速辦了婚禮,結(jié)果婚禮上相嵌,老公的妹妹穿的比我還像新娘腿时。我一直安慰自己,他們只是感情好饭宾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布批糟。 她就那樣靜靜地躺著,像睡著了一般看铆。 火紅的嫁衣襯著肌膚如雪徽鼎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天弹惦,我揣著相機(jī)與錄音否淤,去河邊找鬼。 笑死棠隐,一個(gè)胖子當(dāng)著我的面吹牛石抡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播助泽,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼汁雷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了报咳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤挖藏,失蹤者是張志新(化名)和其女友劉穎暑刃,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膜眠,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岩臣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宵膨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片架谎。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辟躏,靈堂內(nèi)的尸體忽然破棺而出谷扣,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布会涎,位于F島的核電站裹匙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏末秃。R本人自食惡果不足惜概页,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望练慕。 院中可真熱鬧惰匙,春花似錦、人聲如沸铃将。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麸塞。三九已至秃臣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哪工,已是汗流浹背奥此。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留雁比,地道東北人稚虎。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像偎捎,于是被迫代替她去往敵國和親蠢终。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350