自然語言處理(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倍的改进。
不同观点人群做测试参与者的测试效果图
一旦发现了足够多的错误,模型的测试人员就会进行外部调试循环(如下图),修复在测试循环中发现的错误,然后重新测试模型。 在这个流程中,调试循环的「再测试」部分(即再次运行测试循环)是至关重要的,因为一旦用测试来修复模型,它们就不再是测试数据,而是训练数据了。修复错误的过程往往会过度补偿,在调试循环的最初几轮中引入捷径或错误,而这些错误只能用一组适应新的「固定」模型的测试来发现。
在一个开源的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的合作,代表了機器學習發展的一個未來的方向,希望這種協同能隨著大型語言模式能力的不斷增長而不斷提高。
以上是NLP模型讀不懂人話?微軟AdaTest挑錯效率高五倍的詳細內容。更多資訊請關注PHP中文網其他相關文章!