您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
hso是什么意思(hso是什么意思梗)
代码,向量,单词hso是什么意思(hso是什么意思梗)
发布时间:2020-12-06加入收藏来源:互联网点击:
-
搜索检索
搜索查询用自然语言语句进行表示,如「关闭/隐藏软键盘」或「如何创建没有标题的对话框」。我们采用与源代码相同的方式对查询进行标记,并使用相同的 fastText 嵌入矩阵 T,我们对单词的向量表征进行简单平均来为查询语句创建文档嵌入;不含查询单词的词会被删除。然后,我们使用标准的相似度搜索算法 FAISS 来找到距离查询余弦距离最近的文档向量,并返回 topn 结果(加上一些后处理的排序,该文有进一步解释,论文链接:https://dl.acm.org/citation.cfm?id=3211353)。
这两个方法体和查询被映射到同一向量空间中相邻的点。这意味着查询和这两个方法体在语义上是相似的,并且与查询相关。
结果我们使用 Stack Overflow 问题评估了 NCS 的能,用标题进行查询,回答中的代码片段作为所需的代码答案。给定一个查询,测量我们的模型是否能够从 GitHub 存储库的集合中检索并在前 1、5 和 10 个结果中得出正确答案(分别在下面的表中标记为 Answered@1、5、10)。我们还给出了平均倒数秩(MRR),以衡量 NCS 能够在第几个结果中正确地回答问题。我们将在下文更详细地解释实验设置。在我们创建的 Stack Overflow 评估数据集里的 287 个问题中,NCS 在前 10 个结果中正确地回答了 175 个问题;这相当于整个数据集的 60% 以上。我们还将 NCS 的表现与传统的 IR 技术 BM25 进行了比较。如表所示,NCS 优于 BM25。
NCS 表现良好的一个问题例子是「从 APP 中启动 Android 市场」,其中 NCS 返回的第一个结果如下:
private void showMarketAppIn { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + BuildConfig.APPLICATION_ID))); } catch (ActivityNotFoundException e) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID)));(该代码片段来自 Github 上公开可用的代码,在 MIT 许可下共享使用,链接:https://github.com/mobulum/android-receipts/blob/master/app/src/main/java/tech/receipts/ui/activity/MainActivity.java?fbclid=IwAR3so6yP5Tr0NkwBakiS_kioKckldh_Z97IpxmDy8H8O2scBfKKAK31MHhs#L388-L395)
UNIF:探索监督方法NCS 的关键在于它使用了单词嵌入。因为 NCS 是一个无监督的模型,它有几个显著的优点:它可以通过搜索语料库直接学习,并且可以快速、方便地进行训练。NCS 假定查询中的单词与从源代码中提取的单词来自同一域,因为查询和代码片段都映射到同一向量空间。然而,情况并非总是如此。例如,查询「Get free space on internal memory」中没有任何单词出现在下面的代码段中。我们想要的是将查询词「free space」映射到代码中的「available」一词。
File path = Environment.getDataDirectory;StatFs stat = new StatFs(path.getPath);long blockSize = stat.getBlockSize;long availableBlocks = stat.getAvailableBlocks;return Formatter.formatFileSize(this, availableBlocks * blockSize);(该代码片段取自 Stack Overflow 上的公开可用代码,在 CC-By-SA 3.0 许可下共享使用,链接:https://stackoverflow.com/questions/4595334/get-free-space-on-internal-memory?fbclid=IwAR1wMoa6js7pSDmzuXZERspW4FUqdwY6tEtmbvOlN8hVFbu8OAAWCa2yDdE)
从 14,005 个 Stack Overflow 帖子的数据集中,我们分析了查询中的单词与源代码中的单词的重叠情形。我们发现,在查询中的 13,972 个单独单词中,只有不到一半(6,072 个单词)同时存在于源代码域中。这表明,如果查询包含源代码中不存在的单词,那么我们的模型将不能进行有效地正确检索,因为我们删除了与查询词无关的单词。这种观察促使我们探索监督学习,将查询中的单词映射到源代码中的单词。
我们决定使用 UNIF(NCS 技术的监督最小扩展)进行实验,以弥补自然语言单词和源代码单词之间的差距。在该模型中,我们使用监督学习方法对嵌入矩阵 T 进行修改,生成两个分别用于代码和查询标记的嵌入矩阵和。我们还用一种学习的注意力机制权重方案替换了代码标记嵌入的 TF-IDF 权重方案。
UNIF 模型如何工作我们对 UNIF 进行与 NCS 相同的(c,q)数据点集合的训练,其中 c 和 q 分别表示代码和查询符号(有关此数据集的详细信息,请参见下面的部分)。模型体系结构可描述如下:令 和 为两个嵌入矩阵,分别将每个单词从自然语言描述和代码符号映射到一个长度为 d 的向量(为查询词汇语料库,为代码词汇语料库)。使用相同的初始权重 T 初始化这两个矩阵,并在训练期间分别进行修正(与 fastText 对应)。为了将每组代码符号向量合成一个文档向量,我们使用注意力机制来进行加权平均计算。注意力权重是训练中学习到的一个 d 维向量,与 TF-IDF 对应。给定一组代码字嵌入向量 {e1,…,en},每一个 ei 的注意力权重 ai 计算如下:
然后将文档向量计算为注意力权重加权后的单词嵌入向量之和:
为了创建查询文档向量,我们计算查询词嵌入的简单平均值,类似于 NCS 中的方法。在经典的反向传播算法中,训练过程中我们对参数、和进行学习。
UNIF网络
检索的工作方式与 NCS 的方式相同。对于给定的查询,我们使用上述方法将其表示为文档向量,并使用 FAISS 查找与查询余弦距离最近的文档向量。(原则上,UNIF 也会像 NCS 一样从后处理排名中受益。)
与 NCS 进行结果比较我们基于 Stack Overflow 评估数据集将 NCS 和 UNIF 进行比较,看看模型是否能在前 1、5 和 10 个结果中正确地回答查询,以及相应的 MRR 评分。下表显示,相比 NCS,UNIF 显著提高了回答的问题数量。
这突出表明,如果能够访问理想的训练语料库,监督技术可以提供令人印象深刻的搜索能。例如,使用搜索查询「如何退出应用程序并显示主屏幕?」,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;}(第一个代码片段来自于 GitHub 上的公共可用代码,在 Apache 2.0 许可下共享使用,链接:https://github.com/selendroid/selendroid/blob/master/selendroid-test-app/src/main/java/io/selendroid/testapp/WebViewActivity.java?fbclid=IwAR222brn93ZC3KK8kcTJhDhNMv8hc6JYSxv6KfQSSaklcm5WtLvmsc0uBQ0#L111-L114。
第二个来自于 GitHub,在 MIT 许可下共享使用,链接:https://github.com/JosielSantos/android-metronome/blob/master/app/src/main/java/com/josantos/metronome/ui/activity/Base.java?fbclid=IwAR2xhso5v0vCAQBcNJ0DDg1DZLVdtC1hf5doVqwC1ib_rTB5bm38VSzLomo#L28-L36)
另一个例子是查询「如何获得 ActionBar 的高度?」NCS 返回结果:
public int getActionBarHeight { return mActionBarHeight;}UNIF 返回的相关代码片段如下:
public static int getActionBarHeightPixel(Context context) { TypedValue tv = new TypedValue; if (context.getTheme.resolveAttribute(android.R.attr.actionBarSize, tv, true)) { return TypedValue.complexToDimensionPixelSize(tv.data, context.getResources.getDisplayMetrics); } else if (context.getTheme.resolveAttribute(R.attr.actionBarSize, tv, true)) { return TypedValue.complexToDimensionPixelSize(tv.data, context.getResources.getDisplayMetrics); } else { return 0; }}下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |