APP下载
报价宝  ›  科技  › 

输入一段问题 自动给你推荐程式码 Facebook用自然语言搜寻程式码

报价宝 来源:baojiabao.com 发布时间:2019-09-30 05:51:00 10月11日更新
报价宝综合消息输入一段问题 自动给你推荐程式码 Facebook用自然语言搜寻程式码

晓查 发自 凹非寺

量子位 报道 | 公众号 QbitAI

“如何关闭或隐藏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相比,有了非常大的提升。

我们将NCS和UNIF与Stack Overflow评估资料集进行比较,证实UNIF改善了大大超过NCS回答的问题数量。

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

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

public void showHomeScreenDialog(View view) {

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

startActivity(nextScreen);

}

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

public void clickExit(MenuItem item) {

Intent intent=new Intent(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

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 手机价格 小米手机价格 红米手机价格 耳机价格 降噪耳机价格