NLP 模型評測方法 CHECKLIST

2020-12-25 NLP學習筆記

目前大部分 NLP 模型都是通過劃分訓練、測試集進行性能的評估,在訓練集訓練,用測試集評估,但是這種方式往往會高估了模型的性能。本文介紹 ACL 2020 年的 Best Paper,論文作者提出了一種新的 NLP 模型評測方法 CHECKLIST。CHECKLIST 借鑑了傳統軟體工程的測試準則,通過模板快速生成大量樣例,全面測試模型的各種能力,可以用於幾乎所有 NLP 任務。

1.背景

訓練 NLP 模型的一個主要目標是獲得良好的泛化能力,即訓練得到的模型可以很好地用於真實場景。目前一般是採用劃分數據集的方式評估模型的泛化能力,把模型劃分為訓練、驗證、測試集,通過測試集評估模型性能,但是這種方式存在一些缺陷:

測試數據集通常不夠全面,並且和訓練數據集有相似的分布,和真實場景有偏差,因此通常會高估模型的性能。傳統的評測方法通常會得到一個單一的統計值,例如 accuracy 和 F1,不能指出模型效果不理想的具體地方,不容易修復。針對這些問題,論文《Beyond Accuracy: Behavioral Testing of NLP Models with CheckList》的作者們提出了 CHECKLIST 測試方法,這篇論文是 ACL 2020 年的最佳論文。CHECKLIST 總結了 NLP 模型應該具備的多項能力,對於每一項能力均採用三種不同類型的測試方法進行評估,全面地得到模型各項能力水平。

對於 CHECKLIST 的每一項測試,可以採用模板快速生成大量測試樣例,幾乎適用於所有 NLP 任務。作者提供了開源工具用於生成測試樣例,代碼地址:https://github.com/marcotcr/checklist 。

作者利用 CHECKLIST 對商用模型和一些 state-of-art 模型進行評估,發現了這些模型一些致命的缺陷。在用戶研究過程中發現,NLP 從業者使用 CHECKLIST 可以進行兩倍多的測試,並且發現 bug 的數量是不使用 CHECKLIST 人員的三倍。

2.CHECKLIST

2.1 NLP 模型的各種能力

作者認為傳統的軟體工程測試時會把功能劃分為幾個獨立模塊,對每一個獨立的模塊分別進行測試,驗證每個模塊功能是否正確,但是 NLP 模型通常不能明確劃分為幾個模塊。

因此 CHECKLIST 列出了常見 NLP 模型應該具備的幾種能力 (Capabilities),針對這些具體的能力,分別進行測試。NLP 模型應該具備的能力包括:

Vocabulary+POS:詞彙和詞性,評估模型是否掌握了常見的單詞,是否可以恰當地處理不同詞性單詞對任務的影響。 Taxonomy:近義詞和反義詞,把句子中的一個單詞替換成近義詞,語義應該保持一致。Robustness:穩健性,句子中某個單詞拼寫錯誤或者對句子進行一些不重要的改動,模型應該保持預測結果一致。NER:命名實體,模型要正確理解命名實體。Fairness:公平性,模型不應該帶有某種歧視,例如對待女性和男性,黃種人和白種人應該保持一致。Temporal:時序,模型要具備識別事件先後的能力。Negation:否定,在句子中加入否定詞,模型能正確預測的句子的情感極性。2.2 測試方法

CHECKLIST 中主要用了三種測試方法:最小功能測試 (MFT)、不變性測試 (INV) 和方向期望測試 (DIR)。作者建議對於 NLP 模型的每一種能力,都儘量採用這三種測試方法測試一遍。下面以情感分類任務為例,介紹三種不同的測試方法。

最小功能測試 Minimum Functionality test (MFT)主要是受到單元測試的啟發,用模板生成大量的針對某一任務和能力的簡單測試用例,用這些測試用例測試模型性能。對於情感分類任務,如果要用 MFT 測試模型的 Negation 能力,則可以用下面的模板生成測試用例。

MFT 生成模板

不變性測試 Invariance (INV)是指對原始句子進行一些不影響預測結果的變化,這是模型的預測應該保持和原始句子一致,否則說明模型有問題。對於句子的不同成分進行改變,可以測試模型的不同能力,例如改變句子中的地名,可以測試模型的 NER 能力,如下所示。

INV 生成模板

方向期望測試 Directional Expectation test (DIR),對原始句子進行修改,並且保證修改後結果往期望的方向變化。例如在情感分類中,在一個負情感的句子後面增加一個負情感的短語,預測結果應該保持負的。如下圖所示。

DIR 生成模板

作者提供了開原始碼,可以很容易的根據各種模板生成對應的測試樣例。

2.3 CHECKLIST

用 CHECKLIST 測試的小例子

上圖是用 CHECKLIST 測試 Google 商用情感分析模型的例子。通過 MFT 生成了很多帶否定短語的簡單句子,這些句子正確標籤均是 Neg,但是模型和容易預測為 Pos 和 Neutral,錯誤率高達 76.4%。對於 INV 測試,作者修改了句子中的一些地點名稱,也會影響到模型的預測結果。

3.實驗效果

CHECKLIST 對五個出名的商業模型和 state-of-art 模型中進行評測,包括微軟、谷歌、亞馬遜的商業模型以及 BERT 和 RoBERTa。下面是 CHECKLIST 對於這五個模型在情感分析任務上的評測。

情感分析 CHECKLIST 評測結果

可以看到這些模型對於很多簡單的測試樣本都預測錯誤了,例如 BERT 和 RoBERTa 對於 MFT 生成的 neural 句子有 94.6% 和 81.8% 的概率會預測錯誤。對於CHECKLIST 生成的帶雙重否定的句子 (Negation),這五個模型效果均不理想。

這些測試樣例都不是很複雜的句子,但是卻可以比較容易地發現模型的缺陷,對於我們評估模型的性能有很大啟發。

4.參考文獻

Beyond Accuracy: Behavioral Testing of NLP Models with CheckList

相關焦點

  • 用Spark-NLP建立文本分類模型
    # 導入Spark NLPfrom sparknlp.base import *from sparknlp.annotator import *from sparknlp.pretrained import PretrainedPipelineimport sparknlpfrom pyspark.sql import SparkSessionfrom pyspark.ml
  • 支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP
    的相關論文、安裝、使用以及設置方法。該系統由單系統組件組成,而一些表現最佳的模型則使用集成方法。此外,該系統的 UFeats 分類器在這些 treebank 上也非常準確。模型下載和使用說明詳見:https://stanfordnlp.github.io/stanfordnlp/installation_download.html#models-for-human-languages。
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    詞袋法詞袋法的模型很簡單:從文檔語料庫構建一個詞彙表,並計算單詞在每個文檔中出現的次數。換句話說,詞彙表中的每個單詞都成為一個特徵,文檔由具有相同詞彙量長度的矢量(一個「詞袋」)表示。例如,我們有3個句子,並用這種方法表示它們:
  • 【NLP】競賽必備的NLP庫
    import jiebaseg_list = jieba.cut("我來到北京清華大學", cut_all=True)print("Full Mode: " + "/ ".join(seg_list)) seg_list = jieba.cut("我來到北京清華大學", cut_all=False)print("Default Mode:
  • 如何開始學習NLP? 6種用來標識化的方法
    你是否正在尋找處理這些文本數據的方法,但不確定從哪裡開始?畢竟,機器識別的是數字,而不是我們語言中的字母。在機器學習中,這可能是一個棘手的問題。那麼,我們如何操作和處理這些文本數據來構建模型呢?答案就在自然語言處理(NLP)的奇妙世界中。解決一個NLP問題是一個多階段的過程。
  • 谷歌開源NLP模型可視化工具LIT,模型訓練不再「黑箱」
    並排模式:比較兩個或多個模型,或基於一對示例的一個模型。高度可擴展性:可擴展到新的模型類型,包括分類、回歸、span 標註,seq2seq 和語言建模。框架無關:與 TensorFlow、PyTorch 等兼容。
  • Kaggle Grandmaster 的 NLP 方法
    在導入必要的 python 模塊和數據之後,Abhishek 對數據調用 head()方法,以查看前五行是什麼樣子的。由於 Abhishek 是一個專家,這是一個 NLP 問題,與涉及數值數據的問題相比,探索性數據分析(通常被稱為 EDA)是很膚淺的。但是數據科學新手可能會從 EDA 中受益。
  • 專訪ACL2020最佳論文二作:全新NLP模型評測方法論,思路也適用於CV
    1、We should test NLP models訓練NLP模型的主要目標之一是泛化,雖然Accuracy是評價泛化的主要方法,但它往往高估了NLP模型的性能,用於評估模型的替代方法要麼側重於單個任務,要麼側重於特定的行為,benchmark的準確性不足以評估NLP模型。
  • Cython 助力 Python NLP 實現百倍加速
    以下給出了一些可能需要採用這種加速策略的場景:你正在使用 Python 給自然語言處理任務開發一個應用級模塊你正在使用 Python 分析一個自然語言處理任務的大型數據集你正在為諸如 PyTorch/TensoFlow 這些深度學習框架預處理大型訓練集,或者你的深度學習模型採用了處理邏輯複雜的批量加載器(Batch loader),它嚴重拖慢了你的訓練速度提示
  • 【乾貨】NLP中「詞袋」模型和詞嵌入模型的比較(附代碼)
    【導讀】詞袋模型和詞向量表示是自然語言處理中最常用的特徵表示方法,但這兩種方法各適用於哪些不同的任務,有什麼區別,作者Edward Ma詳細講解了這兩類使用技巧
  • NLP領域最優秀的8個預訓練模型(附開源地址)
    utm_source=blog&utm_medium=top-pretrained-models-nlp-article本文介紹的預訓練自然語言處理模型根據應用,將預處理模型分為三類: 多用途自然語言處理模型ULMFiTTransformer
  • 復旦邱錫鵬教授:2020最新NLP預訓練模型綜述
    背景「nlp、cv領域的傳統方法極度依賴於手動特徵工程」。例如nlp中的log-linear、CRF模型等,cv中各種抽取特徵的模型,如sift特徵等。深度學習中本質上是一種表示學習,能夠一定程度上避免手動的特徵工程。
  • Stanford NLP 解讀 ACL 2018 論文——用於調試 NLP 模型的語義...
    nlp models」(用於調試 NLP 模型的語義等價對立規則)。生成滿足方程式 1 的對立句子的簡單方法是:要求釋義模型生成句子 x 的釋義。可以嘗試這個式子,看是否會改變模型的預測結果:f(x′)≠f(x)。
  • 打包帶走,競賽必備的NLP庫
    import jiebaseg_list = jieba.cut("我來到北京清華大學", cut_all=True)print("Full Mode: " + "/ ".join(seg_list)) seg_list = jieba.cut("我來到北京清華大學", cut_all=False)print("Default Mode:
  • 數據競賽必備的NLP庫總結!
    import jiebaseg_list = jieba.cut("我來到北京清華大學", cut_all=True)print("Full Mode: " + "/ ".join(seg_list)) seg_list = jieba.cut("我來到北京清華大學", cut_all=False)print("Default Mode:
  • Web互動設計優化的簡易check list
    ,我們需要從哪些方面考慮遵從什麼樣的原則如何開始檢查現有的設計如何確定優化的優先級而不涉及:新功能/產品的互動設計過程娛樂導向產品的設計優化產品概念、功能層次的優化適合每一類型產品的tips具體的優化方法
  • PTMs|2020最新NLP預訓練模型綜述
    由於篇幅原因,本文主要針對前面兩點進行梳理,即「目前主流的預訓練模型」和「預訓練模型的分類體系」。1. 背景「nlp、cv領域的傳統方法極度依賴於手動特徵工程」。「nlp領域的發展比cv領域相對緩慢的原因是什麼呢」?相比於cv領域,「nlp領域的劣勢在於有監督數據集大小非常小」(除了機器翻譯),導致深度學習模型容易過擬合,不能很好地泛化。
  • 什麼樣的NLP庫,可以支持53種語言?
    StanfordNLP是一系列經過預訓練的最先進模型。這些模型被研究人員用於2017和2018年康奈爾大學的競賽。所有模型都基於PyTorch來構建,可以在你自己的注釋數據上進行訓練和評估。聽上去是不是很棒?
  • NLP詳細教程:手把手教你用ELMo模型提取文本特徵(附代碼&論文)
    ELMo是一種在詞向量(vector)或詞嵌入(embedding)中表示詞彙的新方法。這些詞嵌入方法在下列幾種NLP問題中能有效生成最先進(SOAT)的結果:我選擇用列表儲存這些樣本:list_train = [train[i:i+100] for i in range(0,train.shape[0],100)]list_test = [test[i:i+100] for i in range(0,test.shape[0],100)]現在讓我們在這些樣本上迭代並提取ELMo向量,這會花很長時間:
  • NLP中的文本分析和特徵工程
    文本分類最重要的部分是特徵工程:從原始文本數據為機器學習模型創建特徵的過程。在本文中,我將解釋分析文本和提取可用於構建分類模型的特徵的不同方法。我將展示一些有用的Python代碼,它們可以很容易地應用於其他類似的情況(只是複製、粘貼、運行),並帶注釋遍歷每一行代碼,以便複製這個示例(連結到下面的完整代碼)。