文 / 阿里云DataWorks - 秦奇
作为一个代码推荐的喜爱与重度依赖者,我整理了一下衡量代码推荐模型优劣的一些指标与方法,不足之处,欢迎拍砖。
对于基本的评价指标,我分为了三类,分别为:准确率指标、性能指标和**覆盖率指标,**下面分别来介绍。
准确率指标
顾名思义,就是指 **产生的推荐项的准确率。**这里又分为 模型评估的的准确率 和 实时推荐的准确率
-
模型评估的的准确率:在模型训练阶段,将训练代码分为 训练集 和 测试集,在训练完成之后采用 测试集 对模型的效果进行评估和测试,获得准确率指标。
-
评估方法:选取测试集代码随机行列,作为当前光标位置,将代码上下文输入模型进行预测,将结果与实际代码进行比较。
-
相关指标:
-
准确率:存在某一推荐项和后续代码完全一致
-
Top-1准确率:推荐的第一项即是正确代码
-
Top-3准确率:推荐前三项即包含正确代码
-
推荐完整度:在推荐正确的基础上,推荐越多、越完整越好。比如推荐的单词、连续多词、完整句子或者完整代码片段等。
-
MRR: 推荐平均倒数排名,越接近于1代表正确项越接近于第一项,也代表推荐越准确
-
实时推荐的准确率:这个是指将模型部署线上之后,根据用户的实际使用情况作为准确率的评价依据。即产生推荐并且用户选取了推荐项,即可认为推荐是准确的。这里可能存在一些限制:
- 有可能产生了推荐但是用户未选取
- 持续输入的准确率如何计算?比如,输入单个字符产生推荐,然后用户继续输入,推荐持续产生,有可能产生了推荐但用户并未选取,而是继续输入,这部分也会对统计的准确率有所影响
其对应的指标主要是推荐选取率,具体为:
- Top-1选取率:选取推荐第一项的比例
- Top-3选取率:选取推荐前三项的比例
性能指标
推荐的性能指标是指 **推荐的耗时、模型所需的硬盘存储推以及实时的内存消耗,**对应指标有:
- 平均推荐耗时:相同的环境,计算推荐10000次(1000000次)的平均耗时(开始推荐到产生推荐结果的间隔),耗时小于100ms属于优秀,小于1s属于一般,大于1s则无法用于实际开发中
- **运行时内存占用,**如果是本地模型,内存占用太多会影响到机器性能,影响开发效率
推荐覆盖率
是否用户的在任何位置的任何输入都能触发推荐?理论上来说,任何输入都触发推荐对用户写代码是很有帮助的。但我们知道VsCode中基于LanguageServer的推荐,仅能做到基于语法进行推荐,这导致很多时候用户输入是没有推荐的。当然,虽说这个指标越高越好,但这个指标只有和准确率结合起来才有意义。在不保证准确率的情况下,单纯追求覆盖率是没有意义的。指标为:
- 平均覆盖率:在测试集代码中,随机选取输入位置进行推荐,看是否可以产生推荐,测试10000(或1000000次),然后计算百分比。
以上就是衡量代码推荐模型的一些指标和计算方法了,欢迎拍砖。