小編注:前段時間,小屋介紹了吳恩達老師近期發起的以數據為中心的 AI 競賽。吳恩達老師認為:工業界已經具備較為成熟的算法和代碼體系,現在更加缺少的是一套成熟的構建工業化數據集的方法論。然而,正如圖靈獎得主 Judea Pearl 教授所質疑的那樣:“在不知道什么是質量更好的數據的基礎上提升數據質量是不太現實的”。對于這個問題,本文作者由關系抽取任務說起,探討了一些可能的答案——我們究竟需要怎樣的數據?
前段時間,我的項目正在準備開源發布,補充項目在一些任務上的表現,以作為開源之后可以宣傳的點。我們項目的一大特點是十分擅長應對挖掘任務,因而我們自然也就想蹭波熱度,在某關系抽取評測任務上試了一下效果。
在此之前,我們的項目在一些其他挖掘任務上的表現一直是可以的,但是在那個關系抽取數據上,我們就翻車了,無論是我們的 baseline 還是增強模型,都無法打出來差異化的分數。其實簡單來講,就是:單純使用標注方法,怎么樣都無法提升了。
數據之殤
實際上,對于幾乎所有的公開評測任務,我都會本能地懷疑它的數據是什么樣子的,尤其在我看到了榜單之后。例如細粒度實體識別任務 CLUENER。它的 baseline 評測在某些類別上,連 BiLSTM+CRF 的結果都已經超過了人類(甚至可以說是遠超)。當我看到了這個榜單,自然就會本能地懷疑這個數據是有問題的。CLUENER 數據集暫且按下不表,我們繼續說關系抽取數據集。
對于讓我的項目遭遇了滑鐵盧的那個關系抽取數據集,它的主要的問題則是:無論我在模型上做什么樣的改變,效果的差異都是不穩定的(更換了隨機種子之后,不同模型結構的rank也會改變)。那我自然也要去看一看數據有什么問題了。
隨機抽取了 train 和 dev 評估之后,果然印證了我的思想。在 train 和 dev 上,在單條數據粒度上,分別存在 42% 和 37% 的數據錯誤,其錯誤包括關系錯誤、關系不全,以及句子中不存在的關系被標注成了答案。而我無論怎么更換模型結構,方法也都是簡簡單單的標注算法,就必然會存在標簽上的沖突。對于模型來講,尤其是“學習了一些知識”的預訓練語言模型來講,自然就 confuse 了。
當然我也理解這種數據會出現,因為關系抽取數據在構造的時候,基本都是用已有的圖譜 SPO 數據去反查文本,通常 S 和 O 在某一個句子里面共現了,就認為該句中存在這種關系了。
注:SPO 指
這種數據構造方法當然一定是有問題的。這個數據的質量一看也自然是未經review的。甚至說,在學界,大家在打榜的絕大多數公開數據,可能都或多或少存在著不可忽視的噪音問題,例如最近在比的某領域比賽的某一個數據之中,就存在這種東西。這讓我不禁有了一個疑問:當數據有不可忽視的噪音問題的時候,榜單上的高分導向的就是更好的模型嗎?如果答案是否定的,那這些比賽的意義在哪里呢?只是在消耗多余的算力,擠占業務的用卡時間嗎?
我們需要什么樣的數據
關系抽取數據中存在這樣一個例子:
汪涵曾多次在天天向上中展示自己高超的廚藝。
這句話,數據中標出來的答案是S:天天向上,P:主持人,O:汪涵。乍一看好像沒有問題。但是我們仔細想一想:如果排除掉所有的背景知識,我們看這個句子會得到怎樣的理解?是否真能推斷出“主持人”這一關系?
排除背景知識,只看句子本身:汪涵貌似是一個人,天天向上似乎是一個節目——汪涵可能參加過天天向上。這個是我們通過中文的常識知識和句式知識能夠推斷出來的信息。
更進一步,即使我們給出一些特化信息,即“汪涵是著名主持人”,天天向上是綜藝節目”。在帶有這樣的先驗下,我們又能推斷出來什么信息呢?汪涵是一個主持人,但主持人參加綜藝節目未必就是主持綜藝節目。比如主持人馬東參加過脫口秀大會,但他只是嘉賓。所以,對于“汪涵”和“天天向上”這兩個個體,我們從這句話中還是只能推斷出參加關系。
那模型怎樣才能知道這個關系?看上去只有通過這個訓練樣本,讓模型自己強行記住這個關系了。(當然還有一種可能是:模型從別的句子里面學到了“汪涵主持天天向上”的知識,然后在這個句子里面應用到了。但如果是這樣,那這個訓練樣本的用處是什么呢?)
或許有的朋友會反駁說:在訓練關系抽取任務的時候,就是想讓模型去過擬合一些東西的。也就是說,直接將汪涵和天天向上兩個實體完全綁定起來,形成主持關系,這樣在榜單上就可以打高分了。然而,如果以這樣的方式去擬合S和O的名字,就要保證測試集和真實使用場景中一定會出現類似的情況。
如果過擬合這個句式里面出現的S和O一定是主持,一定會在其他場景中遇到問題。比如下面這個例子:
張杰也多次在快樂大本營上表現了對謝娜的愛意。
這句話和“汪涵曾多次在天天向上中展示自己高超的廚藝”的句式十分相像。那張杰和快樂大本營又是什么關系呢?實際上,數據中甚至可能會標注出張杰和謝娜的夫妻關系,以及謝娜是快樂大本營的主持人。但這兩條關系在這句話中都沒有直接的體現。
我們再看CLUENER中的一個例子:
去年我們憑借《現代戰爭1》大獲成功,其輝煌業績讓眾多業界老手大跌眼鏡。
其中,現代戰爭1被標注成為了游戲。
這個例子,我想我沒有必要做過多的解釋了。人沒打過這游戲的,確實標不出來。同理,沒了解過賽博朋克2077的人,可能也不太會知道波蘭蠢驢這個名字。
(實際上這個問題也有提到issue里面,但是權威大佬們也沒有理會我......)
另外,還有在研究中文分詞的時候經常會舉的一個所謂疑難雜癥般的例子:
南京市長江大橋
實際上,這句話兩種切分方式都是合理的,都符合我們的常識認知,只不過可能有一個不是事實。那么其實我認為,對于模型來講,就不必過分糾結于這條數據會被切分成哪一個。
模型真正要去區分的,其實是下面兩個句子:
南京長江大橋位于南京市鼓樓區下關浦口區北之間
南京市長江大橋因嚴重違紀違法問題被立案檢查
舉了那么多例子,其實是想說:我們在衡量一個數據好壞時,似乎應該遵循這樣一個邏輯——如果僅利用任務規則中允許我們用到的知識,人類能否有能力得到該樣本中給出的答案?如果能,則這條數據是一個好的數據;如果不能,則一定會對模型形成誤導。所以在判定一條數據的時候,我們應該去回顧這幾乎本能做出判斷背后的思考過程。如果我們不知道答案,通過思考也得不到這個答案,為什么要讓模型去得到這個答案呢?
我們在用數據和任務的形式去建模這個世界,并基于此去指導模型去學習。這一過程其實與我們教育人類幼崽的方式、或者我們自己去理解新知識的方式,是類似的。畢竟,我們現在還不具備憑空描述知識的能力,只能把人類一直在經歷的學習過程加諸到模型身上。
在預訓練的階段,我們貌似讓模型學到了部分語法知識,以及通過大量的事實知識讓模型部分學到了常識知識,但遠遠沒做到讓模型去記憶事實,實際上也記憶不過來,又怎么指望模型在任務中直接就能搞定那些僅僅包含事實的判定呢?
題外話,由于我是做解析的,所以實際上我是沒有那么支持領域預訓練的。因為具體領域和所謂通用域的區別,更多是在于專名(命名實體、術語等)的區別,但表達是相對固定的。還是類比人類,哪怕一個人不是醫生,他看到自己的病歷的時候,除了可能看不懂疾病、臨床表現、藥物,醫療程序等等的專業術語,也能大概能看懂這個病歷的一些意思。無論領域專業性多強,它也是“人話”。在做解析挖掘的時候,我們也應讓模型著重去看懂人話的部分,而不是依賴那些專業的部分。是否不需要讓模型見過那些專業的東西,也能做到效果不錯?當然這個思路比單純去做模型繁瑣得多,產出也慢得多。
任務回歸應用
回歸到更本源的問題,關系抽取任務是為了做什么的?
其實最初關系抽取任務是為了輔助構造結構化知識。隨著知識圖譜越來越多,關系抽取模型已然可以基于已有數據知道一些知識了。此時,我們的需求可能就變成了“通過新的事實描述文本去挖掘補充新的知識”。更準確地說,我們希望:模型能夠基于已有知識圖譜中的信息,從新的文本中挖掘出新的關系,從而與時俱進地補充和更新現有知識圖譜。
當然這種“新的關系”不是類似于“爸爸的爸爸是爺爺”的關系。工業應用已經證明了,這種關系寫規則更香。需要補充的是真正的新關系,比如新婚,比如新參演電影,比如新主持節目等。
所以其實在定義任務的時候,應該詢問這樣幾個問題:
這個任務想要導向什么樣的模型?
這個任務做好了之后能干什么?
這個任務能不能做?
而不是直接拍腦門想出來了這么個任務,然后就隨手弄一波數據發出來了。這樣只會讓學界與工業界越來越剝離,只會讓研究越來越沒有用,只會讓頂會做的這種種事情越來越變成消耗多余的電力。
同時在數據上,也應該有上面所提到的思考。給出的數據,也應該符合實際會應用到的需求。現在看來,部分領域任務或許能做到這個。
否則,最終也只會導向越來越無意義的卷。
所幸,或許,業界有去重新思考數據的趨勢,例如Ng老師的新比賽。但,前路茫茫,不知這束光,是否長久。
責任編輯:lq6
-
數據
+關注
關注
8文章
7006瀏覽量
88958 -
模型
+關注
關注
1文章
3229瀏覽量
48813
原文標題:在錯誤的數據上,刷到 SOTA 又有什么意義?
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論