清華、劍橋、UIC聯合推出首個中文事實核查數據集:基于證據、涵蓋醫療社會等多個領域
- 論文地址:https://arxiv.org/pdf/2206.11863.pdf
- 數據集CHEF Dataset鏈接:https://github.com/THU-BPM/CHEF
1. 介紹
我們先來看看任務的定義,舉一個相對比較簡單的例子:
?
比如上海封控期間,某自媒體就聲稱“李立群偷下樓買肉被抓”。單憑這個聲明(Claim)本身,我們其實沒法判斷他有沒有偷偷下樓買肉然后被抓。為了驗證這個聲明的真實性,最直觀的思路就是要尋找證據(Evidence),證據就是你能夠搜集得到的,同時能夠幫助我們驗證一個聲明真實性的信息。比如下圖,本人直接下場手撕就可以作為證據了。
?
上面舉的這個聲明是比較簡單的,只需要簡單的證據,也不需要基于證據進行推理。下面我們來看一個相對復雜一點的例子。比如有聲明:2019 年,共有 12.08 萬人參加成都中考,但是招生計劃只有 4.3 萬。要驗證這個聲明相對就困難一些了,假如我們找到報告 2019 年成都中考的相關文檔:
......今年共有 12.08 萬人參加中考,這個是成都全市, 包括了 20 個區,高新區和天府新區的總參考人數。月前,教育局公布了 2019 年的普高招生計劃。招生計劃數進一步增加,上普高的機會更大了。......
2019 年,中心城區(13 個區)招生計劃為 43015 人。
這個文檔中包含了非常多和聲明相關的信息,但是直接相關的,能夠幫助我們驗證聲明的,就是上述的第二段話的后半部分,還有隔了很多段話之后的第一句話。根據這幾個證據,我們可以知道成都全市 20 個區的確有 12.08 萬人參加中考,而中心城區(只包含了 13 個區)的招生計劃確實也是只有 4.3 萬。雖然數字都對,但是這里偷換了概念,在討論參加中考人數時使用了 20 個區的人數,而在討論招生計劃時卻將 20 個區的范圍縮小成為 13 個區,從而誤導讀者。驗證這種聲明很多時候我們需要從一個或者多個文檔當中抽取直接相關的證據,同時基于抽取的證據進行推理。為了促進中文的事實核查機器學習系統,于是我們提出了這樣一個基于證據的中文數據集。
2. 相關工作
根據事實核查的綜述[1],目前事實核查的數據集大致可以分為兩類:人工的(Artificial)和天然的 (Natural)。
人工的(Artificial):就是請標注者按照維基百科上的句子進行改寫作為聲明,文檔里面相關的段落可以作為證據驗證這個聲明。如果是同義轉換,那么這個聲明就是被證據所支持(Supported),如果替換了句子里面的實體,或者加了否定等一系列修改,那么這個聲明就是被證據所反對(Refuted)。
這種標注范式最開始就是 FEVER[2],后面很多有名的數據集比如:TabFact[3]也是沿用了這種范式。這類型的人工數據集的好處就是可以規模化,請標注者標注上 10 萬的聲明,非常適宜訓練神經網絡。另一方面,相關的證據也容易獲得。缺點就是,這些聲明并不是日常生活中我們會遇到的,廣大人民群眾喜聞樂見的聲明,比如你不會基于李立群的維基百科改寫出 “他偷偷下樓買肉被抓” 的聲明。另一方面,這類型的數據集假設維基百科包含了驗證聲明所有的知識,這是一個比較強的假設。在現實場景里面往往不滿足這個假設。最簡單的一個問題就是維基百科會存在時間上的滯后性。
?
天然的 (Natural):就是從事實核查的平臺上面直接爬取下來的聲明,外國比較有名的機構就是 PolitiFact,經常核查特朗普講的話。這類型的數據集的好處就是,他是廣大群眾日常會碰到的,想要知道真相的聲明。也是人類事實核查者需要去進行甄別的聲明。
假如我們最終是要構建一個能夠一定程度上替代人類核查者的系統,這個系統的輸入就需要是這類型的聲明。這類數據集的缺點也很明顯,就是人類核查過的聲明數量是非常有限的。如表格所示,大部分的數據集其實都要比人工構造的小一個數量級。
另一方面就是,尋找證據是一個非常困難的問題。現有的數據集一般就是直接使用事實核查的文章 [4] 作為證據,要么就是用聲明輸入給谷歌搜索進行查詢[5][6],然后用返回的搜索摘要(如紅框所示)作為證據。
?
這些尋找證據的方法有兩個問題:
- 使用事實核查文章本身作為證據:在真實場景里面,這種做法是不切合實際的,假如我們要上線一個事實核查系統,系統需要去核查新的聲明的時候,往往還沒有事實核查的文章出現。這樣系統就沒法學會如何搜集證據了。
- 使用谷歌摘要作為證據:這種做法克服了上述的問題,更加貼近真實場景,事實核查者往往需要依賴搜索引擎尋找相關的信息。但是這種方法也有弊端,就是信息量嚴重不足,如上圖所示,谷歌的基于規則的摘要基本沒法提供充分的信息,來幫助我們判斷聲明的真實性。
針對以上提到的問題,我們構建了 CHEF,CHEF 有以下幾個特點:
- 使用真實世界的聲明,同時是中文的,填補了中文事實核查數據集的空白。
- 使用搜索引擎返回的文檔作為原始證據,更加貼近真實場景。
- 使用人類標注返回文檔的相關句子作為細粒度的證據,可以用于訓練核查系統學會如何搜集證據。
3. 數據集構建
數據集的構建包含 4 個部分:數據收集,聲明標注,證據檢索和數據驗證。
3.1 數據收集
原始聲明主要從四個中文的事實核查網站上面爬取(根據杜克新聞平臺 ),其中簡體中文有兩個:中國辟謠中心和騰訊較真。繁體中文是來自于臺灣的兩個平臺:MyGoPen 和臺灣事實核查中心。由于從事實核查網站中爬取的聲明絕大部分(90%+)都是不實的,其實很直觀,大部分流行的謠言 / 聲明都是不實的,才會被核查平臺辟謠 / 驗證。參考前人的方法(PublicHealth[7]),我們爬取中國新聞網的標題作為真實的聲明,構造一個標簽相對平衡的數據集。
3.2 聲明標注
?
和國外相對成熟的事實核查機構相比,中國的核查平臺發布的文章相對沒有那么規范。比如 PolitiFact 會明確告訴你聲明是什么,核查摘要是什么,證據和推理細節是什么(如上圖所示)。但中文的文章一般不會明確指出,所以我們請標注者閱讀文章之后抽取出文章驗證的聲明。同時也對聲明進行清洗,降低其含有的偏差(bias)。
之前有工作表明[8],事實核查數據集里面的聲明含有比較強的 bias(比如不實的聲明一般帶有否定詞),BERT 等 PLM 可以通過直接捕捉這些 bias,不需要證據就可以驗證聲明。清洗的方法包括將反問句改為陳述句,去掉一些可能帶有 bias 的詞語,比如:重磅,震驚等等。抽取出聲明之后,我們還要求標注根據事實核查的文章給聲明打標簽。我們采取和 FEVER 等一系列工作類似的分類,使用 Supported,Refuted 和 Not enough information(NEI)的三分類。其中 Refuted 是最多的,NEI 的數量是最少的。
3.3 證據檢索
我們使用聲明作為查詢語句去查詢谷歌搜索,然后過濾掉部分文檔,一部分是聲明發表時間之后的文檔,另一部分是來自于不實消息傳播平臺的文檔,最后保留 Top 5 的文檔。然后要求標注者針對每個聲明,選擇最多 5 個句子作為證據。
數據集中的聲明和證據的統計數據如下所示:每個聲明返回文檔的平均長度為 3691 個詞,其中標注者抽取出最后細粒度證據的句子包含 126 個詞,假如使用谷歌基于規則的摘要則平均包含 68 個詞。簡單地從數字上面進行比較,使用返回的文檔和標注的句子,要比直接使用摘要提供了更多的上下文信息。
3.4 數據驗證
為了保證標注一致性,我們添加了一輪數據驗證,隨機抽取了 3% 已標注的聲明,一共 310 個分給 5 個標注者進行標簽再標注。Fleiss K score 達到了 0.74,比 FEVER 的 0.68 和 Snopes[5]的 0.70 略高一些,說明了數據標注的質量不遜色于前人構建的數據集。CHEF 中聲明主要分為 5 個主題:社會,公衛,政治,科學和文化。和歐美的事實核查平臺關注在政治領域不同,中文平臺更加關注公共衛生議題,比如:新冠病毒,養生,醫療等。另一個主要議題是社會,比如:詐騙,升學,社會事件等。
驗證聲明主要有四方面的挑戰:
- 證據搜集:將近 70% 的聲明都要求搜尋到相關的證據才能驗證。
- 專家咨詢:將近 40% 的聲明需要通過咨詢專家才能得到相關的信息。
- 數值推理:18% 的聲明驗證需要進行數值上的推理才能得出結論。
- 多模態:約 8% 的聲明需要圖片,視頻等非文本的證據。
?
4. 基線系統
和之前經典的事實核查數據集(比如 FEVER)類似,機器學習系統需要先在給定的文檔里面選擇相關的句子作為證據(證據檢索),然后再根據證據對聲明進行驗證(聲明驗證)。
本文根據千人的工作,提出了兩大類的基線系統:流水線(pipeline)和聯合(joint) 系統。流水線(pipeline):即證據檢索和聲明驗證是兩個分開的模塊,先使用證據檢索器抽取出證據,再聯合聲明一起交給聲明驗證模塊進行分類。
- 證據檢索部分:我們使用了 4 種不同的抽取器從返回的文檔當中抽取句子作為細粒度的證據。第一種就是基于字符特征匹配:TF-IDF;第二種是基于語義特征匹配:我們使用中文 BERT,然后計算余弦相似度。第三種是混合特征:采取上述兩種特征,然后在用 rankSVM 排序。最后一種基線系統就是經典的谷歌返回的摘要。
- 聲明驗證部分:我們使用 3 種不同的模型。第一種就是基于中文 BERT,將聲明和上面得到的證據拼接起來丟給 BERT 進行三分類。第二種是基于注意力的模型,基于聲明賦予證據不同的權重之后進行分類。第三種是基于圖的模型:我們使用了 FEVER 上面的 SOTA 圖模型 KGAT[9],可以更好地在綜合不同的證據進行推理。
聯合(joint):證據檢索和聲明驗證模塊聯合進行優化。使用了三種不同的模型,第一種是 FEVER 上面 SOTA 的聯合模型[10],使用了多任務學習的框架,同時學習給證據和聲明打標簽。第二種是把證據抽取作為隱變量進行處理[11],給返回的文檔的每個句子打 0 或者 1 的標簽,打了 1 標簽的句子將會留下作為證據和聲明一起進行分類,使用 REINFORCE 進行訓練。第三種方法和第二種類似,只不過使用 HardKuma 和重參數的方法進行聯合訓練[12],而不是使用策略梯度。
5. 實驗結果
5.1 主要結果
實驗主要結果如下圖所示:
- 從證據檢索的角度來看:聯合模型要比流水線模型表現總體要好一些,主要原因是證據檢索模塊可以被優化,從而能夠找到更加能夠幫助驗證聲明的證據。另一方面,使用返回的文檔總比使用谷歌摘要效果要好,主要因為是文檔包含更加豐富的信息。最后就是直接使用人類標注的證據效果遠遠超過了目前的兩大類基線模型。和其他事實核查的數據集類似(FEVEROUS),證據檢索是驗證聲明的一個難點。怎么根據人類標注的證據去優化證據檢索模塊是未來值得研究的方向。
- 從聲明驗證的角度來看:基于圖的模型(KGAT)的表現比基于簡單的 BERT 和基于注意力的模型要好一些,通過構造圖來捕捉證據推理鏈是有效的方法。但另一方面,圖模型的提升并沒有特別明顯,可能還需要針對數據集本身做一些因地制宜的優化。
5.2 細粒度證據的數量
細粒度證據的數量并不是越多越好,如下圖所示,當我們選擇 5 個句子作為細粒度證據的時候,流水線系統里面的證據抽取器取得了最好的效果,當抽取 10 個和 15 個句子作為證據的時候,效果越來越差,我們猜測是抽取的句子里面引入了比較多的噪聲,影響了聲明驗證的模型進行判斷。
5.3 聲明長度的影響
絕大部分的聲明都大于 10 個詞,其中長度越長模型效果越好,我們猜想主要原因是聲明比較詳細,比較容易搜集到的詳盡的證據幫助模型進行判斷。在聲明長度比較短的時候,集中基線模型的差距不是很大,當長度比較長的時候,拿到的證據越好,聲明驗證的效果越好,也說明了證據檢索這一環節的重要性。
5.4 聲明領域的影響
來自于科學領域的聲明最難被驗證,模型效果基本都不超過 55。一方面是比較難搜集到相關的證據,另一方面是關于科學議題的聲明相對比較復雜,往往需要隱式的推理才能得到結果。
5.5 聲明類別的影響
如圖所示,即使我們引入了部分 Supported 的聲明,但是整個數據集仍然存在類別不平衡的問題。模型在 NEI 這個類別上的效果要遠遠弱于 Supported 和 Refuted 這兩個類別。未來的工作可以研究如果針對類別不平衡的事實核查數據集,調整聲明驗證的模型,或者使用數據增強的方法,在訓練過程中隨機增加 NEI 的數量,比如 FEVEROUS[13]在訓練過程中就隨機針對一些聲明扔掉對應的證據,然后將這些聲明的類別改為 NEI。