NLP模型健檢:Behavior Testing of NLP model

了解你的模型做不到甚麼!

倢愷 Oscar
11 min readFeb 14, 2021

在昨天的<【聽後感】02/13 聊聊如何成為世界級產品設計師 — 從矽谷/紐約設計與人工智慧產品談起 clubhouse>這邊文章裡面,我記錄了講者不斷強調「AI product designer要理解AI這個工具的能力、侷限」的概念,今天就想要深入這個概念來討論一下。

還沒有看過昨天文章的建議先去複習XD 今天我會從ML research切入但是不會講太多理論性的知識,會控制在不具備專業ML知識就能看懂的難度~

了解一個AI model其實意味著非常多的不同的事情。可能是了解Training的方式,可能是了解Model Architecture,也可能是了解performance,有太多不同的可能性。

目前我們最廣泛做的事情是以下兩者

  1. 了解model的performance:也就是一般我們出去pitch我們的idea時會跟台下群眾講的,我們的模型多準,然後搭配一些Demo。但是這個方法其實了解的很侷限,只了解accuracy多高、AUC多高之類的,並無法幫助我們更了解我們的產品,以ML engineer的角度就難以改進我們的產品,以PM的角度而言更難以規劃產品的下一步。
  2. 了解model的背景知識:也就是一般ML/DL課程會教的內容,包含各種architecture及training的方式,如果更加深入可能可以了解目前各個model在各種問題上能夠做到多好。但是這個方法問題也很大,一來是這樣所需要的訓練非常重,二來是這樣也只對ML能夠做到甚麼有一個宏觀的認識,對在單一的dataset訓練出來的單一的model並沒有多少認識。

所以在ML的研究界以及HCI屆這兩年就非常多XAI(Explainable AI)的研究,包含model重點關注哪些feature、甚至是做到了解一個預測是基於哪些feature。

但是我今天要談的也不是XAI(之後會特別開一個系列,因為XAI真的很好用)

Q:我們一直說ML model是Black Box,但是我們真的不能接受Black Box嗎???

試想一個情況,今天你要洗衣服,你也不會去研究整個洗衣機的機械構造,也不會在意去測試洗衣機在運轉時不同衣服會怎麼被處理。我們最在意的只有哪些衣服能夠丟到洗衣機裡面。因此貼心的製衣廠做出了洗衣標籤

也就是說我們真正在意的是

我的AI系統在哪些情況會成功?哪些會失敗?

而這裡的「情況」,指的是比較概念性的分類,而不是「哪些data」,而是「哪種類型的data」

注意:這裡我並不是說XAI跟了解ML背後的基本概念不重要!!我想提出的是另一種了解模型的切入點,而這個切入點說不定能夠提供PM、ML engineer一些有用的資訊。

而Microsoft的researcher暨UW的教授Marco Tulio Ribeiro就在2020開源了一個工具名為checklist,並於2020 ACL發表論文講解背後的理論。

同時在Stanford的ML system seminar也有公開的talk,歡迎大家直接去聽,我在下面會簡介他的概念跟這個工具怎麼使用。

NLP mode Behavior Testing

Marco教授提出了NLP(自然語言處理) model的Behavior Testing,主要的目的就是分清楚,我們的model在哪種類型的input會爛掉,哪種會做得好。

舉例:如果今天是文章情緒分類,我們只看accuracy時我們可能知道「Model有95%的正確率」,而XAI可能會告訴我們「Model是基於哪些詞判斷情緒」,而Behavior Testing想問的就是「今天如果句子裡加入否定詞model能不能正常預測,如果主詞的性別換掉、名字換掉model會不會正常預測

他們基於這個idea去拓展出一整個NLP Behavior Testing checklist。

它們測試的內容包含著詞性(POS)、專有名詞(NER)、公平性(Fairness)、否定詞(Negation)總共約10多個維度。

包含三種Testing的方式(以下都用情感分類為例)

  1. Minimum Functionality Test (MFT):就像是Software engineer裡面提的Unit Test,用一些小的範例檢查model是否有特定能力。Ex:如果要檢查Model是否有判斷否定詞(Negation)的能力,就收集一些data裡面含有否定詞,像是"I can’t say I recommend the food"之類的句子,然後看在這些有否定詞的句子,Model能不能正常判斷。
  2. Invariance Test (IVT):則是考驗Model在替換掉某些字詞後,有沒有辦法不受到影響,像是如果把地名替換掉,理論上一句話的情感不會影響,那Model能不能得出跟原本一樣的結論。
  3. Directional Expectation test (DET):直接加上我們知道會改變結果的feature到input中,像是我們在每一句話後都加入"This is so lame",那這句話的情緒在加上”This is so lame”不應該變好(有可能變差也有可能原本就極差了)
三種testing的例子

而我們就可以針對我們想要測試的內容(可能是模型有沒有Fairness,或是模型會不會判斷否定詞),然後決定我們要使用的測試方法(MFT、IVT、DET),然後收集一小份資料就可以測試單獨這個能力。

現在我們了解我們的NLP model除了accuracy以外,在哪些類型的input會得出什麼樣的效果。

但是這邊有一個問題,這樣每次要測試一個小類型,就要收集一個dataset,非常耗時間,所以checklist裡面也有提供一些比較快速製造測試資料的方法,這邊主要就是用BERT、RoBERTa等非常強力的模型來生成假資料。

而因為它們製造假data的方式有用到多語系的模型,所以中文也有支援。

這邊我算是介紹完Checklist這個工具了,這是2020年才剛出來的一個工具,我有用過幾次,也滿容易使用的,推薦大家去github直接載下來玩玩。

不過一般第一次使用時就會有幾個大問題

現在的模型那麼強,這些小測驗哪會測出東西?

這是我認為非NLP研究員最常見的錯誤,就是高估NLP模型能力。實際上雖然現在很多NLP模型在特定的test set上表現得比人類還好,但是很多只要加上否定詞或是換個人名,整個模型就會爛掉,因為這些模型在data裡面沒看過這種模式,而test set裡面也沒有這種data,所以performance就會很高,卻容易犯低能錯誤。

範例1

但是像是我們製造一些句子,我們稱這種型態為Temporal,就是時間上前後敘述不一致的,像是犯例1裡面是「我過去討厭然而現在喜歡」,所以這是一個很簡單的問題,模型要判斷出我們現在是喜歡的,但是包含業界(左邊三個)跟學界(右邊兩個)最頂尖的模型在這個類型上都有非常高的錯誤率。

而這些低能錯誤可能是其中一個讓使用者體驗直接爛掉的關鍵,因為使用者也會過度高估模型的能力,或是說使用者無法接受模型犯低能錯誤。

不要高估所有ML的模型,我們模型大多都只在dataset上做得好!

第二個常見的問題可能就是

我現在知道我的model做不到甚麼,那要怎麼改進?

這實際上是一個很難解的問題,在目前的ML發展上,我們發現模型犯錯後,大多都是藉由設計新的結構、或是收集新的data來解決這個問題。

大家會有一個衝動,那就是我們用checklist的假data測出來model的缺陷,那我們就把這些假data加入到training set裡面就好,但是實際上這是絕對不可以接受的事情!!

在Software Engineering裡面Testing的最高原則就是

Separate implementation from testing

如果我們把假data加到training set裡面,model也只是學會避開這些假data,讓自己在testing的時候很高分,但是根本的問題高機率沒有被解掉。

那我們能夠做甚麼?

這邊目前大家也沒有通用且好的解法,可以收多一點data,或是用rule based系統做一些基礎的判斷,這真的很case by case,但是一個有經驗的ML engineer或是Data Scientist大多都可以在發現錯誤後找到一個合理的方法改善自己的模型。

而第三個常見的問題就是

我們怎麼樣保證我們Test完了?

這其實也對應到Unit Testing裡面的Coverage這個概念,因為我們的model有的input類型可能有非常多種,我們幾乎沒有辦法保證我們已經測試過所有類型,甚至有些類型是沒有辦法測試的。

這邊我推薦大家不斷的去看real data,然後去想想每一筆新來的data屬於我們testing裡面的哪一個類別,如果有分不進去現有類別的data,就要考慮這個data普遍嗎?是否要開一個新的Test?

同時大家也要維護一個「已經試過很有效的Test List」,針對每個模型、每個問題,我們要重點Test的內容也不同,這邊可能更多是PM在設計產品時,定位出的核心價值,而哪些bug有可能會讓這個價值爛掉,或是哪些bug在我們的產品上最常出現、最容易讓使用者drop use,這些都是經驗性的東西。

並且要保持一個概念「永遠沒有Test完」,同時「即便Test不過關產品也可以上線」,重點還是挑初最重要的幾個類型重點Test、分析跟改進,但是即便所有checklist上的test都過關了也不必然代表這是一個好的model,還要時時注意新的data。

這邊其實概念跟科學哲學裡面的「否證法」很像,一個理論沒有被否證掉不代表它是完美的真理,「被否證」這件事本身比「沒有被否證」提供給我們更多資訊

最後傳統的evaluation跟XAI的技巧是可以跟Behavior Testing並行的!!!,並不是做Testing就可,如果想知道怎麼透過evaluation了解現在怎麼做來提升performance,可以看我之前的文章。

這邊做個小結論

其實Checklist這個工具還是很片面的,他們是基於NLP傳統認為比較重要的功能進行Test,但是這些功能在產品上是否重要?是一個非常有趣的問題,同時有些問題被Test出來不見得要用改善model來解,有時候給User一個輸入句子的template,就可以讓Chatbot變的穩定很多,所以Behavior Test要怎麼使用,其實追根究底還是Design的問題。

而大家認為PM會在意的是哪些Model Behavior呢?在不同領域(自然語言處理、電腦視覺)又會有甚麼差別?歡迎大家在留言區討論,我可以幫大家尋找可行的Testing方法!!

如果喜歡這篇文章可以幫我多拍手幾次XD,或是對於哪個類型文章有興趣都可以在留言區跟我講~ 後續會以中難度的ML/DS/AI知識為主,以及AI/HCI研究相關知識

--

--

倢愷 Oscar

我是倢愷,CTO at TeraThinker an AI Adaptive Learning System Company。AI/HCI研究者,超過100場的ML、DL演講、workshop經驗。主要學習如何將AI落地於業界。 有家教、演講合作,可以email跟我聯絡:axk51013@gmail.com