從人工智能 (AI)發(fā)展應(yīng)用看算法測試的測試策略
隨著人工智能的發(fā)展與應(yīng)用,AI測試逐漸進(jìn)入到我們的視野,傳統(tǒng)的功能測試策略對于算法測試而言,心有余而力不足,難以滿足對人工智能 (AI) 的質(zhì)量保障。
結(jié)合在人臉檢測、檢索算法上的測試探索、實踐的過程,本文將從以下幾個方面介紹人工智能 (AI) 算法測試策略。
- 算法測試集數(shù)據(jù)準(zhǔn)備
- 算法功能測試
- 算法性能測試
- 算法效果測試(模型評估指標(biāo))
- 算法指標(biāo)結(jié)果分析
- 算法測試報告
我們將算法測試測試流程中的幾個核心環(huán)節(jié)提煉如上幾點,也就組成了我們算法測試的測試策略,在此,拋磚引玉的分享一下。
算法測試集數(shù)據(jù)準(zhǔn)備
測試集的準(zhǔn)備對于整體算法測試而言非常重要,一般測試集準(zhǔn)備過程中需考慮以下幾點:
- 測試集的覆蓋度
- 測試集的獨立性
- 測試集的準(zhǔn)確性
測試集的覆蓋度
如果,測試集準(zhǔn)備只是隨機的選取測試數(shù)據(jù),容易造成測試結(jié)果的失真,降低算法模型評估結(jié)果的可靠性。
好比我們的功能測試,根據(jù)功能測試設(shè)計,構(gòu)造對應(yīng)的數(shù)據(jù)進(jìn)行測試覆蓋。算法測試亦然,以人臉檢測算法而言,除了考慮選取正樣本、負(fù)樣本外,還需要考慮正樣本中人臉特征的覆蓋,如人臉占比、模糊度、光照、姿態(tài)(角度)、完整性(遮擋)等特征。
選擇好對應(yīng)的測試數(shù)據(jù)后,后來后期的指標(biāo)計算、結(jié)果分析,還需對數(shù)據(jù)進(jìn)行標(biāo)注,標(biāo)注對應(yīng)的特征,以人臉檢測為例,使用工具對人臉圖標(biāo)進(jìn)行人臉坐標(biāo)框圖,并將對應(yīng)特征進(jìn)行標(biāo)注記錄及存儲,如下圖。
另外,除了數(shù)據(jù)特征的覆蓋,也需要考慮數(shù)據(jù)來源的覆蓋,結(jié)合實際應(yīng)用環(huán)境、場景的數(shù)據(jù)進(jìn)行數(shù)據(jù)模擬、準(zhǔn)備。比如公共場所攝像頭下的人臉檢索,圖片一般比較模糊、圖片光照強度不一,因此準(zhǔn)備數(shù)據(jù)時,也需要根據(jù)此場景,模擬數(shù)據(jù)。一般來講,最好將真實生產(chǎn)環(huán)境數(shù)據(jù)作為測試數(shù)據(jù),并從其中按照數(shù)據(jù)特征分布選取測試數(shù)據(jù)。
此外,關(guān)于測試數(shù)據(jù)的數(shù)量,一般來講測試數(shù)據(jù)量越多越能客觀的反映算法的真實效果,但出于測試成本的考慮,不能窮其盡,一般以真實生產(chǎn)環(huán)境為參考,選取20%,如果生產(chǎn)環(huán)境數(shù)據(jù)量巨大,則選取1%~2%,或者更小。由于我們的生產(chǎn)環(huán)境數(shù)據(jù)量巨大,考慮到測試成本,我們選取了2W左右的圖片進(jìn)行測試。
測試集的獨立性
測試集的獨立性主要考慮測試數(shù)據(jù)集相互干擾導(dǎo)致測試結(jié)果的失真風(fēng)險。
我們以人臉檢索為例,我們準(zhǔn)備200組人臉測試數(shù)據(jù),每組為同一個人不同時期或角度的10張人臉照片,對人臉檢索算法模型指標(biāo)進(jìn)行計算時,如計算TOP10的精確率,此時若在數(shù)據(jù)庫中,存在以上200組人的其他照片時,便會對指標(biāo)計算結(jié)果造成影響,比如我們200組人臉中包含Jack,但數(shù)據(jù)庫中除了Jack的10張,還存在其他的8張Jack的照片。若算法微服務(wù)接口返回的TOP10圖片中有我們測試集中的Jack圖片6張,非測試集但在數(shù)據(jù)庫中的其他Jack照片2張,還有2張非Jack的照片,測試的精確率該如何計算,按照我們的測試集(已標(biāo)注)來看,精確率為60%,但實際精確率為80%,造成了精確率指標(biāo)計算結(jié)果的失真。
因此,我們在測試集數(shù)據(jù)準(zhǔn)備時,需考慮數(shù)據(jù)干擾,測試準(zhǔn)備階段對數(shù)據(jù)庫的其他測試數(shù)據(jù)進(jìn)行評估,比如從200組人臉測試數(shù)據(jù)組,進(jìn)行預(yù)測試,對相似度非常高的數(shù)據(jù)進(jìn)行研判,判斷是否為同一人,若是則刪除該照片或者不將該人從200組測試集中剔除。
測試集的準(zhǔn)確性
數(shù)據(jù)集的準(zhǔn)確性比較好理解,一般指的是數(shù)據(jù)標(biāo)注的準(zhǔn)確性,比如Jack的照片不應(yīng)標(biāo)注為Tom,照片模糊的特征不應(yīng)標(biāo)注為清晰。如果數(shù)據(jù)標(biāo)注錯誤,那么直接影響了算法模型指標(biāo)計算的結(jié)果。
對于測試集的準(zhǔn)備,為了提高測試集準(zhǔn)備效率及復(fù)用性,我們嘗試搭建了算法數(shù)倉平臺,實現(xiàn)數(shù)據(jù)(圖片)的在線標(biāo)注、存儲等功能,作為算法測試數(shù)據(jù)的同一獲取入口。
算法功能測試
以我現(xiàn)在接觸的人工智能系統(tǒng)而言,將算法以微服務(wù)接口的形式對外提供服務(wù),類似于百度AI開放平臺。

因此需要對算法微服務(wù)接口進(jìn)行功能性驗證,比如結(jié)合應(yīng)用場景從功能性、可靠性、可維護(hù)性角度對必填、非必填、參數(shù)組合驗證等進(jìn)行正向、異向的測試覆蓋。此處不多做介紹,同普通的API接口測試策略一致。
算法性能測試
微服務(wù)接口的性能測試大家也比較了解,對于算法微服務(wù)同樣需要進(jìn)行性能測試,如基準(zhǔn)測試、性能測試(驗證是否符合性能指標(biāo))、長短穩(wěn)定性能測試,都是算法微服務(wù)每個版本中需要測試的內(nèi)容,同時產(chǎn)出版本間的性能橫向?qū)Ρ龋兄阅茏兓?。常關(guān)注的指標(biāo)有平均響應(yīng)時間、95%響應(yīng)時間、TPS,同時關(guān)注GPU、內(nèi)存等系統(tǒng)資源的使用情況。
一般使用Jmeter進(jìn)行接口性能測試。不過,我們在實際應(yīng)用中為了將算法微服務(wù)接口的功能測試、性能測試融合到一起,以降低自動化測試開發(fā)、使用、學(xué)習(xí)成本,提高可持續(xù)性,我們基于關(guān)鍵字驅(qū)動、數(shù)據(jù)驅(qū)動的測試思想,利用Python Request、Locust模塊分別實現(xiàn)了功能、性能自定義關(guān)鍵字開發(fā)。每輪測試執(zhí)行完算法微服務(wù)功能自動化測試,若功能執(zhí)行通過,則自動拉起對應(yīng)不同執(zhí)行策略的性能測試用例,每次測試執(zhí)行結(jié)果都進(jìn)行存儲至數(shù)據(jù)庫中,以便輸出該算法微服務(wù)接口的不同版本性能各項指標(biāo)的比較結(jié)果。
算法模型評估指標(biāo)

首先,不同類型算法的其關(guān)注的算法模型評估指標(biāo)不同。
比如人臉檢測算法常以精確率、召回率、準(zhǔn)確率、錯報率等評估指標(biāo);人臉檢索算法常以TOPN的精確率、召回率、前N張連續(xù)準(zhǔn)確率。
其次,相同類型算法在不同應(yīng)用場景其關(guān)注的算法模型評估指標(biāo)也存在差異。
比如人臉檢索在應(yīng)用在高鐵站的人臉比對(重點人員檢索)的場景中,不太關(guān)注召回率,但對精確率要求很多,避免抓錯人,造成公共場所的秩序混亂。但在海量人臉檢索的應(yīng)用場景中,愿意犧牲部分精確率來提高召回率,因此在該場景中不能盲目的追求精準(zhǔn)率。
除了上述算法模型評估指標(biāo),我們還常用ROC、PR曲線來衡量算法模型效果的好壞。


我們在算法微服務(wù)功能、性能測試中介紹到,使用了基于關(guān)鍵字驅(qū)動、數(shù)據(jù)驅(qū)動的測試思想,利用Python Request、Locust模塊分別實現(xiàn)功能、性能自定義關(guān)鍵字開發(fā)??紤]到測試技術(shù)棧的統(tǒng)一以及可復(fù)用性,我們基于上述設(shè)計,實現(xiàn)了算法模型評估指標(biāo)的自定義關(guān)鍵字開發(fā),每次運行輸出相同測試集下的不同版本模型評估指標(biāo)的橫向比較。
當(dāng)然除了不同版本的比較模型評估指標(biāo)的比較,如果條件允許,我們還需要進(jìn)行一定的競品比較,比較與市場上相同類似的算法效果的差異,取長補短。
算法指標(biāo)結(jié)果分析
我們對算法模型指標(biāo)評估之后,除了感知算法模型評估指標(biāo)在不同版本的差異,還希望進(jìn)一步的進(jìn)行分析,已得到具體算法模型的優(yōu)化的優(yōu)化方向,這時候就需要結(jié)合數(shù)據(jù)的標(biāo)注信息進(jìn)行深度的分析,挖掘算法優(yōu)劣是否哪些數(shù)據(jù)特征的影響,影響程度如何。比如通過數(shù)據(jù)特征組合或者控制部分特征一致等方式,看其他特征對算法效果的影響程度等等。
這時候我們一般通過開發(fā)一些腳本實現(xiàn)我們的分析過程,根據(jù)算法微服務(wù)接口的響應(yīng)體以及數(shù)據(jù)準(zhǔn)備階段所標(biāo)注的數(shù)據(jù)特征,進(jìn)行分析腳本的開發(fā)。
另外指標(biāo)結(jié)果的進(jìn)一步分析,也要結(jié)合算法設(shè)計,比如人臉檢索算法,每張圖片的檢索流程為“輸入圖片的人臉檢測“ -> “輸入圖片的人臉特征提取“ -> “相似特征檢索“,通過此查詢流程不難看出人臉檢索的整體精確率受上述三個環(huán)節(jié)的影響,因此基于指標(biāo)結(jié)果的深度分析也需要從這三個層次入手。
算法測試報告
一般算法測試報告由以下幾個要素組成:
- 算法功能測試結(jié)果
- 算法性能測試結(jié)果
- 算法模型評估指標(biāo)結(jié)果
- 算法指標(biāo)結(jié)果分析
由于算法微服務(wù)測試的復(fù)雜度相對普通服務(wù)接口較高,在報告注意簡明扼要。