机器学习平台带给QA的挑战

2024-04-14 12:48

本文主要是介绍机器学习平台带给QA的挑战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习平台是一款集数据集、特征工程、模型训练、评估、预测、发布于一体的全流程开发和部署的工作平台。其数据量大、数据多样性、支持算法种类多,加上算法模型结果不确定、集成复杂等等特点;这会给QA的工作带来怎样挑战、以及如何克服,本文一一揭晓。

在谈测试机器学习平台带给QA的挑战之前,先了解一下机器学习平台是什么?

机器学习平台是一款集数据集、特征工程、模型训练、评估、预测、发布于一体的全流程开发和部署的工作平台,为数据科学家提供端到端的一站式的服务,帮助他们脱离繁琐的工程化开发,从而帮助他们提高工作效率。

在介绍机器学习平台之前,首先看一下数据科学家日常工作是怎样的?

数据科学家的工作

数据科学家日常工作就是把一个模糊的问题转化成一个具体的数据问题,运用数据科学的方法解决掉这个问题。

举例说明:

广告供应商老大,要求数据科学家小博用模型去估计广告点击率,以便给什么用户推荐什么广告,增加用户的点击率。小博思考,广告被点击是1,没有被点击是0,这是个二分类问题,可以用简易的逻辑回归模型来预测用户点击的概率。小博开始行动如图1:

图1. CTR问题解决步骤

  • 数据收集:小博开始收集业务相关的数据,比如:广告供应商的信息,广告本身的信息和用户信息等;

  • 预处理:对收集到的上述原数据进行清洗,比如去除脏去重等等;

  • 构造数据集:把经过预处理的业务数据,构造数据集;

  • 特征工程:对数据集进行特征分析(如:卡方检验、统计等)、特征处理(如:归一化、Onehot编码等)、提取特征(如:相关性系数等),然后供LR模型训练使用;

  • 选择模型:选用Logistic Regression算法来构建预测广告点击率的模型;

  • 参数调优&评估:训练调参并观察评估结果,选择在离线数据集中性能评估值最优的参数组合;

  • 在线A/B测试:把上一步调出的最优模型上线,和原有模型进行A/B测试,如果新的模型性能表现更好,则替换掉旧模型,小博大功告成。

即数据科学家们的日常工作流程有:

  1. 问题定义
  2. 数据收集
  3. 预处理
  4. 构造数据集
  5. 特征工程
  6. 建模、调参
  7. 部署、在线验证
  8. 循环优化

###机器学习平台的主要业务

简单理解,机器学习平台就是帮助数据科学家工作变得更简单、高效。所以,机器学习平台不仅集成了各种机器学习组件(算子)和算法,提供了友好的可视化界面,可以通过简单的拖拉拽来构建复杂的Pipeline,使得数据科学家日常工作更简便、高效。即机器学习平台主要业务包括(如图2):

图2. 机器学习平台的主要业务模块

机器学习平台提供的业务功能模块:

  • 数据集
  1. 此模块主要是数据集的管理,包括数据集构建、查询、删除等,
  2. Pipeline数据通道处理后生成的数据集也在此模块管理,
  3. 创建数据集支持各种形式的数据源构建数据集(如:hive表或Textfile、Avro文件等)。
  • Pipeline
  1. 此模块主要是构建与运行数据处理通道、模型预测通道,
  2. 支持常用的特征处理、提取、降维等几十种特征工程算子,
  3. 支持拖拉拽可视化的方式轻松构建Pipeline,
  4. 支持Pipeline一键发布。
  • 实验室
  1. 支持市面上常用的几十种机器学习以及深度学习算法,如:LR、RF、FM、DFM、DNN、PNN等等;
  2. 支持模型参数调优、超参;
  3. 支持多模型同时训练自动评选最优;
  4. 支持各种模型常见的评估指标,如:准确率、召回率、F1-score等;
  5. 支持最优模型一键发布。
  • 其它
  1. 集成Jupyter Notebook
  2. 调度等等

QA面临的挑战

了解了机器学习平台的主要业务功能后,谈谈机器学习平台测试过程中,QA所面临的挑战,以及在实践的所使用的应对方案。

  • 机器学习领域太多的算法,QA难以短期内熟悉所有算子与算法;有些组件(算子)计算原理复杂,超出QA的计算能力,比如:PCA。这种情况,怎么测正确性?

在Jupyter Notebook自己写代码直接调用Spark或Angel算子,传入同样数据集,通过对比结果验证。

  • Pipeline模块,支持30多个算子,组合场景太多,难以覆盖全面。怎么办?

“ 请用二八原则做选择,挑那些收益更高的组合来覆盖。”

  1. 每个组件(算子)单独测试,然后,再全部算子组合一起验证。
  2. 与数据科学家、PO沟通,常用组合验证。
  3. 不同类组件(算子)组合验证。
  4. 逻辑复杂容易出错的组合。

以上这些Case构建自动化,或直接在Local或QA环境上备份pipeline,每当增加一个新组件(算子),除了单测新组件各种逻辑之外,再把它集成到原有的pipeline上验证。

  • 数据类型太多、数据值各样。场景太多怎么测?

在大数据项目上,数据即Case。准备好一套脚本,在集群上一键创建包含了所有数据类型与不同数据值的数据集。比如,每次SignOff或QA环境上测试时,这一个完整的数据集搞定全部场景验证。

  • 模型训练结果没有确定的答案,怎么测。
    通过模型性能指标来检验模型结果的好坏。比如:准确率、精确率、召回率、AOC曲线、F1-Score。

  • 每个不同模型算法的训练数据集与测试数据集怎么准备。当数据集准备的不好时,直接影响模型训练结果。

  1. 寻找业务方真实业务数据(脱敏)。
  2. 网上下载数据集,比如:比较流行的数据集Iris、Adult、Wine、Car Evaluation,各大官网的数据集(如:Spark data、Angel data)。
  • QA不是数据科学家,调参不专业,评估指标结果一直很差,无法判断是调参问题还是代码有问题?怎么办?
  1. 官网上下载相应数据集,依照官网给定样例调参。
  2. 实在不行,找数据科学家寻求帮助。
  • QA环境资源有限,大数据集提交到集群上训练,资源占满block其它任务执行,而且每次耗时在几十分钟或几个小时,怎么办?
  1. 白天用小数据量测试验证逻辑正确性,下班后运行大数据集测试。
  2. 限制提交job占用资源,这种方式运行时间会更长,但可以解决由于资源被占满block其他任务执行的问题。

以上是在机器学习平台项目中QA遇到的挑战与应对方案,希望有相关经验的朋友一起交流。

文/ThoughtWorks李春辉

这篇关于机器学习平台带给QA的挑战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903027

相关文章

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用