Page 38 - 《软件学报》2021年第11期
P. 38
3364 Journal of Software 软件学报 Vol.32, No.11, November 2021
表 7 则表明,随着推荐结果数的增加,准确率也一直变大.这符合我们理论上的预测,因为推荐结果中推荐项
数越多,推荐列表中涵盖正确推荐的可能性就越大.但是我们也应该注意到,当推荐结果数分别为 8 和 10 时,准
确率的提高已经很小.再结合 MRR 的对应值,特别是考虑到对开发者的实用性,我们可以总结出,对于推荐结果
数 k,取值为 8 已经是一个比较好的选择.当然,出于更好的性能需求考虑,在实验中都暂时将 k 值定为 10.
Table 7 Precision and MRR of different TOP-N values
表 7 不同的 TOP-N 对应的准确率和 MRR
Top-N
指标
1 5 8 10
Precision (%) 21 37 55 58
MRR 0.210 0 0.269 8 0.296 3 0.299 5
对问题 3 的回答:对于上下文代码行数 n 和推荐结果数 k,不同的参数取值确实会对我们的方法的推荐结果
产生影响.根据已有的实验结果,我们得出的结论是:充分考虑到开发过程中一个完整方法块本身就不会很长,
以及避免序列过长对推荐速度产生影响,在保证推荐准确率不会有太大影响的情况下,将上下文代码行数 n 取
为 3、将推荐结果数 k 取为 8,应该是对我们方法而言比较合适的参数取值.但是,出于更好的性能需求考虑,在其
他实验中都暂时将 k 值定为 10.
4.2.4 对问题 4 的回答
我们设计第 4 个实验,是为了检验对推荐结果进行二次排序是否会使得本方法的推荐结果的优先级排序
和推荐所花费时间更符合用户需求.一个比较理想的推荐方法,用户越满意的推荐项应该排在推荐结果中更加
靠前的位置.因此,虽然利用 LSA 对推荐结果进行二次排序并不能显著提高推荐结果的准确率,但能够帮助用户
更好地获取想要的推荐结果,提高用户体验.所以,对推荐结果二次排序的必要性进行检验,以及找到最佳的阈
值θ取值是必要的.
根据θ的合适取值,我们将θ分别设为 0.4~0.8 进行实验.由于对推荐结果进行二次排序并不会对准确率产
生影响,所以该实验只在 MRR 和推荐所花费时间上对二次排序前后推荐结果进行对比.二次排序所花费时间只
取一个近似整数值,单位为秒(s).用于测试的实例数共 1 000 个.并且由于实验 3 中已经有进行二次排序之前的
MRR 值,所以在此次实验中不需要再进行重复实验.为了控制变量,我们将 n 设为 4,k 设为 10.
表 8 则表明,在推荐结果二次推荐之后,θ值发生变化,MRR 值也随之变化.这符合我们理论上的预测,因为阈
值不同,被调整优先级的推荐结果项数也不同.但是,虽然推荐结果调整使得 MRR 越高,表示用户满意的推荐项
排在推荐结果中越靠前的位置,但是阈值越低也表示需要对比的代码段个数越多,计算结果所花费的时间也越
长.最理想的情况是,在 MRR 值有所改进时,二次排序所花费的时间也不会太长.当θ值为 0.4 和 0.5 时,虽然 MRR
很高,但是其花费的推荐时间太长,在实际使用中实用性较差.综合考虑 MRR 和二次排序花费时间,我们考虑到
在 MRR 指标相差不大的情况下,二次排序所花费的时间越短,实用性越好.所以,θ设为 0.7 是相对比较好的选择.
Table 8 MRR and time for different θ values after re-ranking
表 8 二次排序后不同θ值对应的 MRR 和时间
θ 值
指标
0.4 0.5 0.6 0.7 0.8
排序后 MRR 0.331 8 0.322 1 0.318 6 0.312 4 0.306 6
时间(s) 7 4 2 1 1
对问题 4 的回答:比较实验 4 的和实验 3 可以看出,对推荐结果进行二次排序确实能改善所推荐的结果,使
用户越满意的推荐项应该排在推荐结果中更加靠前的位置.不同的θ取值对推荐结果质量和二次排序花费时间
影响都很大.综合考虑之后,出于更好的性能需求考虑,在尽可能提高 MRR 值和减少推荐花费的时间前提下,将θ
值设为 0.7 应该是一个比较好的选择.