Page 244 - 《软件学报》2021年第7期
P. 244
2162 Journal of Software 软件学报 Vol.32, No.7, July 2021
这也解释了词库大小从 30 000 增加到 50 000 时,CodePtr 的两个模型比 Hybrid-DeepCom 下降幅度更大的
现象,CodePtr 为了引入指针生成网络,增加了一个编码器用于接受未分解的源代码,表 5 统计了训练集上分解前
的源代码词库中单词出现次数的分布情况.从表中可以得知,在词库大小为 50 000 的情况下,大量出现次数为
5~10 次的单词被添加到了词库中,这些单词在大小为 476 654 的训练集上出现的次数极少,其词向量很少被训
练和更新,因此可以称得上是噪声,引入大量的噪声单词对 CodePtr 造成了较大的影响.
Table 5 Statistics of occurrences of words in source vocabulary
表 5 分解前源代码词库中单词出现次数统计
词库大小 出现次数 单词数量 占比(%) 累计占比(%) 剩余
1 203 581 42.71 42.71 273 073
2 98 266 20.62 63.33 174 807
3 45 974 9.65 72.97 128 833
476 654 4 31 737 6.66 79.63 97 096
5~10 56 526 11.86 91.49 40 570
11~100 35 975 7.55 99.04 4 595
101~ 4 595 42.27 100 0
4 总结与展望
本文针对当前表现最佳模型的两个输入不完全匹配的不足,通过增加一个输入对其进行了改进,首先提出
了无指针生成网络的 CodePtr.然后针对现有的代码注释自动生成方法普遍存在的局限性,即注释中无法生成
OOV 词的问题,引入了指针生成网络,提出了 CodePtr.实验结果表明,无指针生成网络的 CodePtr 在大多数情况
下的性能优于 Hybrid-DeepCom,而 CodePtr 在实验中的所有情况都优于 Hybrid-DeepCom,在大多数情况下优于
无指针生成网络的 CodePtr.
在未来的工作中,我们试图解决在第 3.4.4 节中提出的较大词库大小情况下模型得分下降的问题.此外,考
虑到驼峰分解前后的源代码序列存在较多冗余,我们将尝试把两个输入融合,在减少冗余的同时也可以加快模
型的训练速度.另外,针对第 3.4.3 节中提到的输出序列中出现重复的问题,可以考虑使用文献[46,47]中的方法加
以解决.
References:
[1] Tenny T. Procedures and comments vs. the banker’s algorithm. ACM SIGCSE Bulletin, 1985,17(3):44–53. [doi: 10.1145/382208.
382523]
[2] Tashtoush Y, Odat Z, Alsmadi IM, Yatim M. Impact of programming features on code readability. Int’l Journal of Software
Engineering and Its Applications, 2013,7(6):441–458. [doi: 10.14257/ijseia.2013.7.6.38]
[3] Xia X, Bao L, Lo D, Xing Z, Hassan AE, Li S. Measuring program comprehension: A large-scale field study with professionals.
IEEE Trans. on Software Engineering, 2017,44(10):951–976. [doi: 10.1109/TSE.2017.2734091]
[4] Fluri B, Wursch M, Gall HC. Do code and comments co-evolve? on the relation between source code and comment changes. In:
Proc. of the 14th Working Conf. on Reverse Engineering (WCRE 2007). IEEE, 2007. 70–79. [doi: 10.1109/WCRE.2007.21]
[5] Song X, Sun H, Wang X, Yan J. A survey of automatic generation of source code comments: Algorithms and techniques. IEEE
Access, 2019,7:111411–111428. [doi: 10.1109/ACCESS.2019.2931579]
[6] Hu X, Li G, Xia X, Lo D, Jin Z. Deep code comment generation with hybrid lexical and syntactical information. Empirical
Software Engineering, 2019, 1–39. [doi: 10.1007/s10664-019-09730-9]
[7] Marcus A, Maletic JI. Recovering documentation-to-source-code traceability links using latent semantic indexing. In: Proc. of the
25th Int’l Conf. on Software Engineering. IEEE, 2003. 125–135. [doi: 10.1109/ICSE.2003.1201194]
[8] Kuhn A, Ducasse S, Gírba T. Semantic clustering: Identifying topics in source code. Information and Software Technology, 2007,
49(3):230–243. [doi: 10.1016/j.infsof.2006.10.017]
[9] Haiduc S, Aponte J, Moreno L, Marcus A. On the use of automated text summarization techniques for summarizing source code. In:
Proc. of the 17th Working Conf. on Reverse Engineering. IEEE, 2010. 35–44. [doi: 10.1109/WCRE.2010.13]