人工智能需要测试吗,如果需要,如何测试?( 二 )


因此需要对算法微服务接口进行功能性验证,比如结合应用场景从功能性、可靠性、可维护性角度对必填、非必填、参数组合验证等进行正向、异向的测试覆盖 。此处不多做介绍,同普通的API接口测试策略一致,结合接口测试质量评估标准,大概从如下几个角度进行设计:

业务功能覆盖是否完整业务规则覆盖是否完整参数验证是否达到要求(边界、业务规则)接口异常场景覆盖是否完整性能指标是否满足要求安全指标是否满足要求
算法性能测试微服务接口的性能测试大家也比较了解,对于算法微服务同样需要进行性能测试,如基准测试、性能测试(验证是否符合性能指标)、长短稳定性能测试,都是算法微服务每个版本中需要测试的内容,同时产出版本间的性能横向对比,感知性能变化 。常关注的指标有平均响应时间、95%响应时间、TPS,同时关注GPU、内存等系统资源的使用情况 。
一般使用Jmeter进行接口性能测试 。不过,我们在实际应用中为了将算法微服务接口的功能测试、性能测试融合到一起,以降低自动化测试开发、使用、学习成本,提高可持续性,我们基于关键字驱动、数据驱动的测试思想,利用Python Request、Locust模块分别实现了功能、性能自定义关键字开发 。每轮测试执行完算法微服务功能自动化测试,若功能执行通过,则自动拉起对应不同执行策略的性能测试用例,每次测试执行结果都进行存储至数据库中,以便输出该算法微服务接口的不同版本性能各项指标的比较结果 。
算法模型评估指标
首先,不同类型算法的其关注的算法模型评估指标不同 。
比如人脸检测算法常以精确率、召回率、准确率、错报率等评估指标;人脸检索算法常以TOPN的精确率、召回率、前N张连续准确率 。
其次,相同类型算法在不同应用场景其关注的算法模型评估指标也存在差异 。
比如人脸检索在应用在高铁站的人脸比对(重点人员检索)的场景中,不太关注召回率,但对精确率要求很多,避免抓错人,造成公共场所的秩序混乱 。但在海量人脸检索的应用场景中,愿意牺牲部分精确率来提高召回率,因此在该场景中不能盲目的追求精准率 。
除了上述算法模型评估指标,我们还常用ROC、PR曲线来衡量算法模型效果的好坏 。
我们在算法微服务功能、性能测试中介绍到,使用了基于关键字驱动、数据驱动的测试思想,利用Python Request、Locust模块分别实现功能、性能自定义关键字开发 。考虑到测试技术栈的统一以及可复用性,我们基于上述设计,实现了算法模型评估指标的自定义关键字开发,每次运行输出相同测试集下的不同版本模型评估指标的横向比较 。
当然除了不同版本的比较模型评估指标的比较,如果条件允许,我们还需要进行一定的竞品比较,比较与市场上相同类似的算法效果的差异,取长补短 。
算法指标结果分析我们对算法模型指标评估之后,除了感知算法模型评估指标在不同版本的差异,还希望进一步的进行分析,已得到具体算法模型的优化的优化方向,这时候就需要结合数据的标注信息进行深度的分析,挖掘算法优劣是否哪些数据特征的影响,影响程度如何 。比如通过数据特征组合或者控制部分特征一致等方式,看其他特征对算法效果的影响程度等等 。
这时候我们一般通过开发一些脚本实现我们的分析过程,根据算法微服务接口的响应体以及数据准备阶段所标注的数据特征,进行分析脚本的开发 。
另外指标结果的进一步分析,也要结合算法设计,比如人脸检索算法,每张图片的检索流程为“输入图片的人脸检测“ -; “输入图片的人脸特征提取“ -; “相似特征检索“,通过此查询流程不难看出人脸检索的整体精确率受上述三个环节的影响,因此基于指标结果的深度分析也需要从这三个层次入手 。
算法测试报告一般算法测试报告由以下几个要素组成:
算法功能测试结果
算法性能测试结果
算法模型评估指标结果
算法指标结果分析
由于算法微服务测试的复杂度相对普通服务接口较高,在报告注意简明扼要 。

推荐阅读