記得寫畢業(yè)論文那會兒,經(jīng)常為語料發(fā)愁。由于大多數(shù) NLP 問題都是有監(jiān)督問題,很多時候我們往往缺的不是算法,而是標注好的語料。這在中文語料上更是明顯。今天就和大家分享一些中文 NLP 領域,構建語料的經(jīng)驗和技巧,雖然未必看了此文就能徹底解決語料的問題,但是或多或少會有些啟發(fā)。
首先分享幾個常見的語料獲取渠道
國內(nèi)外NLP領域的會議評測數(shù)據(jù)
相關研究機構、實驗室、論文公開的數(shù)據(jù)集
國內(nèi)外數(shù)據(jù)科學競賽平臺,kaggle,天池,科賽,CCF等
互聯(lián)網(wǎng)企業(yè)自己舉辦的比賽,如百度,搜狐,知乎,騰訊這些企業(yè)都是土豪,通常會花費巨額的資金標注語料
Github 很多模型里面會自帶部分語料
雖然通過這些途徑,能夠搜集到不少的NLP語料,但這些“現(xiàn)成”的語料往往與我們需要解決的 NLP 問題不太一致,因此我們還得想辦法去變一些語料出來。
通過API或開源模型標注語料
比如我們需要訓練一個命名實體識別模型,就可以借助 bosonnlp 或者 hanlp、foolnltk 上去標注一些語料。這些API和模型有的時候只提供了模型的預測結果,沒有提供訓練的語料,但是我們可以拿這些別人訓練好的模型去構造語料。

知識蒸餾
我們可以將別人訓練的模型看做是Teacher, 然后用API標注的語料自己訓練的模型看做是Student, 雖然結果不能達到和原來模型一致的效果,但是也不至于差太多,這種方式在初期能夠幫助我們快速的推進項目,看到項目的效果后,后期再想辦法優(yōu)化迭代
通過搜索引擎收集標注數(shù)據(jù)
假設我們需要做一個NER模型,其中一類實體是人名,可能我們想到的是從網(wǎng)上下載一批新聞,然后標出其中的人名,但是,這樣做有一個問題,一篇幾千字的新聞往往只有幾個人名,而我們只需要出現(xiàn)了人名的那部分句子,并不需要其他部分。如果直接在整篇文本上標注效率十分低。其實,我們可以轉換一下思路,找一份中文人名詞庫,然后放到百度中搜索,百度摘要返回的大部分結果基本是我們想要的語料,通過爬蟲把摘要爬下來,自己再過濾下就好啦。這樣的做法相當于,借助于一些過濾和排序算法,幫助我們快速找到待標注的語料。

二次加工已有語料
有的時候,一些語料和我們的需要解決的任務相似,但又完全不一樣,這時候我們可以嘗試利用其他任務的語料來構建出想要的語料。就拿百度2019信息抽取比賽來說吧,該比賽的任務是從
"text": "《逐風行》是百度文學旗下縱橫中文網(wǎng)簽約作家清水秋風創(chuàng)作的一部東方玄幻小說,小說已于2014-04-28正式發(fā)布"
這樣的句子中抽出實體和關系三元組
"spo_list": [{"predicate": "連載網(wǎng)站", "object_type": "網(wǎng)站", "subject_type": "網(wǎng)絡小說", "object": "縱橫中文網(wǎng)", "subject": "逐風行"}, {"predicate": "作者", "object_type": "人物", "subject_type": "圖書作品", "object": "清水秋風", "subject": "逐風行"}]screenshot-lic2019-ccf-org-cn-kg-1574584084691
百度總共提供了大概17萬的標注數(shù)據(jù),而且數(shù)據(jù)標注質(zhì)量頗高。訓練數(shù)據(jù)被標注為以下格式:
{"text": "《逐風行》是百度文學旗下縱橫中文網(wǎng)簽約作家清水秋風創(chuàng)作的一部東方玄幻小說,小說已于2014-04-28正式發(fā)布", "spo_list": [{"predicate": "連載網(wǎng)站", "object_type": "網(wǎng)站", "subject_type": "網(wǎng)絡小說", "object": "縱橫中文網(wǎng)", "subject": "逐風行"}, {"predicate": "作者", "object_type": "人物", "subject_type": "圖書作品", "object": "清水秋風", "subject": "逐風行"}]
由該數(shù)據(jù)我們可以構造什么數(shù)據(jù)呢?
命名實體識別語料
由于語料中的每個實體都標注了實體類別,所以可以通過實體類別,構造出命名實體識別任務的語料,這17萬數(shù)據(jù)集,提供了國家、城市、影視作品、人物、地點、企業(yè)、圖書等10幾個類別的實體,這些語料加上人名日報、msra、bosonnlp 公開的NER語料,我們就可以擴充一個更大的NER語料集;
開放關系抽取語料
雖然該數(shù)據(jù)集是面向封閉域關系抽取的數(shù)據(jù)集,其實改造一下,也能用于句子級別的開放域關系抽取任務中,比如我們可以構建一個基于序列標注的關系和實體聯(lián)合抽取模型,簡單的說就是給定(S,P,O)三元組和text,從中抽取一個代表關系的動賓短語或名詞性短語來。比如從《逐風行》是百度文學旗下縱橫中文網(wǎng)簽約作家清水秋風創(chuàng)作的一部東方玄幻小說,小說已于2014-04-28正式發(fā)這句話抽?。ㄇ逅镲L,創(chuàng)作,《逐風行》)這樣的關系三元組。當然,要改造成適合開放關系抽取的語料,還有一些工作需要做。比如原來語料中的S和O是我們要抽取的內(nèi)容,而P卻不是,因此,我們可能需要進行二次標注或者再構建一個模型去預測出P。
很多公開的語料都可以采用類似的做法,這里就拋磚引玉一下,不一一介紹了。
標注工具
工欲善其事,必先利其器 ,標注工具能夠大大提高標注效率,標注工具通過提供方便的快捷鍵和交互方式,讓我們在相同時間,標注更多的數(shù)據(jù)。同時,還可以在標注工具中嵌入一些AI輔助標注的能力,實現(xiàn)機器自動標注,而我們只需要修改和刪除小部分的錯誤標注樣本,進一步提高效率。

主動學習標注
在機器學習任務中,由于數(shù)據(jù)標注代價高昂,如果能夠從任務出發(fā),通過對任務的理解來制定標準,挑選最重要的樣本,使其最有助于模型的學習過程,將大大減少標注的成本, 主動學習就是解決這個問題的。關于主動學習背后的理論細節(jié),感興趣可以自行谷歌,這里舉一個通俗易懂的例子簡要解釋一下。

可以
還記得支持向量機中的“支持向量”嗎?當我們在分類的時候,并不是所有的點對于分割線的位置都是起決定性作用的。在離超平面特別遠的區(qū)域,哪怕你增加10000個樣本點,對于分割線的位置,也是沒有作用的,因為分割線是由幾個關鍵點決定的(圖上三個),這幾個關鍵點支撐起了一個分割超平面,所以這些關鍵點,就是支持向量。借鑒大數(shù)據(jù)標注任務上,如果能夠準確的標出那些“重要”的樣本,就有可能實現(xiàn)“事半功倍”的效果。


隨機標注的結果可能是上圖中的b, 準確率大約為70%。而右圖就是主動學習方法找到的標注點,因為這些點幾乎構成了完美分界線的邊界,所以使用與中圖同樣的樣本數(shù),但它能夠取得90%左右的準確率!
弱監(jiān)督的數(shù)據(jù)標注
監(jiān)督學習就是我們有一批高置信的標注數(shù)據(jù),通過model來擬合效果。弱監(jiān)督學習,就是我們很難獲取足夠量的高置信的標注數(shù)據(jù),所以弱監(jiān)督學習就是來解決這個問題。
這里為大家介紹一個斯坦福的研究者開源的弱監(jiān)督學習通用框架 Snorkel ,由這種方法生成的標簽可用于訓練任意模型。已經(jīng)有人將Snorkel用于處理圖像數(shù)據(jù)、自然語言監(jiān)督、處理半結構化數(shù)據(jù)、自動生成訓練集等具體用途。

Snorkel 集成了多種知識來源作為弱監(jiān)督,我們只需要在基于MapReduce模板的pipeline中編寫標記函數(shù),每個標記函數(shù)都接受一個數(shù)據(jù)點生成的概率標簽,并選擇返回None(無標簽)或輸出標簽。在編寫標記函數(shù)的時候,我們可以利用一切可以利用知識來標記我們的數(shù)據(jù),這些知識可能包括,人工規(guī)則、知識圖譜、已有的模型、統(tǒng)計信息、網(wǎng)頁等。

如上圖所示,假設我們在做NER任務,需要標注人名,可以用來構建標記函數(shù)的知識有:
文本是否在人名詞庫中
jieba、hanlp等NLP工具包給出的pos tag
文本是否是知識圖譜中的人物實體
基于以上知識,我們就可以寫出多個標記函數(shù)了。當然,通過 Snorkel 標注的數(shù)據(jù)是有噪聲的,甚至很多標記函數(shù)給出的結果互相沖突。這些我們完全不用擔心,因為Snorkel已經(jīng)提供了解決這些問題的方法。
拿出項目的效果,向公司申請資源
最后的最后,我們可以想好算法的落地場景和價值,講好故事,向公司和老板的爭取資源!
-
機器學習
+關注
關注
66文章
8554瀏覽量
136996 -
GitHub
+關注
關注
3文章
488瀏覽量
18692 -
nlp
+關注
關注
1文章
491瀏覽量
23282
原文標題:一文詳解NLP語料構建技巧
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
電子工程師設計要點與經(jīng)驗分享
爬壁機器人磁鐵的一些常見問題
關于六類網(wǎng)線一些問題的解答
貼片電容精度J±5%的一些詳細知識
蜂鳥E203的浮點指令集F的一些實現(xiàn)細節(jié)
在Ubuntu20.04系統(tǒng)中訓練神經(jīng)網(wǎng)絡模型的一些經(jīng)驗
基于rtt的scons構建的keil工程如何增加project_targets?
分享一些工業(yè)用水監(jiān)測物聯(lián)網(wǎng)系統(tǒng)方案的實施經(jīng)驗
Debian和Ubuntu哪個好一些?
2025慕展:功率半導體廠商和產(chǎn)品的一些觀察
簡述電源設計經(jīng)驗技巧
工業(yè)控制PCBA抗震設計要點:經(jīng)驗分享與技術探討
如何使用flex-builder構建aruco庫?
樹莓派在自動化控制項目中的一些潛在應用
一些中文NLP領域,構建語料的經(jīng)驗和技巧
評論