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