人工智能(AI)測試方法

一、瞭解人工智能

1.1、對人工智能的理解:

人工智能(AI)是研究、開發用於模擬、延伸和擴展人的智能的理論、方法、技術及應用系統的一門新的技術科學(定義)。人工智能利用機器學習技術,通過對現有的經過處理(篩選、消噪、過濾等)的數據,不斷進行矯正(設置閥值等方法)機器模型的輸出,此過程稱爲訓練,期望通過訓練可以得到在未來新數據上有良好表現的模型,從而投入生產。

1.2、人工智能目前應用的一些領域:

語音識別:人工智能在語音識別方面的應用相對較好,如siri、多鄰國讀音識別等

圖像識別:如高速車牌識別、人臉識別等

個性化推薦:如亞馬遜、今日頭條根據用戶閱讀歷史做的推薦系統,利用人工智能進行調參數等

二、AI相關測試

一般這些項目都要測試什麼,要進行什麼類型的測試。

  1. 模型評估測試
    模型評估主要是測試 模型對未知新數據的預測能力,即泛化能力。
    泛化能力越強,模型的預測能力表現越好。而衡量模型泛化能力的評價指標,就是性能度量(performance measure)。性能度量一般有錯誤率、準確率、精確率、召回率等。

  2. 穩定性/魯棒性測試
    穩定性/魯棒性主要是測試算法多次運行的穩定性;以及算法在輸入值發現較小變化時的輸出變化。
    如果算法在輸入值發生微小變化時就產生了巨大的輸出變化,就可以說這個算法是不穩定的。

  3. 系統測試
    將整個基於算法模型的代碼作爲一個整體,通過與系統的需求定義作比較,發現軟件與系統定義不符合或與之矛盾的地方。
    系統測試主要包括以下三個方面:
    1、項目的整體業務流程
    2、真實用戶的使用場景
    3、數據的流動與正確

  4. 接口測試
    接口測試是測試系統組件間接口的一種測試。接口測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。

  5. 文檔測試
    文檔測試是檢驗用戶文檔的完整性、正確性、一致性、易理解性、易瀏覽性。
    在項目的整個生命週期中,會得到很多文檔,在各個階段中都以文檔作爲前段工作成果的體現和後階段工作的依據。爲避免在測試的過程中發現的缺陷是由於對文檔的理解不準確,理解差異或是文檔變更等原因引起的,文檔測試也需要有足夠的重視。

  6. 性能測試

  7. 白盒測試–代碼靜態檢查

  8. 競品對比測試
    如果有涉及時,可針對做競品對比測試,清楚優勢和劣勢。比如AI智能音箱產品。

  9. 安全測試

發佈上線後,線上模型監控

測試數據
不管是機器學習,推薦系統,圖像識別還是自然語言處理,都需要有一定量的測試數據來進行運行測試。
算法測試的核心是對學習器的泛化誤差進行評估。爲此是使用測試集來測試學習器對新樣本的差別能力。然後以測試集上的測試誤差作爲泛化誤差的近似。測試人員使用的測試集,只能儘可能的覆蓋正式環境用戶產生的數據情況。正式環境複雜多樣的數據情況,需要根據上線後,持續跟進外網數據。算法模型的適用性一定程度上取決於用戶數據量,當用戶量出現大幅增長,可能模型會隨着數據的演化而性能下降,這時模型需要用新數據來做重新訓練。

上線只是完成了一半測試,並不像APP或者WEB網站測試一樣,測試通過後,發佈到正式環境,測試工作就完成了。
測試集如何選取很關鍵,一般遵循兩個原則:

測試集獨立同分布
測試數據的數量和訓練數據的比例合理
測試集獨立同分布
不能使用訓練數據來做爲測試數據,此爲獨立。
測試數據需要和訓練數據是同一個分佈下的數據,此爲分佈。
舉個例子,訓練數據中正樣本和負樣本的分佈爲7:3,測試數據的分佈也需要爲7:3,或者接近這個分佈,比較合理

測試數據的數量和訓練數據的比例合理
當數據量比較小時,可以使用 7 :3 訓練數據和測試數據
(西瓜書中描述 常見的做法是將大約 2/3 ~ 4/5 的樣本數據用於訓練,剩餘樣本用於測試)
或者 6:2 : 2 訓練數據,驗證數據和測試數據。
如果只有100條,1000條或者1萬條數據,那麼上述比例劃分是非常合理的。

如果數據量是百萬級別,那麼驗證集和測試集佔數據總量的比例會趨向於變得更小。如果擁有百萬數據,我們只需要1000條數據,便足以評估單個分類器,並且準確評估該分類器的性能。假設我們有100萬條數據,其中1萬條作爲驗證集,1萬條作爲測試集,100萬里取1萬,比例是1%,即:訓練集佔98%,驗證集和測試集各佔1%。對於數據量過百萬的應用,訓練集可以佔到99.5%,驗證和測試集各佔0.25%,或者驗證集佔0.4%,測試集佔0.1%。

一般算法工程師會將整個數據集,自己劃分爲訓練集、驗證集、測試集。或者訓練集、驗證集 等等。(這裏的測試集是算法工程師的測試數據)
算法工程師提測時,寫明自測時的準確率或其他指標。測試人員另外收集自己的測試集。
測試數據可以測試人員自己收集。或者公司的數據標註人員整理提供。或者爬蟲。外部購買。
測試人員可以先用算法工程師的測試集進行運行測試查看結果。再通過自己的測試集測試進行指標對比。

2.1、測試分析

  1. 人工智能歸根結底也是利用對歷史數據的處理訓練出可以在將來數據上有良好輸出的模型。

  2. 對於測試而言,應該關心數據模型在對待正常數據、邊界數據、異常數據作爲輸入時,模型的輸出是否能夠符合期望。

2.2、測試方法

  1. 改變測試集:如輸入與訓練時一樣的數據、與訓練時完全不同的數據、訓練時的邊界值等,看是否達到期望輸出

  2. 如在安卓平臺運行的代碼:通過不斷點擊運行、以及快速退出和快速進入、處理大量數據、空數據、等觀察性能指標的上升等

  3. 模型是否有良好的用戶交互

  4. 人工智能發展目前有一定的技術限制,但是無論如何都不能造成應用crash、卡死、內存溢出等現象

  5. 具體使用時,應有良好的告知用戶的提示,不能一直loading等

  6. 模型是否能夠根據處理數據的量從少到多而自動不斷優化、調整輸出

  7. 觀察模型輸出是否是一直不變化的

  8. 經過多次改變輸入(百次計算),再進行迴歸測試,觀察輸出是否有一定程度調優(或者更差了)

  9. 模型在處理數據時的效率(學習過程,cpu佔用率、內存消耗等)

  10. 模型有沒有人性化的參數調整入口,供運營人員以及測試人員對上線後、上線前進行調整

  11. 模型上線後應具有一定的參數調整能力(例如某些權重的調整等。業界今日頭條的某些推薦方案一旦效果好,據說會立刻將所有的模型進行模擬升級(切換到相同的模式))。

  12. 風險控制,當發現嚴重問題時如何良好的控制線上的模型,對其進行開關以及升級操作,如上線後若發現難以控制的風險,如需要緊急下線(政策等影響)等問題時,需要有立刻關閉的功能以及關閉前對用戶的良好的提示功能。

  13. 若此模型並不是單獨使用,有沒有良好的兼容性(兼容其他模型),遇到錯誤的使用時如何變現(以及提示方式)

  14. 如模型需要與其他模型進行合作才能工作,那應當分開單獨進行測試,此模型應該具有良好的接口,和期望輸出。測試方法參照上面。然後再測試與其他模型共同工作時的效果

三、AI測試舉例:

3.1、語音識別部分

  1. 輸入正常的語音

  2. 輸入有雜音的語音

  3. 輸入空白語音

  4. 輸入不同語言的語音

  5. 輸入長時間語音

  6. 輸入重複語音

結論:訓練好的模型應在使用上滿足一定程度的場景,不能答非所問的太離譜

3.2、自優化測試:

  1. 將測試集分成2部分(或多部分),第一次輸入第一部分然後觀察結果,然後再輸入第二部分,然後再次輸入第一部分,觀察輸出是否有優化的體現

3.3、性能部分:

  1. [在進行語音識別時,觀察cpu、內存等佔用情況

  2. 在語音識別結束觀察cup、內存有沒有釋放等情況

  3. 觀察識別的時間長短

3.4、友好度測試:

  1. 觀察在使用時弱網絡情況下的提示

  2. 觀察識別出錯時的提示

  3. 觀察正常時的提示

3.5、風險測試:

  1. 功能入口測試(展示和關閉),是否能通過遠程直接關閉或開啓語音識別功能,升級等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章