您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
hso是什么意思(hso是什么意思梗)
代码,向量,单词hso是什么意思(hso是什么意思梗)
发布时间:2020-12-06加入收藏来源:互联网点击:
很多朋友想了解关于hso是什么意思的一些资料信息,下面是小编整理的与hso是什么意思相关的内容分享给大家,一起来看看吧。
开发者们的福利~
编译:xyhncepu
编辑:Pita
AI 科技评论按:日前,Facebook 提出了新型代码搜索工具——神经代码搜索(NCS),能够基于机器学习直接使用自然语言处理(NLP)和信息检索(IR)技术处理源代码文本,可大大提高代码检索效率。Facebook 在官网博客上对这项新成果进行了介绍,AI 科技评论编译如下。
当工程师能够很容易地找到代码示例来指导他们完成特定的编码任务时,他们的工作状态最佳。对于一些问题——例如,「如何通过编程关闭或隐藏 Android 软键盘?」——相关信息随时可以从像 Stack Overflow 这样的常用资源中获得。但是,专有代码或 APIs(或用不太常见的编程语言编写的代码)的特定问题需要不同的解决方案,而论坛往往也不会探讨这些问题。
为了满足这一需求,我们开发了一个代码搜索工具,它能够直接使用自然语言处理(NLP)和信息检索(IR)技术处理源代码文本。这个工具叫做神经代码搜索(NCS),它接收自然语言作为查询,并返回直接从代码库中检索到的相关代码片段。而它的前提是有可使用的大型代码库,从而有可能搜索到与开发者的查询相关的代码片段。在本文中,我们将介绍两种模型来完成这一任务:
NCS 是一种结合 NLP 和 IR 技术的无监督模型。查看链接:https://dl.acm.org/citation.cfm?id=3211353fbclid=IwAR2kUqUhkBP6tRlMJwvCWA-6vWWKccnckXeybOYEZpT1OpUZlIJ6q1l7SCA
UNIF 是 NCS 的一个扩展,它使用有监督的神经网络模型来提升使用良好监督数据训练时的能。查看链接:https://arxiv.org/pdf/1905.03813.pdf?fbclid=IwAR3B0S-IMkHnhzBvCrnTaRu827HzjPJVMIxKDFghNJ8XKXDsGHcElX96HX0
利用开源 Facebook AI 工具(包括 fastText、FAISS 和 PyTorch),NCS 和 UNIF 均将自然语言查询和代码片段表示为向量,然后训练一个网络,使语义相似的代码片段和查询内容的向量表征在向量空间中紧密结合。通过这些模型,我们可以直接从代码库中找到代码片段,从而有效地回答工程师的问题。为了评估 NCS 和 UNIF,我们使用了在 Stack Overflow 上新创建的公共查询数据集。我们的模型可以准确的回答这个数据集中的问题,例如:
如何关闭/隐藏 Android 软键盘?
如何在 Android 中把位图转换成可绘制的?
如何删除整个文件夹和内容?
如何处理活动中的后退按钮?
NCS 的表现显示,相对简单的方法在源代码领域可以表现良好。UNIF 的表现显示,当有标记的数据可用时,一个简单的有监督学习方法可以带来显著的额外收益。本项目与其他 Facebook 构建的系统(如 Aroma 和 Getafix)一起,能为我们的工程师提供了一个广泛的、不断增长的 基于机器学习 工具包,帮助他们更有效地编写和管理代码。
NCS 如何使用嵌入NCS 模型通过使用嵌入来捕获程序语义(在本例中是代码段的意思),即当适当计算连续向量表征时,能够获得将语义相似的实体彼此靠近放置在向量空间中的期望属。在下面的示例中,有两个不同的方法体,它们都与关闭或隐藏 Android 软键盘(上面的第一个问题)有关。因为它们具有相似的语义意思,即使它们没有完全相同的代码行,它们也由向量空间中彼此接近的点表示。
此图显示了相似的代码段在向量空间中是如何聚集的。
(此图显示的公共代码来源于 Github(https://github.com/kabouzeid/Phonograph/blob/master/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java#L162-L167,https://github.com/RooyeKhat-Media/iGap-Android/blob/master/app/src/main/java/net/iGap/module/SoftKeyboard.java#L78-L83),在 GNU 通用公共许可证下可共享使用。
我们使用这个概念来构建 NCS 模型。在高层次上,模型生成过程中的每个代码片段都以方法级粒度嵌入到向量空间中。一旦模型建立完成,给定的查询将映射到相同的向量空间,并使用向量距离来评估代码片段与查询的相关。本节将更详细地描述模型生成和搜索检索管道,如下图所示。
此图显示了 NCS 的整体模型生成和搜索检索过程。
模型生成要生成模型,NCS 必须提取单词,构建单词嵌入,然后构建文档嵌入。(这里的「文档」参考了一种方法体。)
提取单词NCS 从源代码中提取单词并标记它们以生成单词的线序列。
(这里显示的示例数据来自 GitHub 上公开可用的代码,这些代码在 Apache 2.0 许可下共享使用,地址为 :https://github.com/sockeqwe/SecureBitcoinWallet/blob/master/app/src/main/java/de/tum/in/securebitcoinwallet/util/DimensUtils.java#L33-L36)
为了生成表示方法体的向量,我们将源代码视为文本,并从以下语法类别中提取:方法名、方法调用、枚举、字符串文本和注释。然后,我们根据标准的英语惯例(如空格、标点符号)和与代码相关的标点符号(如蛇形命名法和驼峰命名法)对其进行标记。例如,对于上图中的方法体「pxToDp」,源代码可以被视为单词的集合:「converts pixelin dp px to dp get resources get display metrics」。
对于语料库中的每个方法体,我们可以用这种方式标记源代码,并学习每个单词的嵌入。在此步骤之后,我们为每个方法体提取的单词列表类似于自然语言文档。
构建单词嵌入我们使用 fastText 为词汇库中的所有单词构建单词嵌入。FastText 使用双层密集神经网络计算向量表征,该神经网络可以在大型语料库上进行无监督训练。特别是,我们使用 skip-gram 模型,其中目标符号嵌入在固定窗口大小内被用于预测上下文符号的嵌入。在上面的例子中,给定的嵌入符号为「dp」,窗口大小为 2,skip-gram 模型可以学习预测符号「pixel」、「In」、「px」和「to」的嵌入。我们的目标是学习一个嵌入矩阵 ,其中 || 为语料库大小,d 为单词嵌入维数,T 中的行是中单词的嵌入。
在这个矩阵中,如果相应的单词经常出现在相似的上下文中,那么两个向量表征就会很接近。我们使用与此相反的语句来帮助定义语义关系:向量越近的单词应该具有相关的含义。这在 NLP 文献(相关文献链接:https://www.tandfonline.com/doi/abs/10.1080/00437956.1954.11659520?fbclid=IwAR1xVI93AjRCAUKVRIr0g4PqzHi1ehZwwqDVdjumfshNVEEy14RK2e_5cAY)中被称为分布假设,我们认为同样的概念也适用于源文本。
构建文档嵌入下一步是使用方法体中出现的单词来表达方法体的总体意图。为此,我们对方法体中单词集的单词嵌入向量取加权平均值。我们称之为文档嵌入。
上式中,d 是代表方法体的单词组是单词 w 的 fastText 单词嵌入,C 是包含所有文档的语料库,u 是一个归一化函数。
我们使用词频-逆本文频率函数(TF-IDF),它为给定文档中的给定单词分配权重。它的目标是突出文档中最具代表的单词——如果一个单词经常出现在文档中,它的权重就会更高,但是如果它出现在语料库中过多的文档里,它也会受到惩罚。
在这一步的末尾,我们有了语料库中每个方法体到其文档向量表征的索引,并且模型生成已经完成。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |