代码推荐 之 模型效果的评估

avatar
阿里巴巴 前端委员会智能化小组 @阿里巴巴

文 / 阿里云DataWorks - 秦奇

作为一个代码推荐的喜爱与重度依赖者,我整理了一下衡量代码推荐模型优劣的一些指标与方法,不足之处,欢迎拍砖。

对于基本的评价指标,我分为了三类,分别为:准确率指标性能指标和**覆盖率指标,**下面分别来介绍。

准确率指标

顾名思义,就是指 **产生的推荐项的准确率。**这里又分为 模型评估的的准确率 和 实时推荐的准确率

  • 模型评估的的准确率:在模型训练阶段,将训练代码分为 训练集测试集,在训练完成之后采用 测试集 对模型的效果进行评估和测试,获得准确率指标。

  • 评估方法:选取测试集代码随机行列,作为当前光标位置,将代码上下文输入模型进行预测,将结果与实际代码进行比较。

  • 相关指标:

  • 准确率:存在某一推荐项和后续代码完全一致

  • Top-1准确率:推荐的第一项即是正确代码

  • Top-3准确率:推荐前三项即包含正确代码

  • 推荐完整度:在推荐正确的基础上,推荐越多、越完整越好。比如推荐的单词、连续多词、完整句子或者完整代码片段等。

  • MRR: 推荐平均倒数排名,越接近于1代表正确项越接近于第一项,也代表推荐越准确

  • 实时推荐的准确率:这个是指将模型部署线上之后,根据用户的实际使用情况作为准确率的评价依据。即产生推荐并且用户选取了推荐项,即可认为推荐是准确的。这里可能存在一些限制:

  1. 有可能产生了推荐但是用户未选取
  2. 持续输入的准确率如何计算?比如,输入单个字符产生推荐,然后用户继续输入,推荐持续产生,有可能产生了推荐但用户并未选取,而是继续输入,这部分也会对统计的准确率有所影响

其对应的指标主要是推荐选取率,具体为:

  1. Top-1选取率:选取推荐第一项的比例
  2. Top-3选取率:选取推荐前三项的比例

性能指标

推荐的性能指标是指 **推荐的耗时、模型所需的硬盘存储推以及实时的内存消耗,**对应指标有:

  • 平均推荐耗时:相同的环境,计算推荐10000次(1000000次)的平均耗时(开始推荐到产生推荐结果的间隔),耗时小于100ms属于优秀,小于1s属于一般,大于1s则无法用于实际开发中
  • **运行时内存占用,**如果是本地模型,内存占用太多会影响到机器性能,影响开发效率

推荐覆盖率

是否用户的在任何位置的任何输入都能触发推荐?理论上来说,任何输入都触发推荐对用户写代码是很有帮助的。但我们知道VsCode中基于LanguageServer的推荐,仅能做到基于语法进行推荐,这导致很多时候用户输入是没有推荐的。当然,虽说这个指标越高越好,但这个指标只有和准确率结合起来才有意义。在不保证准确率的情况下,单纯追求覆盖率是没有意义的。指标为:

  • 平均覆盖率:在测试集代码中,随机选取输入位置进行推荐,看是否可以产生推荐,测试10000(或1000000次),然后计算百分比。

以上就是衡量代码推荐模型的一些指标和计算方法了,欢迎拍砖。