宁德生活圈

网站首页 科技 > 正文

脸书发布人工智能代码搜索数据集

2021-09-15 14:56:34 科技 来源:
导读 脸书人工智能发布了一个包含编码问题和代码片段答案的数据集,用于评估基于人工智能的自然语言代码搜索系统。该版本还包括脸书自己的几个代

脸书人工智能发布了一个包含编码问题和代码片段答案的数据集,用于评估基于人工智能的自然语言代码搜索系统。该版本还包括脸书自己的几个代码搜索模型的基准测试结果,以及来自24,000个GitHub存储库的400多万个Java方法的训练语料库。

Facebook发布AI代码搜索数据集

在arXiv发表的一篇论文中,研究人员描述了他们的数据收集技术。训练语料库是从最流行的GitHub安卓代码库中收集的,按照星星的数量排序。解析存储库中的每个Java文件,以识别每个方法。脸书将语料库用于训练码搜索系统的研究。为了创建评估数据集,他们从Stack Overflow的问答数据转储开始,只选择了既有“Java”又有“Android”的问题。研究人员说,“其中,他们只保留投票问题的答案,这些答案也与训练数据语料库中确定的方法相匹配。结果518个问题被人工过滤成最终的287个问题。研究人员说:

我们的数据集不仅是目前Java可用的最大数据集,也是唯一以自动化(一致)方式验证Stack Overflow真实答案的数据集。

Facebook发布AI代码搜索数据集

脸书最近发表了几篇关于神经代码搜索的论文,神经代码搜索是一种机器学习技术,用于训练神经网络来回答“如何”编码的问题。软件开发人员通常使用Stack Overflow来学习如何解决特定的编码问题,例如,如何解决Android应用程序中的错误。但是,当处理使用专有API或不太常见的编程语言的代码时,这不是一个选项。在这种情况下,在程序员自己的组织之外很少有(或者没有)专家。相反,脸书和其他公司探索了使用源代码本身作为训练数据来产生能够回答编码问题的自然语言处理(NLP)系统的想法。

去年,脸书发表了一篇关于无监督学习方法的论文,名为神经代码搜索(NCS),该方法是通过从GitHub收集的数据进行训练的。这项技术从源代码中提取单词,并学习将每个单词映射到高维空间中向量的嵌入。嵌入通常具有向量的性质,向量在向量空间中彼此“接近”,表示意义相似的词,词与词之间的关系可以用向量算术来表示。一个例子是在维基百科上训练的word2vec模型,给出方向表达式“巴黎-法国西班牙”时会返回“马德里”。

Facebook发布AI代码搜索数据集

学习嵌入后,利用“词包”模型将语料库中的每个Java方法转化为嵌入空间中的一个向量。代码中的每个单词通过嵌入被转换成一个向量,向量的加权和被分配给该方法作为它的索引。这将每个Java方法映射到嵌入空间中的一个点。为了回答编码问题,通过在查询中嵌入每个单词并生成加权和,问题可以类似地映射到嵌入空间中的某个点。这个问题的“答案”是Java方法,它的索引最接近这个点。关键思想是查询和代码都使用相同的嵌入,训练不需要输入数据有任何问题。它只从源代码中学习。

这种技术的一个缺点是它不能学习源代码中没有的单词的嵌入。脸书的研究人员发现,在堆栈溢出上,不到一半的有问题的单词包含在源代码中。这促使研究人员通过监督学习来扩展NCS,“以弥合自然语言单词和源代码单词之间的差距”。产生的系统称为嵌入式统一(embedded UniversitY,unif),它学习查询词的单独嵌入。在这次培训中,团队使用类似于收集基准数据集的过程,从堆栈溢出中提取了一组问题标题和代码段。训练数据集包含451k个问答对,但没有一个在基准测试中。在根据基准进行评估时,联合国系统培训这一数据的表现略好于国家信息中心。两个系统都以大约三分之一的时间作为最高结果返回“正确”答案,并以一半的时间返回“前五”结果的“正确”答案。

郑重声明:本文版权归原作者所有。转载文章只是为了传播更多的信息。如果作者信息标注有误,请第一时间联系我们修改或删除。谢谢你。


免责声明: 本文由用户上传,如有侵权请联系删除!


标签: