如何关闭或隐藏Android软键盘?
如果你是一个Android开发初学者,在Stack Overflow论坛上查找热门的Android开发问题时,很快就能找到别人分享的一段代码。
不过,很多冷门问题往往不会在论坛里被广泛讨论。如果能在浩瀚的GitHub代码库中快速找到答案就好了。
为此,Facebook开发了一种名为“神经代码搜索”(NCS)的工具,它结合了自然语言处理(NLP)和信息检索(IR)技术,直接应用于源代码文本。此外,还有一个名为“UNIF”的工具,能够利用监督数据提高搜索效果。
Facebook使用Stack Overflow上的Android开发问题来测试NCS的效果,看它是否能从GitHub中找到正确答案。在287个问题中,NCS的前十条查询结果能正确回答175个问题,占比超过60%。相比传统的信息检索技术BM25,NCS有了显著提升。
NCS和UNIF与Stack Overflow上的问题进行了对比。结果显示,UNIF在回答问题的数量上比NCS有了大幅改进。
例如,搜索查询“如何加入应用程序并显示主屏幕”,NCS返回的代码段如下:
java
public void showHomeScreenDialog(View view) {
Intent nextScreen = new Intent(getApplicationContext(), HomeScreenActivity.class);
startActivity(nextScreen);
}
而UNIF提供的代码段更为合适:
java
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模型通过嵌入获取程序语义,在向量空间中语义相似的实体彼此接近。模型将代码片段以方法级别嵌入到向量空间中,查询也将映射到同一向量空间,向量距离用于评估代码片段与查询的相关性。
为了生成代码的向量表示,Facebook将源代码视为文本,并从方法名称、方法调用、枚举、字符串常量和注释中提取信息。然后根据标准英语惯例和代码相关的标点符号进行分词。
fastText为词汇库中的所有单词构建嵌入。fastText使用两层密集神经网络,在大规模语料库上进行无监督训练。
UNIF是NCS的扩展,当有监督数据可用于训练时,可以提高性能。在GitHub上选取了26,109个最受欢迎的Android项目,直接在搜索语料库上训练NCS。UNIF则使用Stack Overflow论坛中的问题标题和代码片段作为训练数据,最终得到451,000个训练样本。
相关论文链接: https://arxiv.org/pdf/1905.03813.pdf
— 完 —
量子位QbitAI正在招聘编辑/记者,工作地点在北京中关村。欢迎有志之士加入我们!
—
希望这些改写后的段落符合您的需求,既保留了原文的核心信息,又提高了文章的紧凑性和可读性。