机器学习平台是一款集数据集、特征工程、模型训练、评估、预测、发布于一体的全流程开发和部署的工作平台。其数据量大、数据多样性、支持算法种类多,加上算法模型结果不确定、集成复杂等等特点;这会给QA的工作带来怎样挑战、以及如何克服,本文一一揭晓。
在谈测试机器学习平台带给QA的挑战之前,先了解一下机器学习平台是什么?
机器学习平台是一款集数据集、特征工程、模型训练、评估、预测、发布于一体的全流程开发和部署的工作平台,为数据科学家提供端到端的一站式的服务,帮助他们脱离繁琐的工程化开发,从而帮助他们提高工作效率。
在介绍机器学习平台之前,首先看一下数据科学家日常工作是怎样的?
数据科学家的工作
数据科学家日常工作就是把一个模糊的问题转化成一个具体的数据问题,运用数据科学的方法解决掉这个问题。
举例说明:
广告供应商老大,要求数据科学家小博用模型去估计广告点击率,以便给什么用户推荐什么广告,增加用户的点击率。小博思考,广告被点击是1,没有被点击是0,这是个二分类问题,可以用简易的逻辑回归模型来预测用户点击的概率。小博开始行动如图1:
-
数据收集:小博开始收集业务相关的数据,比如:广告供应商的信息,广告本身的信息和用户信息等;
-
预处理:对收集到的上述原数据进行清洗,比如去除脏去重等等;
-
构造数据集:把经过预处理的业务数据,构造数据集;
-
特征工程:对数据集进行特征分析(如:卡方检验、统计等)、特征处理(如:归一化、Onehot编码等)、提取特征(如:相关性系数等),然后供LR模型训练使用;
-
选择模型:选用Logistic Regression算法来构建预测广告点击率的模型;
-
参数调优&评估:训练调参并观察评估结果,选择在离线数据集中性能评估值最优的参数组合;
-
在线A/B测试:把上一步调出的最优模型上线,和原有模型进行A/B测试,如果新的模型性能表现更好,则替换掉旧模型,小博大功告成。
即数据科学家们的日常工作流程有:
- 问题定义
- 数据收集
- 预处理
- 构造数据集
- 特征工程
- 建模、调参
- 部署、在线验证
- 循环优化
机器学习平台的主要业务
简单理解,机器学习平台就是帮助数据科学家工作变得更简单、高效。所以,机器学习平台不仅集成了各种机器学习组件(算子)和算法,提供了友好的可视化界面,可以通过简单的拖拉拽来构建复杂的Pipeline,使得数据科学家日常工作更简便、高效。即机器学习平台主要业务包括(如图2):
机器学习平台提供的业务功能模块:
- 数据集
- 此模块主要是数据集的管理,包括数据集构建、查询、删除等,
- Pipeline数据通道处理后生成的数据集也在此模块管理,
- 创建数据集支持各种形式的数据源构建数据集(如:hive表或Textfile、Avro文件等)。
- Pipeline
- 此模块主要是构建与运行数据处理通道、模型预测通道,
- 支持常用的特征处理、提取、降维等几十种特征工程算子,
- 支持拖拉拽可视化的方式轻松构建Pipeline,
- 支持Pipeline一键发布。
- 实验室
- 支持市面上常用的几十种机器学习以及深度学习算法,如:LR、RF、FM、DFM、DNN、PNN等等;
- 支持模型参数调优、超参;
- 支持多模型同时训练自动评选最优;
- 支持各种模型常见的评估指标,如:准确率、召回率、F1-score等;
- 支持最优模型一键发布。
- 其它
- 集成Jupyter Notebook
- 调度等等
QA面临的挑战
了解了机器学习平台的主要业务功能后,谈谈机器学习平台测试过程中,QA所面临的挑战,以及在实践的所使用的应对方案。
- 机器学习领域太多的算法,QA难以短期内熟悉所有算子与算法;有些组件(算子)计算原理复杂,超出QA的计算能力,比如:PCA。这种情况,怎么测正确性?
在Jupyter Notebook自己写代码直接调用Spark或Angel算子,传入同样数据集,通过对比结果验证。
- Pipeline模块,支持30多个算子,组合场景太多,难以覆盖全面。怎么办?
“ 请用二八原则做选择,挑那些收益更高的组合来覆盖。”
- 每个组件(算子)单独测试,然后,再全部算子组合一起验证。
- 与数据科学家、PO沟通,常用组合验证。
- 不同类组件(算子)组合验证。
- 逻辑复杂容易出错的组合。
以上这些Case构建自动化,或直接在Local或QA环境上备份pipeline,每当增加一个新组件(算子),除了单测新组件各种逻辑之外,再把它集成到原有的pipeline上验证。
- 数据类型太多、数据值各样。场景太多怎么测?
在大数据项目上,数据即Case。准备好一套脚本,在集群上一键创建包含了所有数据类型与不同数据值的数据集。比如,每次SignOff或QA环境上测试时,这一个完整的数据集搞定全部场景验证。
-
模型训练结果没有确定的答案,怎么测。
通过模型性能指标来检验模型结果的好坏。比如:准确率、精确率、召回率、AOC曲线、F1-Score。 -
每个不同模型算法的训练数据集与测试数据集怎么准备。当数据集准备的不好时,直接影响模型训练结果。
- 寻找业务方真实业务数据(脱敏)。
- 网上下载数据集,比如:比较流行的数据集Iris、Adult、Wine、Car Evaluation,各大官网的数据集(如:Spark data、Angel data)。
- QA不是数据科学家,调参不专业,评估指标结果一直很差,无法判断是调参问题还是代码有问题?怎么办?
- 官网上下载相应数据集,依照官网给定样例调参。
- 实在不行,找数据科学家寻求帮助。
- QA环境资源有限,大数据集提交到集群上训练,资源占满block其它任务执行,而且每次耗时在几十分钟或几个小时,怎么办?
- 白天用小数据量测试验证逻辑正确性,下班后运行大数据集测试。
- 限制提交job占用资源,这种方式运行时间会更长,但可以解决由于资源被占满block其他任务执行的问题。
以上是在机器学习平台项目中QA遇到的挑战与应对方案,希望有相关经验的朋友一起交流。
更多精彩洞见,请关注微信公众号:ThoughtWorks洞见