算法微服务功能测试保障了算法模型功能的准确性、可靠性,在此基础之上,还需要进一步验证算法模型效果,这一点明显区别于传统的业务功能测试,算法效果验证既是重点也是难点。通过对算法模型测试的探索、实践,我们将其测试策略中核心部分——模型评估指标抽取出来,同时考虑到算法评估指标版本间差异横向比较的必要性,基于自动化平台、算法数仓平台设计了计算算法模型的评估指标的测试策略,为保障策略执行过程的一致性,梳理以下微服务模型评估指标计算测试流程。
算法数仓平台
算法测试数据不同于功能、性能、自动化测试数据,它对数据的独立性、准确性、覆盖度有着更高的要求,同时考虑到算法数据的准备成本、难度,对测试数据存储的安全性也有着更高的要求。算法数仓平台实现了算法测试数据的在线标注、清洗、存储、应用,同时可对接自动化测试平台,提供算法测试数据。
数据来源
算法测试数据来源的选择依据算法模型的应用场景,一般具有多样性的特点。结合算法测试的应用场景,尽可能的准备对应场景下的测试数据,保持数据特征分布的一致性,使得模型评估指标结果更具可靠性。
一般,在无法确定算法应用场景的情况下,数据来源越广越能真实的反映算法模型的泛化能力。
数据体量
算法测试的数据体量较功能测试数据也有着明显的区别,一般,在考虑特征、数据来源分布的情况下,数据体量越大,模型评估指标结果越可靠,但考虑到测试成本,不能穷其尽,一般以真实生产环境为参考,选取20%,如果生产环境数据量巨大,则选取1%~2%,或者更小。由于我们的生产环境数据量巨大,考虑到测试成本,我们在人脸识别算法测试中选取了2W左右的图片进行测试。
数据特征
在数据标注开始之前,需要先确认数据特征,不同类似的测试数据特征不同,数据标注特征的选择从对算法效果影响因素的角度出发,如在人脸检测算法模型测试中,我们选择人脸照片的人脸占比、模糊度、光照、姿态(角度)、完整性(遮挡)等作为特征。
在确认数据标注特征之后,还需要对特征进行细化,如光照特征我们还需要区分光照明暗程度,这样就形成了我们的一维特征、二维特征。
数据类型
不同算法模型的测试数据不同,如人脸识别算法采用的是人脸照片数据,证件识别算法采用的是证件照片数据,异常行为检测算法采用的是视频数据。
清洗规则
数据清洗是为保障后续模型评估指标结果、指标分析、特征分析的有效性,降低垃圾数据、干扰数据的影响,如我们以人脸检索为例,我们准备200组人脸测试数据,每组为同一个人不同时期或角度的10张人脸照片,对人脸检索算法模型指标进行计算时,如计算TOP10的精确率,此时若在数据库中,存在以上200组人的其他照片时,便会对指标计算结果造成影响,比如我们200组人脸中包含Jack,但数据库中除了Jack的10张,还存在其他的8张Jack的照片。若算法微服务接口返回的TOP10图片中有我们测试集中的Jack图片6张,非测试集但在数据库中的其他Jack照片2张,还有2张非Jack的照片,测试的精确率该如何计算,按照我们的测试集(已标注)来看,精确率为60%,但实际精确率为80%,造成了精确率指标计算结果的失真。
因此,我们在测试集数据准备时,需考虑数据干扰,测试准备阶段对数据库的其他测试数据进行评估,比如从200组人脸测试数据组,进行预测试,对相似度非常高的数据进行研判,判断是否为同一人,若是则删除该照片或者不将该人从200组测试集中剔除。
正负样本
对于目标检测算法的测试数据准备中,需要考虑正负样本集,在没有负样本的情况下,无法依据混淆矩阵获取精确率、召回率等指标。
自动化平台
算法微服务接口测试,基于关键字驱动、数据驱动的测试思想,利用Python Request、Locust模块 结合Robot Framework 分别实现了微服务接口功能、性能、模型指标评估自定义关键字开发。同时记录每次测试执行结果存储至结果库中,实现后续性能、模型评估指标版本间的横向比较,感知差异。
模型评估指标
首先,不同类型算法的其关注的算法模型评估指标不同。
比如,在目标检测算法一般通过混淆矩阵计算精确率(查准率)、召回率(查全率、灵敏度)、错报率、漏报率等评估指标。
在目标检索算法中常以TOPN精确率、前N张连续正确个数为评估指标。需要注意的时,目标检索算法一般应用于海量数据背景下检索。
其次,相同类型算法在不同应用场景其关注的算法模型评估指标也存在差异。
比如人脸检索在应用在高铁站的人脸比对(在逃人员检索/识别)的场景中,不太关注召回率,但对精确率要求很多,避免抓错人,造成公共场所的秩序混乱。但在海量人脸检索的应用场景中,愿意牺牲部分精确率来提高召回率,因此在该场景中不能盲目的追求精准率。
除了上述算法模型评估指标,我们还常用ROC、PR曲线来衡量算法模型效果的好坏。
版本差异感知
算法模型的质量不法通过单纯的功能角度来衡量其质量,更加关注模型的效果,我们除了对当前版本的模型进行指标评估之外,还需要关注该模型的历史指标,感知模型效果是否符合持续优化的趋势,另外有条件也应该进行竞品的比对,来发现模型的不足之处。
模型评估分析
我们对算法模型指标评估之后,除了感知算法模型评估指标在不同版本的差异,还希望进一步的进行分析,已得到具体算法模型的优化的优化方向,这时候就需要结合数据的标注信息进行深度的分析,挖掘算法优劣是否哪些数据特征的影响,影响程度如何。比如通过数据特征组合或者控制部分特征一致等方式,看其他特征对算法效果的影响程度等等。
这时候我们一般通过开发一些脚本实现我们的分析过程,根据算法微服务接口的响应体以及数据准备阶段所标注的数据特征,进行分析脚本的开发。
另外指标结果的进一步分析,也要结合算法设计,比如图像目标检索算法,每张图片的检索流程为“输入图片检测“ -> “输入图片的特征提取“ -> “相似特征计算、检索“,通过此查询流程不难看出图像检索的整体精确率受上述三个环节的影响,因此基于指标结果的深度分析也需要从这三个层次入手。
本文暂时没有评论,来添加一个吧(●'◡'●)