ASE code search -- 第二次结对编程作业
baseline 复现
baseline模型
我们再这次实验中选择了deep code search方法作为了解并复现。下面介绍一下这两种方法
deep code search
模型的结构在论文中已经介绍的非常清楚了,有兴趣的同学可以仔细看一下论文:
模型分为两部分
- code encoder
- description encoder
将代码和描述编码到同一线性空间
code encoder: 用于给出代码的向量表示。代码可以表示三部分方法名称,api序列和tokens。方法名称和api拥有前后关联顺序,使用word embedding + RNN+maxpooling得到。而tokens实际上不存在上下文关系,直接使用word embedding + max pooling得到。
description encoder:用于给出自然语言的向量表示,使用RNN+ pooling 表示
优缺点分析
优点: 有效的提取了代码和描述的语义特征,其中代码的特征由多个方面组成比较完备 缺点: 使用单向RNN作为特征提取有局限性,代码不像单纯的自然语言处理里用RNN就能抽取较好的特征
效果
我和队友复现了CODEnn模型,具体的复现过程loss变化如下 其中衡量复现效果的四个metric的变化过程如下: 我们把batch_size设置为64,并且结合一些测试训练的结果把learning rate设置为decay的形式。最终的复现结果如下表所示,和文档里给出的最佳模型作比较在test set上性能几乎一致。
datasets | acc@top5 | acc@top10 |
---|---|---|
validation set(pool=200) | 0.780680 | 0.860476 |
validation set(pool=800) | 0.600521 | 0.704167 |
test set(pool=200) | 0.779558 | 0.861565 |
test set(pool=800) | 0.595174 | 0.700799 |
前端展示部分
值得一提的是,我们写了点前端代码来方便演示模型的最终效果。我们拿一些例子跑了一下,有的时候返回的结果还是挺不错的,但是对于数据集里没有覆盖到的代码返回结果就很凌乱。比如论文中有一个例子,”get the content of an input stream as a string using a specified character encoding“,测试结果如下:
再比如可以测试一下简单需求”load json":
但是还是存在大量的搜索是不大ok的,比如“make hex string into integers"
提出改进方法
可以尝试将RNN替换为进来nlp领域比较常用的multi-head self-attention模型,或者multi-head self-attention。这么做有两个好处:
- RNN是串行的神经网络,这导致他在训练时的速度远远慢于别的网络结构
- multi-head self-attention 和 multi-head self-attention不仅计算速度快,而且相较于Conv1D可以更好地捕获长距离单词之间的联系
bert也可以考虑使用在description encoder部分
我注意到目前的CodeNN训练是没有使用与训练词向量的,这会导致模型的收敛速度较慢:800 epoch。可以考虑尝试用glove或者word2vec等预训练词向量,或者先在语料库上训练出自己的词向量,然后在此基础上进行finetune.
评价
我的队友是王皓,他是一个非常善于沟通且搜索能力很强的同学。在我们结对编程中,对原始数据集产生了很大疑惑的时候,王皓同学积极上网搜索,并找到了一个极为匹配这个任务的github比赛(可惜最后没时间做了)。虽然我们俩在这段时间都比较忙,但是我们依然很好的沟通和协调了各自的时间,并且合理减少了自己能力范围内的任务量。遗憾的地方是没有来得及实现我们的idea,如果能抽出时间我们很愿意做这个工作。
ASE code search -- 第二次结对编程作业的更多相关文章
- 2017-2018-2 1723《程序设计与数据结构》第九周作业 & 第二周结对编程 总结
作业地址 第九次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1878 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- 【BUAA软工】结对编程作业
项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...
- 11061160_11061151_Pair Project: Elevator Scheduler软件工程结对编程作业总结
软件工程结对编程作业总结 11061160 顾泽鹏 11061151 庞梦劼 一.关于结对编程 这次的软工任务既不是单打独斗的个人任务,也不是集思广益的团队项目,而是人数为两人的结对编程.两个人合 ...
- UI-12组结对编程作业总结
UI-12组结对编程作业总结 源码Github地址 https://github.com/tilmto/TILMTO/tree/master/Arithmetic 作业摘要 本次结对编程作业分为以下两 ...
- ASE第二次结对编程——Code Search
复现极限模型 codenn 原理 其原理大致是将代码特征映射到一个向量,再将描述文字也映射到一个向量,将其cos距离作为loss训练. 对于代码特征,原论文提取了函数名.调用API序列和token集: ...
- 结对编程作业——四则运算GUI程序
毛忠庆 201421122088 赵嘉楠 201421122065 源代码存放位置:https://gitee.com/ouwen0819/SiZeYunSuan.git 题目描述 使用 -n 参数控 ...
- 结对编程作业(python实现)
一.Github项目地址:https://github.com/asswecanfat/git_place/tree/master/oper_make 二.PSP2.1表格: PSP2.1 Perso ...
- C#【结对编程作业】小学数学习题助手
一.软件成品展示 软件本体下载(包括程序及其更新日志,源码工程包,UML图,API接口文档,算法介绍文档,算式计算excel实例,浅查重程序) 链接: http://pan.baidu.com/s/1 ...
- ASE Code Search
重现基线模型 Hamel's model 基线模型原理 如何实现semantic search?在已有数据库的基础上,衡量一个句子和每段代码的相关性再进行排序,选出最优代码片段即可实现一个通用的cod ...
随机推荐
- 第二节 RabbitMQ配置
原文:第二节 RabbitMQ配置 版权声明:未经本人同意,不得转载该文章,谢谢 https://blog.csdn.net/phocus1/article/details/87281553 1.配置 ...
- ajax+node实现图片上传
利用formData实现ajax上传图片后,保存图片到指定收藏夹,然后展示新重命名后的图片 html: <input type="file" id="uploadI ...
- jQuery效果-隐藏与显示 小方块的移除
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- Es学习第五课, 分词器介绍和中文分词器配置
上课我们介绍了倒排索引,在里面提到了分词的概念,分词器就是用来分词的. 分词器是ES中专门处理分词的组件,英文为Analyzer,定义为:从一串文本中切分出一个一个的词条,并对每个词条进行标准化.它由 ...
- Quartz.Net 任务调度之简单任务(1)
本文github链接 https://github.com/sunshuaize/cnBlogDemos/tree/master/Quartz.Net%20%E4%BB%BB%E5%8A%A1%E8% ...
- 【leetcode】924.Minimize Malware Spread
题目如下: In a network of nodes, each node i is directly connected to another node j if and only if grap ...
- python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象
今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...
- 洛谷 P2441 角色属性树
题目描述 绪萌同人社是一个有趣的组织,该组织结构是一个树形结构.有一个社长,直接下属一些副社长.每个副社长又直接下属一些部长……. 每个成员都有一个萌点的属性,萌点属性是由一些质数的萌元素乘积构成(例 ...
- Vue项目中添加锁屏功能
0. 直接上 预览链接 Vue项目中添加锁屏功能 1. 实现思路 ( 1 ) 设置锁屏密码 ( 2 ) 密码存localStorage (本项目已经封装h5的sessionStorage和localS ...
- Weblogic console控制台密码更改后导致重启服务失败
weblogic版本10.3.3.0 更改控制台密码后,服务重启失败,报错如下: ----------------------------------------------------------- ...