面向AI应用的测试思考

2020-09-08 20:57:46 浏览数 (1)

人工智能(AI)已无处不在,AI正在为各行各业赋能,并以前所未有的速度全方位地改变着我们的生活。然而,由于AI是一种新的编程范式,无论在学术界还是工业界,对于AI测试的研究和实践尚处于起步阶段。

AI引导了新一轮的产业变革,随着AI在各行各业的应用日益广泛,对AI应用测试的需求也与日俱增。举几个例子,如果自动驾驶的智能系统做出错误的决策,将大大增加车祸的风险。如果金融风控模型做出错误的预测,将导致不可估量的经济损失(逾期坏账)。如果广告推荐系统做出错误的推荐,将带来较差的用户体验且降低转化率。由此可见,对于AI应用的质量保障显得愈发重要。

1

AI测试面临挑战

关于AI应用(系统)的组成,通常是由软件工程和机器学习模型结合。机器学习能够从历史样本中不断地自学习,分析信息,生成预测模型后可输出新样本的预测结果。这个过程相较于传统软件系统要复杂得多。

对于AI应用的测试,往往缺乏统一的方法、明确的标准,且存在Test Oracle问题。AI系统的预测会伴随样本数据的变化而发生偏移。传统软件测试是基于固定输入和预期输出做比较,有明确的标准。相比于传统软件系统测试,AI测试更难预测评估,保证AI应用的质量需要截然不同的方法。在不断变化的数据环境中,采用端到端的系统测试及选择组件模块的单元测试存在一定价值,但不足以保证模型效果准确性。我们需要对模型离线训练做准确性测试,并保证离线与在线的一致性。关于AI应用程序开发的生命周期,如下图所示。

现实世界中的ML应用程序/系统只有一小部分由ML代码组成,其他大部分都是由复杂的架构工程构成。对于AI产品业务的测试,可以从两个方面着手,数据验证测试和AI应用测试。

2

AI测试的主要策略

基于数据验证的测试:验证数据集,消除数据偏差。

数据是基于AI应用程序的新代码,需要对输入数据的变更进行测试,以使其平稳运行。这类似于传统的测试方法,代码中的任何更改都会触发对修订后的代码的测试。关于数据验证测试,要考虑的关键因素包括:

  • 训练数据集:精选训练数据集(包括输入数据和预期输出)。进行数据依存关系的静态分析对于解释数据源和特征非常重要。
  • 测试数据集:构建测试数据集,测试所有可能的排列和组合,以推导训练后的模型的效果。在训练期间,随着迭代次数和数据丰富性的增加,该模型会进一步完善。
  • 系统验证测试套件:系统验证测试套件基于算法和测试数据集。例如,对于基于病理或诊断报告预测患者结果的系统而言,必须围绕针对相关疾病、患者人口统计学、患者治疗以及其他类似测试场景的患者风险概况来构建测试场景。
  • 测试结果的报告:必须以统计方式进行,因为基于ML的算法的验证会产生基于范围的准确性(置信度分数),而不是预期的结果。测试工程师必须为每个结果确定并定义一定范围内的置信度阈值。建立无偏差的AI应用对于业务决策十分重要。有监督学习,涵盖了70%以上的AI应用场景。标注的数据,容易存在人类的判断偏见。如果我们不在标签数据中考虑人类经验,就会错过经验知识。如果标签数据质量不高,数据偏差问题就会突出。我们可以通过对输入标签数据的任何隐藏模式、虚假相关性、异方差等进行先验测试来减少误差。

关于AI/ML测试需要考虑的关键偏差有:

  • 数据偏差:通常我们用于训练模型的数据集比较有限(容易产生较大的偏斜)。较常见的示例,情感分析–对于不同类型的情感,大部分数据集没有相同(或足够)数量的数据。因此,最终模型会偏向于具有更大数据集的情感。
  • 预测偏差:在按预期工作的系统应用中,预测标签的分布应等于观察标签的分布,即分布一致。这是一个有用的诊断步骤。该方法可以帮助检测模型预测效果突然改变的情况。当模型预测效果出现较大偏差时,基于历史数据中训练的模型分布不能反映对未来的预测。

基于AI / ML应用程序的测试。

关于AI应用测试,可以总结概括4个关键要点,算法、数据质量、业务场景、分层专项。

虽然可解释的AI(XAI)和Auto-ML(自动建模)技术能极大地提高测试效率,但从模型和数据集角度来看,分层专项测试仍然是有效的保障手段。

3

模型测试的常用方法

黑盒和白盒测试

测试ML模型涉及黑盒和白盒测试,非常类似于传统测试方法。但获得足够大且足够全面的训练数据集以满足 "机器学习测试" 的需求是一个重大挑战。在模型开发阶段,模型(算法)工程师通过将模型输出(预测值)与实际值进行比较来测试模型效果。

关于ML模型的黑盒测试,主要包括:

  • 模型效果测试:涉及对测试数据/新数据集的测试,并计算指标参数(例如准确率、精准率、召回率,F1-score,混淆矩阵(假阳性和真阳性、假阴性和真阴性)),通过指标参数对比模型效果。对于投入生产的模型需要达到预期的效果。
  • 模型蜕变测试:能减少Test Oracle问题。Test Oracle是一种机制,测试工程师可通过该机制确定系统是否正确响应。当难以确定所选测试用例的预期结果或确定实际输出是否符合预期结果时,就会发生Test Oracle问题。
  • 双重编码/算法集成:在给定相同输入数据集的情况下,使用不同算法构建了多个模型,并比较了每个模型的预测。为了构建用于解决分类问题的典型模型,可以使用多种算法(如Random Forest)或神经网络(如LSTM),但最终会选择产生最大预期效果的模型作为默认模型。
  • 基于覆盖率的模糊测试:输入ML模型的数据旨在测试所有特征激活。例如,对于使用神经网络构建的模型,测试工程师需要测试数据集,这些数据集可能导致神经网络中每个神经元/节点的激活。
  • 模型回溯测试:回溯测试主要是基于历史数据的预测模型,例如,用于交易、投资、欺诈检测或信用评分的金融风控模型。回溯测试,简单的说,就是用真实的历史行情数据,构造出一个模拟的交易环境(回溯环境),让策略在其中运行。策略像时空穿越一样,回到历史上的某个时间节点,重头开始运行一遍。然后,根据策略输出的交易记录,评估策略的盈利能力、风险控制能力和其他相关指标。
  • 在线 A/B 测试:使用A/B测试来辅助决策,线上同时运行多个模型版本,比较选择效果最好模型版本。在线A/B测试和离线评估有较大的区别,离线评估无法完全消除模型过拟合的影响,离线评估无法完全还原线上真实的工程环境,线上系统的某些商业指标在离线评估中无法计算。

对于ML模型的白盒测试,主要动作有代码审查,开发单测函数(函数由特定的算法根据给定的数据实现),进行模型可解释性分析(解释因变量与自变量之间非常复杂的关系)等。

总之,对于AI/ML模型的测试问题与传统软件测试问题有较大不同,且存在着诸多技术挑战。但伴随着业界越来越多地使用AI技术来构建其系统和应用程序,对AI应用的测试方法和实践将在未来迅速发展和逐步完善。

0 人点赞