NLP模型讀不懂人話?微軟AdaTest挑錯效率高五倍
?自然語言處理(NLP)模型讀不懂人話、將文本理解為相反的意思,是業界頑疾了。 現在微軟表示,開發出解決此弊的方法。
微軟開發AdaTest方法來測試NLP模型
可作為跨越各種應用基礎的大型模型,或稱平臺模型的進展已經大大改善了AI處理自然語言的能力。但自然語言處理(NLP)模型仍然遠不完美,有時會以令人尷尬的方式暴露缺陷。
例如有個頂級的商用模型,將葡萄牙語中的「我不推薦這道菜」翻譯成英語中的「我非常推薦這道菜」。
這些失敗之所以繼續存在,部分原因是尋找和修復NLP模型中的錯誤很難,以至于嚴重的錯誤影響了幾乎所有主要的開源和商業NLP模型。 目前尋找和修復NLP模型錯誤的方法有兩種:或是用戶驅動的,或是自動的。
用戶驅動的方法很靈活,可以測試NLP模型行為的任何方面。但此方法依賴于人類極為參差不齊的想象且辨識錯誤的能力,并且是極度勞動密集型的,以至于在實踐中只有一小部分的輸入數據量可用來測試。
另一方面,自動方法很快速,因此可以處理輸入數據的很大一部分。然而,由于缺乏人類的把控,它們只能在非常有限的情況下測試一個模型是對還是錯,例如當模型處理有輕微變化的輸入措辭時,其預測結果就會出現不一致。
微軟的研究者們認為,像GPT-3這樣的現代大型語言模型(LLMs),為業界提供了一個機會,可以嘗試將用戶驅動方法和自動方法的優勢結合起來,讓用戶來定義被測試的模型應該做什么,同時利用現代大型語言模型的生成能力,在特定的模型行為類別中生成大規模的測試。
微軟研究者將此類人機結合的路徑,稱之為「適應性測試與去Bug」,縮寫為AdaTest。 通過AdaTest,一個大型的語言模型被賦予了重負:生成大量的、針對受測模型中的錯誤的測試。
而人工干涉則通過選擇有效的測試、并將它們組織到語義相關的主題中,來引導語言模型的生成工作。 這種來自人工的指導極大地提高了語言模型的生成性能,并將其引向目標領域。
因為這些測試實際上是一種標記數據的形式,它們不僅可以識別NLP模型的錯誤,而且可以用來在類似于傳統軟件開發的迭代調試循環中,修復NLP模型的錯誤。
AdaTest為專業用戶提供了顯著的效率提升,同時又足夠簡單,可以讓沒有編程背景的普通人也能有效使用。 這意味著專業用戶和普通用戶都能更好地理解和控制在NLP模型一系列場景中的行為,這不僅使AI系統表現更好,而且使AI系統更有效呼應用戶需求。
用測試循環發現漏洞
AdaTest模式由一個內部測試循環和一個外部調試循環組成,前者用于發現錯誤,后者用于修復錯誤。
雖然這項任務看起來很簡單,但即使是市面上的SOTA模型們也常出現失誤。 比如有的SOTA模型會將「我認為我一生中沒有過更美好的時光」的雙重否定句歸類為情緒負面,或者簍子更大的將「我是一個少數族裔」這句話歸類為情緒負面。
這兩種情況都是在市面上商業模型真實發生過的失誤。 為了證明AdaTest可以發現和修復錯誤,微軟的研究團隊演示了如何測試并修復NLP模型的文本公平性失誤。
NLP模型的文本公平性失誤,即是在一段文本中對特定屬性群體的中性描述,可能導致NLP模型的文本情感分析功能出錯,錯誤地降低文本的情感權重。也就是說,模型可能會更負面地對待特定群體的描述。
在測試循環中,微軟研究者從一組關于各種身份的文本單元測試開始,并將這組測試標記為「敏感」。這些最初的例子并沒有發現任何模型的錯誤。
不過AdaTest方法用GPT-3生成了大量語料類似的暗示性測試,以此來突出測試對象模型潛藏的bug。
雖然產生了數以百計的測試,但干預的人員只需要審查前幾個錯誤或接近錯誤的測試。 然后,人工干預忽略那些并沒有真正犯錯的測試結果,并將其他有效的測試結果添加到當前主題中,也偶爾將它們組織到其他的子主題中去 這些經過人工過濾的測試結果會包含在下一輪輸入的語言模型提示中,如此將下一組輸入數據的處理結果,推向用戶關注點和模型出錯bug之間的交叉點。
重復這一內部測試循環,可以讓NLP模型從不出錯開始,慢慢地暴露出越來越顯著的錯誤和bug。 因此,即使用戶自己不能找到模型的故障,他們也可以從一小部分通過的測試開始,然后迅速與NLP模型迭代,產生一大批測試,揭示出被測模型的錯誤。
內部測試循環示例 如果測試者不使用文本情感分析的主題,而是針對一個不同的主題,比如處理否定句與雙重否定句,測試者會發現不同的故障。
例如,「我從未比現在更快樂」這樣簡單的語句,商業模型可以正確地將其歸類為積極的。不過用AdaTest方法,可以很快發現像 「我不認為我曾經見過一個更好的城市」這樣的復雜語句會被NLP模型錯誤標記為消極。
一旦測試者看到這些錯誤,就會發現它們的惡劣性和明顯性,但它們很難被人工直接發現,因為它們只發生在非常具體的措辭中。 微軟的研究團隊進行了用戶調研,以定量評估AdaTest是否使專業用戶和非專業用戶更好地編寫測試和發現NLP模型中的錯誤。 研究者要求專業用戶測試兩個模型中的特定主題功能:一個商業用的文本情感分類器和GPT-2用于下一個詞的自動完成。
這個功能用于預測正在輸入的電子郵件中的下一個詞等應用。 對于每個主題和模型,參與者被隨機分配到使用CheckList(代表用戶驅動測試的SOTA)或AdaTest。 研究者觀察到AdaTest在不同的模型和專業參與者中都有五倍的改進。
研究者對非專業用戶的測試要求,是在NLP模型測試毒性語料的內容管制。參與者要找到被模型判定為有毒語料中的非毒性內容,也就是他們個人覺得合適的內容。 參與者可以使用改進版的Dynabench眾包界面進行模型測試,也可以使用AdaTest。 結果是AdaTest提供了高達10倍的改進。
不同觀點人群做測試參與者的測試效果圖
利用調試循環修復bug
一旦發現了足夠多的錯誤,模型的測試人員就會進行外部調試循環(如下圖),修復在測試循環中發現的錯誤,然后重新測試模型。 在這個流程中,調試循環的「再測試」部分(即再次運行測試循環)是至關重要的,因為一旦用測試來修復模型,它們就不再是測試數據,而是訓練數據了。修復錯誤的過程往往會過度補償,在調試循環的最初幾輪中引入捷徑或錯誤,而這些錯誤只能用一組適應新的「固定」模型的測試來發現。
在一個開源的RoBERTa-Large情感模型上的測試循環流程。 研究者從圖2中的「/敏感/移民 」主題的測試開始,RoBERTa模型將其錯誤地標記為負面。在這些測試中對模型進行微調(與原始訓練數據混合以保持任務性能),結果是一個不再失敗的新模型。 然而,當重新運行測試循環時,發現現在幾乎所有的移民語句都被標記為 「中性」,即使它們基于應用和測試場景是真正的負面的。
使用這些新的測試再次進行微調,結果是模型正確地修復了原來的錯誤,而沒有增加 「每個移民語句都是中性的」這一捷徑。 當然,這并不能保證模型中不存在另一個捷徑,但根據研究者的經驗,幾輪調試循環之后,大大減少了修復原始錯誤時引入的意外錯誤的數量。
測試人員不需要提前詳盡地識別每一個可能的錯誤,AdaTest會自適應地顯現并修復在下一輪測試和調試中引入的錯誤。
因此,調試循環推動了當前bug測試規范 的邊界,直到產生一個令人滿意的模型為止。 事實上,AdaTest可以被看作是軟件工程中測試-修復-再測試循環在NLP中的應用。
在調試循環的迭代過程中添加的捷徑被發現,并被未來的迭代所修復 為了評估調試循環的有效性,使用Quora問題數據集對RoBERTa-Large進行了微調,以檢測兩個問題是否重復,還使用斯坦福情感樹庫(SST)數據集對其進行了微調,以進行正面/中立/負面的情感分析。
結果發現,基線模型在53個QQP主題中的22個主題上,以及39個情感主題中的11個主題中沒能成功識別。之后,研究者創建了數據來修復主題。 從該主題的數據中抽取50個例子,用AdaTest運行調試循環,在QQP數據集上,平均進行41.6次測試,在情感數據集上,平均要進行55.8次測試。
結果表明,在絕大多數情況下,AdaTest修復了用于訓練的題目和一些未見過的保留題目,沒有破壞任何題目,而原始的CheckList數據經常引入新的錯誤,從而破壞其他測試題目。 研究者還評估了AdaTest在標準開發環境中的有效性。經過三個月的開發、CheckList測試和基于GPT-3的臨時數據增強,在野外收集的未見過的數據上,F1分數為0.66(滿分1.00)。
同一個團隊使用AdaTest,在他們自己運行調試循環四個小時后,在相同的未見過的數據集上的F1分數為0.77。之后又在第二個未見過的數據集上復現了這些分數,這表明,AdaTest可以在傳統方法所涉及領域進行錯誤修復,并取得更好的效果。
人們提供語言模型所缺乏的問題規范,而語言模型則以更大的規模和范圍上提供高質量的測試,并將模型測試和調試連接起來,有效修復錯誤,使模型開發向傳統軟件開發的迭代性質邁進了一步。
人類與AI的合作,代表了機器學習發展的一個未來的方向,希望這種協同會隨著大型語言模型能力的不斷增長而不斷提高。?