当前位置:网站首页 >> 养生

笛声用自然语言从GitHub搜代码跳过论坛提

时间:2020-09-16 10:04:38 来源:互联网 阅读:0次
用自然语言从GitHub搜代码,跳过论坛发问环节,来自Facebook新研究

“如何关闭或隐藏Android软键盘?”

如果你是个Android入门开发者,去Stack Overflow论坛去寻觅上非常热门的Android开发问题,很快会有他人贴出一段代码。

但是有很多冷门问题,通常并不会在论坛中讨论,如果能在广阔的GitHub代码库中快速找到答案就好了。

为此,Facebook开发了一种代码搜索工具,可将自然语言处理(NLP)和信息检索(IR)技术直接应用于源代码文本。

神经代码搜索(NCS),它接受自然语言情势的查询,并直接从GitHub库中检索返回相干代码片断。

除NCS以外,另外还有一种用监督数据提高网络性能的UNIF。

小试牛刀

Facebook使用Stack Overflow上Android开发的问题评估NCS的性能,看看模型是否是能够从GitHub中找到正确的答案。

在Stack Overflow评估数据集中的287个问题中,NCS的前10个查询结果能够正确回答175个问题,占全部数据集的60%以上。与传统的信息检索技术BM25相比,有了非常大的提升。

而他的父亲越战归来后一直无法摆脱毒品我们将NC只要球员满足一定的要求即可激活相应的技能S和UNIF与Stack Overflow评估数据集进行比较,证实UNIF改善了大大超过NCS回答的问题数量。

结果显示监督技术在取得理想的训练语料库时可以提供的更优的搜索性能。

例如,搜索查询“如何退出应用程序并显示主屏幕”这个问题,NCS返回:

publicvoidshowHomeScreenDialog(View view){

Intent nextScreen = newIntent(getApplicationContext, HomeScreenActivity.class);

startActivity(nextScreen);

}

而UNIF提供了更适合的代码段:

publicvoidclickExit(MenuItem item){

Intent intent=newIntent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_HOME);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

metr.stop;

startActivity(intent);

finish;

}

原理

Facebook利用了开源AI工具fastText、FAISS和PyTorch,NCS和UNIF将自然语言查询和代码片断表示为向量,然后训练网络,使得语义类似的代码片断和查询的向量表示紧密相连在向量空间。

NCS

NCS模型通过使用嵌入来获得程序语义,在向量空间中语义相似的实体具有彼此接近的期望属性。在下面的例子里,有两个不同的代码,它们都与关闭或隐藏Android键盘有关。由于它们具有相似的语义含义,即便它们代码不完全相同,再向量空间中的距离也很近。

Facebook使用这个概念来构建NCS模型。在高级别中,模型生成的每一个代码片段以方法级粒度嵌入到向量空间中。构建模型后,某个查询将映照到同一向量空间,向量距离用于估计代码段与查询的相关性。

要生成模型,NCS必须提取单词,构建单词嵌入,然后构建文档嵌入。

为了生成表示代码的向量,Facebook将源代码视为文本,并从以下语法种别中提取:方法名称,方法调用,枚举,字符串文字和注释。然后我们根据标准英语惯例(例如空格,标点符号)和与代码相干的标点符号对其进行标记。

例如,对上图中的方法体“pxToDp”,可以将源代码视为单词:“将dp px中的px转换为dp取得资源、取得显示指标”。

fastText为辞汇语料库中的所有单词构建单词嵌入。fastText使用两层密集神经网络计算向量表示,该网络可以在大型语料库上无人监督地进行训练。

而UNIF是NCS的扩大,当有监督数据可用于训练时,可以用来提高性能。

在GitHub上挑选26,109个的Android项目,直接在搜索语料库上训练我们的无监督模型NCS。这也成为NCS返回代码片断的搜索语料库。

至于UNIF模型,我Facebook提取Stack Overflow论坛中问题标题和代码片断来取得数据集。在使用各种启发式过滤问题后,终究得到451,000个训练样本。

https://arxiv.org/pdf/1905.03813.pdf

作者系网易新闻·网易号“各有态度”签约作者

相关文章

一周热门

热点排行

热门精选

友情链接:
媒体合作:

Copyright (c) 2011 八零CMS 版权所有 备案号:苏ICP备17012668号-2

网站地图