智能算法评测系统实践

  • 2019 年 10 月 7 日
  • 筆記

1

评测系统的设计

【概览】

评测系统的设计是整个评测系统的灵魂,决定了整个评测系统该怎么做,而且对后续产品算法的走向都起到至关重要的作用。

在系统的设计过程中,我们目前的经验主要有评测指标评测数据以及评测场景三个方面需要着重考虑。

【评测指标】

评测指标决定了我们要评什么,通常算法的指标有准确率、召回率、覆盖率、多样性、实时性等等。

具体的需要因产品的特性而定,比如一般推荐系统都会比较多样性,但如果是个输入法,你不给用户经常用的词而且多样性地给用户各种没用过甚至是没见过的,那就是花样作死。

而且不止只是从产品的特性出发,还需要全面地抓住产品特性相关的所有指标。前两年用头条时,在NBA板块感觉文章推荐的准确以及品质都还可以,不过实时性不好经常会给我推一些旧新闻,比如今天刚好火箭的比赛,打开头条看看,发现推了一条火箭大胜的新闻,但实际上火箭当天输球了,这条新闻是两天前的比赛,这时给用户的体验就非常不好。

综上所述,我们规划评测指标需要从产品最根本的特性出发,全面把控。

【评测数据】

都说人工智能是数据喂出来的,其实对评测来说也是一样,结果的好坏完全取决于数据。

所以我们评测数据的最核心的就是要客观公正。比如以前常见的Bad Case就是拿算法训练数据来评测,效果异常的好,但产品上线后用户的反馈很一般甚至很差;还有就是我们经常犯的错误,纯粹拿自己用户的数据来评测,这里很容易受到马太效应的影响。

除了数据来源的客观公正性,还有数据选择的客观公正也非常重要。这里就要求能够从用户角度全面地选取评测数据。比如前段时间我父母过来玩,发现他们在我家用方言聊天时有一定几率会唤醒小爱音箱,这个体验头一两次还感觉还蛮有趣但多了就挺烦,这里我就怀疑他们针对我老家那边的方言评测没有做好,不过南方的方言数不胜数且博大精深这点也能理解小爱同学。

综上所述,我们选取评测数据需要从用户的角度出发,尽可能地保证客观公正。

【评测场景】

评测场景即我们在哪进行评测,广义上也是评测数据的一种,不同场景下相同数据往往也有不同的意义。比如还是小爱音箱,我就发现在卧室不扯着嗓子喊基本上不可能成功唤醒,远距离场景应该也是其需要关注的核心指标之一。

当然评测的场景也需要结合产品的特性,比如上述场景在手机输入法的语音评测时就不用过多考虑。

综上所述,我们选取评测场景同样地需要根据产品的特性,从用户的角度出发,保证全面和客观。

2

评测任务的执行

【概览】

如果说评测系统的设计是灵魂,那任务执行就是躯干。直接决定我们一开始的想法能不能实现?能实现多少?以及实现和我们预期的是否一致?

这里我们分任务分发系统任务管理系统以及任务执行工具三部分展开。

【任务分发系统】

一些小量级的评测人工部署就好,但智能算法效果的评估往往评测数据量级都很大,这时就需要一个强大的系统来提升效率减少人力成本

任务分发是源头,一旦挂了后续的事都没法进行,所以首当其冲就是系统的稳定性;当然系统的可恢复性也非常重要,如果真挂了,要能及时恢复。

稳定性能保证我们评测正常进行,但如果想要高效,我们的系统还需要有较好的智能性。比如有A、B、C三个任务执行时间预计分别为1h、1h、2h,然后一共有2个执行终端,这时如果我们先下发A、B再下发C,所有任务执行完一共需要3h,但如果先下发B、C再下发A就可以2h执行完。

综上所述,一个优秀的任务分发系统应具有极强的稳定性和较好可恢复性,同时最好还能借助智能算法更高效地分配任务。

【任务管理系统】

如果任务来源和执行都按照我们预期进行,那这个系统完全没有必要,但往往事与愿违。

比如有任务执行终端挂了,我们就需要及时知晓,并将该任务收回重新下发,这里就需要有很强的异常监控和处理机制

除了执行异常,任务执行的优先级往往也不是一成不变的,而且可能还有紧急任务,这时候就需要系统能够灵活调整。与此同时,既然能够灵活调整我们就需要有较好的权限管控机制,防止有人误操作。

综上所述,一个优秀的任务管理系统应具有很强的异常监控和处理机制、灵活的调整机制以及完善的权限管控机制。

【任务执行工具】

评测执行工具不同于一般的测试工具,往往持续执行时间非常长,多机分布式执行一般也没有人看着,而且如果评测数据和场景很多时,评测执行工具面临的情况也会比较复杂

由于评测执行工具与评测结果直接相关,所以首要的是准确性,很多时候我们指标的变化都是很小的,如果工具有BUG产生了误差,后续的评测结论就没有意义了。这里就需要工具在各种情况下处理逻辑都足够全面和严谨,能保证其功能正确性,而且最好还要有一套自我检查机制防止评测过程出错。

其次由于现在评测任务很多,工具的执行效率也很多重要。效率低的话,要么评测结果出的慢耽搁智能算法改进,要么就只能堆机器去提升整体效率,成本很高。

此外与任务分发系统类似,评测执行工具的稳定性和可恢复性也很重要,最好是保证正常执行,万一挂了,也尽可能去恢复现场尝试继续执行,否则就需要重新执行该任务浪费资源了。

不过与任务分发管理系统不同的是评测执行工具面临的情况会复杂很多,所以其在各种极端情况下的健壮性也非常重要。

综上所述,一个优秀的评测执行工具首先得具有绝对的准确性,然后是能稳定高效地运行,并具有良好的自恢复能力,这就要求工具要保证各种情况下的健壮性和功能正确性,质量要求非常高。

3

评测结果的分析

【概览】

评测系统设计是灵魂,任务执行是躯干,那评测结果就是做的事了,最终还需要有一套完善的机制让评测结果能够成功推进智能算法的改进。

这里我们分结果文件存储结果分析与展示以及日志查看与对比三部分展开。

【结果文件存储】

与评测任务执行类似,小量级的自己随便存下就好。但我们现在评测动辄上万份评测结果,这时结果文件的存储就得单独做套系统了。

与大多数文件存储一样,这里首要还是存储的稳定性,要有备份,保证评测结果文件不会丢失。

其次,由于文件太大,我们最好还有一个结构清晰的文件管理方式,按照评测项目、版本等属性管理好,以方便后续查询。

综上所述,结果文件存储需要有很强的稳定性,保证数据不会丢,同时文件管理要足够清晰以方便后续查询。

【结果的分析与展示】

评测执行终端产生的都是单一的日志,想要得到我们评测设计里的指标,还需要将这些日志进行分析和整合,最后系统化地展示出来。

这里和上面评测工具类似,由于和结论相关所以最重要的就是准确性,我们必须保证整合计算的指标没有误差。

其次是结果展示的设计,这里一定要从用户(使用评测结论同学)的角度出发合理规划数据展现形式(比如历史版本对比用折线图、竞品对比用柱状图等等)。

最后由于评测结果文件过大,这对我们分析计算脚本的性能也有些要求,要求具有高效分析大文件的能力。

综上所述,结果的分析与展示首要是准确性,其次是合理展现以方便大家查看使用,最后就是尽可能提升分析计算脚本的性能以能够高效地分析大文件。

【日志的查看与对比】

如果评测的结论都和我们预期一致,且大家都没有疑问,那这个系统也是用不上的。不过往往评测会出现我们意想不到的结论,这时就需要这个去这日志系统上查看和对比了,以寻找问题所在。

这里直接和上万份数百GB的结果日志文件对接,而且一旦出问题,大家查询的频率会很高,所以这里最核心的一项就是性能,要能快速给出用户想要的数据。

此外由于日志太多,大家往往只需要其中一部分,所以我们查找系统还要有很全面的筛选功能

最后就是由于大家往往需要把有问题的日志拿回本地分析,所以还需要有一套便捷的日志获取机制,能够一键复制或者下载需要的数据。

综上所述,日志的查看与分析首要是保证性能,其次就是要有全面的筛选功能和便捷的获取机制方便用户拿到需要的数据。

一个优秀的评测系统,应该是从用户角度出发,结合产品特性全面把控各项指标,同时能够准确、稳定、高效完成各种评测任务,推进智能算法不断改善。

没有科学,爱是无力的;没有爱,科学是破坏性的。评测就是AI的引路人,愿世界充满爱,愿未来更加美好!