构想:中文文本标注工具(内附多个开源文本标注工具)
■ 項目地址 | https://github.com/crownpku/Chinese-Annotator
自然語言處理的大部分任務(wù)是監(jiān)督學(xué)習(xí)問題。序列標(biāo)注問題如中文分詞、命名實體識別,分類問題如關(guān)系識別、情感分析、意圖分析等,均需要標(biāo)注數(shù)據(jù)進(jìn)行模型訓(xùn)練。深度學(xué)習(xí)大行其道的今天,基于深度學(xué)習(xí)的 NLP 模型更是數(shù)據(jù)饑渴。?
最前沿的 NLP 技術(shù)往往首先針對英文語料。英文 NLP 的生態(tài)很好,針對不同有意思的問題都有不少大規(guī)模語料公開供大家研究,如斯坦福的 SQuAD 閱讀理解語料。中文方面開源語料就少得多,各種英文 NLP 上的犀利模型和前沿技術(shù)都因為中文語料的匱乏很難遷移過來。
另一方面,對于一些垂直領(lǐng)域,如醫(yī)療、金融、法律、公安等等,專有名詞和特有需求甚多,很難將比較 general 的比如在 wikipedia dump 上面訓(xùn)練的模型直接拿過來用。?
傳統(tǒng)人工標(biāo)注數(shù)據(jù)的過程往往是繁瑣和低效率的。剛標(biāo)了一個“聯(lián)想”是公司名,又來一個“聯(lián)想集團(tuán)”,再標(biāo)一次又來一個“聯(lián)想集團(tuán)有限公司”,如此的例子令標(biāo)注過程含有大量的重復(fù)勞動。另一方面也沒有一個易上手的標(biāo)注 UI,標(biāo)注工作者往往需要直接按預(yù)先定好的格式直接在寫字板之類的軟件中修改原始數(shù)據(jù),格式錯誤率也較高。?
能不能構(gòu)建一個中文文本的標(biāo)注工具,可以達(dá)到以下兩個特點:?
1. 標(biāo)注過程背后含有智能算法,將人工重復(fù)勞動降到最低;?
2. 標(biāo)注界面顯而易見地友好,讓標(biāo)注操作盡可能簡便和符合直覺。?
答案是可以的。事實上很多標(biāo)注工具已經(jīng)做到了這一點,最先進(jìn)的如 Explosion.ai 的 Prodigy;然而開發(fā)了著名的 NLP 開源包 Spacy 的 explosion.ai 選擇了將 Prodigy 閉源,而 Spacy 支持中文也仍然遙遙無期。我們希望構(gòu)建一個開源的中文文本標(biāo)注工具,而本文很多的技術(shù)靈感正是來自 Prodigy 文檔[1]。?
主動學(xué)習(xí)的智能標(biāo)注算法
流程:?
1. 用戶標(biāo)一個label;
2. 主動學(xué)習(xí)的后臺算法分為 online 和 offline 部分。online 部分即時更新模型,可使用諸如 SVM、bag of words 等盡可能快的傳統(tǒng)方法;offline 部分當(dāng)標(biāo)注數(shù)據(jù)積累到一定數(shù)量時更新模型,可使用準(zhǔn)確度較高的深度學(xué)習(xí)模型;?
3. 模型更新后,對盡可能多的 example 做預(yù)測,將確信度排序,取確信度最低的一個 example 作為待標(biāo)注例子。重復(fù) 1 的過程。?
可以想象如果模型訓(xùn)練得好的話,這個過程將直接忽略掉確信度最大的那些例子,而把所有重點放在分類邊界上的那些確信度小的例子。這樣可以盡算法所能減少用戶端的人工工作量。?
online 與 offline 模型互相協(xié)作,與用戶手動標(biāo)注的過程一起不斷迭代;在最終標(biāo)注任務(wù)完成之后,offline 模型可以重新在所有標(biāo)注數(shù)據(jù)上重新訓(xùn)練,以達(dá)到最好的模型效果。?
顯而易見的友好標(biāo)注前端
?
用戶標(biāo)注的界面應(yīng)該盡可能符合直覺,讓用戶完全聚焦在當(dāng)前的標(biāo)注任務(wù)上。 Prodigy 給了一個非常好的 demo[2],每一次的標(biāo)注只需要用戶解決一個 case 的問題。以文本分類為例,對于算法給出的分類結(jié)果,只需要點擊“正確”提供正樣本,“錯誤”提供負(fù)樣本,“略過”將不相關(guān)的信息濾除,“Redo”讓用戶撤回操作,四個功能鍵以最簡模式讓用戶進(jìn)行標(biāo)注操作。?
真正應(yīng)用中,應(yīng)該還要加入一個用戶自己加入標(biāo)注的交互方式,比如用戶可以高亮一個詞然后選擇是“公司”,或者鏈接兩個實體選擇他們的關(guān)系等等。
以上是個人覺得的一個智能中文文本標(biāo)注工具的最大亮點。算法本身還有很多細(xì)節(jié)需要思考,比如 online 機(jī)器學(xué)習(xí)算法與 offline 深度學(xué)習(xí)算法的協(xié)作、中文 NLP 的特征提取與模型構(gòu)建、正則規(guī)則的引入、word embedding 的訓(xùn)練和使用等等。
系統(tǒng)本身還要考慮后臺存儲(SQLite?)和數(shù)據(jù)導(dǎo)入導(dǎo)出,前端框架選型和開發(fā),前后端交互(django? flask? RestAPI?)等等的問題。下面是 Prodigy 的簡單架構(gòu)圖。
我們希望專注于中文文本標(biāo)注的功能。前期我們想實現(xiàn)三種中文 NLP 任務(wù)的標(biāo)注工具:中文命名實體識別,中文關(guān)系識別,中文文本分類。未來如果有更多如中文圖片問答、中文圖片描述之類的任務(wù),我們可以再研究加入圖片標(biāo)注這一塊。
希望這個工具的開發(fā)會是以中文社區(qū)的開源協(xié)作方式,為整個中文 NLP 的開源生態(tài)做出一點貢獻(xiàn)。
FAQ
1. 待標(biāo)注數(shù)據(jù)集如何分割?
應(yīng)該分為按句子、按段落、按文章三種,寫入配置文件由用戶選擇。 原因是命名實體識別與關(guān)系抽取可能按句子或者段落為單位給用戶標(biāo)注比較合適;同時可能用戶會有全文章分類的需求,需要給出全文。?
2. 為什么要使用 online?
用戶標(biāo)注數(shù)據(jù) + offline 標(biāo)注數(shù)據(jù),為什么還要使用 online model 更新數(shù)據(jù)呢?原因是 offline 的模型往往在全量數(shù)據(jù)上重新學(xué)習(xí),也很可能需要使用深度學(xué)習(xí)模型,訓(xùn)練的速度會很慢。而 active learning 的人機(jī)迭代過程要求模型給出幾乎實時的 stream 級別的訓(xùn)練和推斷速度,這時候就需要 online model 來先行更新數(shù)據(jù)。?
3. 使用什么機(jī)制觸發(fā) offline model??
這也可以是寫入配置文件的參數(shù)。一種是用戶標(biāo)夠了 100 個或提前設(shè)置好的足夠多的新的數(shù)據(jù),就可以啟用 offline model 進(jìn)行訓(xùn)練;另一種是給用戶一個按鈕,用戶可以點擊啟動后臺的 offline 模型訓(xùn)練并給出進(jìn)度條。?
4.?系統(tǒng)使用什么格式的配置文件??
推薦 json 格式的配置文件。請參考一個例子在這里[3]。
5. AIgo Factory 是什么?和 User Instance 里面的部分是不是有點重合?
Algo factory 是算法的代碼模塊,你可以想象一堆 tensorflow 或者 sklearn 的代碼;而 user instance 是 config 文件與模型參數(shù),是一堆用戶生成的 json 文件和模型文件。algo factory 是可以不同 user instance 傳入?yún)?shù)復(fù)用的,而每一個 user instance 代表了一個用戶任務(wù)的實例。
這樣設(shè)計的目的,是盡可能使系統(tǒng)可復(fù)用部分模塊化,而抽出用戶具體任務(wù)的配置與數(shù)據(jù)單獨存儲管理。
附錄:幾個開源文本標(biāo)注工具
??IEPY?
整個工程比較完整,有用戶管理系統(tǒng)。前端略重,對用戶不是非常友好。
代碼:https://github.com/machinalis/iepy?
說明:http://iepy.readthedocs.io/en/latest/index.html
??DeepDive (Mindtagger)
△ Screenshot of Mindtagger precision task in progress
前端比較簡單,用戶界面友好。?
介紹:http://deepdive.stanford.edu/labeling?
前端代碼:https://github.com/HazyResearch/mindbender?
將 DeepDive 的 corenlp 部分轉(zhuǎn)為支持中文的代碼嘗試:
https://github.com/SongRb/DeepDiveChineseApps?
https://github.com/qiangsiwei/DeepDive_Chinese?
https://github.com/mcavdar/deepdive/commit/6882178cbd38a5bbbf4eee8b76b1e215537425b2
??BRAT
介紹:http://brat.nlplab.org/index.html?
在線試用:http://weaver.nlplab.org/~brat/demo/latest/#/?
代碼:https://github.com/nlplab/brat
??SUTDAnnotator
用的不是網(wǎng)頁前端而是 pythonGUI,但比較輕量。?
代碼:https://github.com/jiesutd/SUTDAnnotator?
Paper:https://github.com/jiesutd/SUTDAnnotator/blob/master/lrec2018.pdf
??Snorkel
Page: https://hazyresearch.github.io/snorkel/?
Github: https://github.com/HazyResearch/snorkel?
Demo Paper: https://hazyresearch.github.io/snorkel/pdfs/snorkel_demo.pdf
??Slate
Code: https://bitbucket.org/dainkaplan/slate/?
Paper: http://www.jlcl.org/2011_Heft2/11.pdf
??Prodigy
和著名的 spacy 是一家做的。
Website: https://prodi.gy/docs/?
Blog: https://explosion.ai/blog/prodigy-annotation-tool-active-learning
相關(guān)鏈接
[1] Prodigy 文檔:https://prodi.gy/docs/
[2] Prodigy demo:https://prodi.gy/demo
[3] 系統(tǒng)配置參考:
https://github.com/crownpku/Rasa_NLU_Chi/tree/master/sample_configs
招募
中文文本標(biāo)注工具 Chinese-Annotator,是一個集合了前后端開發(fā)和 NLP 算法開發(fā)的富有挑戰(zhàn)性的全棧開源項目。
萬事開頭難。前期的開發(fā)需要核心團(tuán)隊協(xié)同完成,我們需要你的幫助!
1. 程序架構(gòu)
程序框架開發(fā),與前后端及算法模塊緊密溝通,定義函數(shù)功能,規(guī)范接口和參數(shù)。 我們希望參考[rasa_nlu](https://github.com/RasaHQ/rasa_nlu)的用戶配置設(shè)計將通用算法模塊和用戶數(shù)據(jù)隔離開,同時參考[iepy](https://github.com/machinalis/iepy)的前后端設(shè)計和算法尤其是 active learning 部分的設(shè)計。?
2. 前后端開發(fā)?
前端使用 vue+flask 構(gòu)架全棧開發(fā),完成 web 用戶中文文本標(biāo)注的動態(tài)交互。后端業(yè)務(wù)邏輯支撐和可擴(kuò)展的數(shù)據(jù)持久化。?
3. NLP 算法模塊開發(fā)
傳統(tǒng) NLP 特征工程,傳統(tǒng)分類(SVM)和序列標(biāo)注(CRF,HMM)算法開發(fā),深度學(xué)習(xí) NLP 的分類和序列標(biāo)注算法開發(fā)。online 及 offline 算法優(yōu)化,以及接口 API 開發(fā)。?
4. Python工程師
Python代碼開發(fā)。
如果你對以上職位感興趣,請將簡歷發(fā)送至:crownpku@gmail.com
? ? ? ? ??
?我是彩蛋
?解鎖新姿勢:用微信刷論文!
PaperWeekly小程序上線啦
今日arXiv√猜你喜歡√熱門資源√
隨時緊跟最新最熱論文
?
?解鎖方式?
1. 識別下方二維碼打開小程序
2. 用PaperWeekly社區(qū)賬號進(jìn)行登陸
3. 登陸后即可解鎖所有功能
?
長按識別二維碼,使用小程序
*點擊閱讀原文即可注冊
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學(xué)術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 加入社區(qū)
總結(jié)
以上是生活随笔為你收集整理的构想:中文文本标注工具(内附多个开源文本标注工具)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA新作解读:用GAN生成前所未
- 下一篇: NLP多任务学习:一种层次增长的神经网络