项目简介
前人研究
复旦博士生提出了这个问题,并提取特征使用 RankNet——一种 Pair-to-Pair 的排序框架获得结果。
项目目标
根据 vulnerability 以及 commit 的数据,找到修复 vulnerability 的 code commit 数据。
评价指标
通过 Top K 的 Recall 和 Manual Effort 来进行评价效果。
项目经过
3 月初,跟随鲍老师开始着手项目。
鲍老师发了几篇漏洞相关的文章让我快速了解情况。我将文章都看了一下,简单了解。
谷歌学术上搜索数据集出现失误,未能搜索到数据集。
3-4 月,由于某篇论文中采用 Snyk 漏洞数据库,因此对该数据库进行爬虫,收集数据。
期间学习 gitPython 库的使用,操作 git 仓库。
数据收集后,通过正则表达式进行 commit 链接提取。
4-5 月,收集 vulnerability 和 commit 之间的特征。此时,复旦论文出现,打击了自己的自信心。
中间尝试提取版本号的特征,检查每个仓库的版本信息&手动标注漏洞补丁的版本号,对比漏洞描述中版本号,未能发现有关联性。
5 月,小导师表示 5 月末不再进行项目,未能兑现。
6-7 月,使用 pandas 库提取特征。由于服务器内存小+未能想到批处理的方法,因此导致服务器经常崩掉。时间长,导致自己对项目内容感到焦虑,对完成项目&导师产生感到抑郁。
7 月,小导师表示暑假结束不再进行项目,未能兑现。研二时允许日常实习,未能兑现。
7 月,根据鲍老师建议,采取通过文本处理的方法提取文本信息。采用 Bert 模型提取语义,最初为输出是否匹配的方法,后来改成直接输出语义向量的方式。
但是这里实现时存在一定的问题,因为我是用全部的数据进行训练并生成语义向量,导致这里存在着数据泄露的问题。
7 月中下旬,鲍老师通知我将论文投递到 saner 期刊上。后续写论文+跑实验。
写论文写了大约一个月,谷歌翻译+deepl 翻译+grammarly 修正。最后还是被小导师说,太像机翻了。
10 月开始,鲍老师改论文,提出多个当初实验时没有思考过的问题。例如,为什么选择 snyk 数据库,为什么使用这几种模型等等。并且最好有研究依据。并要求补充多次实验。
10 月 21 日,实在不想做实验了,给小导师&鲍老师表示抱歉,结束项目和论文。
项目反思
结果如何?
模型最后数据泄露,导致最终结果非常高。
PatchSout 模型无法复现。
导致结果不好的原因?
客观原因:
主观原因:
做的好的地方?
虽然非常不想做,但还是坚持了半年。
做的不好的地方 or 以后改进的地方?
接触一个新领域,未能提前询问前辈&老师们该如何在新的领域学习,最好问的比较具体些。
在新领域,每一个步骤结束时,向导师告知如何进行的,询问是否达到预期目标,有无不当之处,该怎么进行改进。
多写日志,具体些,并给导师查看。自己表达不好时,导师通过日志也可以了解情况。
平时注意学习与娱乐放松结合,不可过度放松,也不可以过度专注,保持身心健康。
当心态出现问题时,更多的与前辈&同级&导师进行有效的沟通。
如果存在很难的情况,如果 mentor 比较和蔼,能拖就拖,让 mentor 感觉当前真的不适合研究下去。(胡文康方法)
项目中代码方面出现了哪些失误?
模型最后数据泄露,导致最终结果非常高。
PatchSout 模型无法复现。
作为一名项目创新和实现者,我应该怎么做?
了解项目情况,询问正常的开展项目的过程,步骤具体化。
作为一名项目导师,我应该怎么做?
多和学生进行沟通,询问学生进展,询问学生当前是否出现困难。