【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

代码跑不出头发都揪秃了?Bing 搜索新功能直接给代码!

  • 2018-08-09
  • 本文字数:2943 字

    阅读完需:约 10 分钟

对于国内用户来说,来自微软的 Bing 搜索引擎似乎并不常用。然而据微软透露,目前 Bing 搜索在美国搜索市场占据 33% 的市场份额,而在中国国内英文搜索的市场份额也达到了 25.6%。

前不久,微软正式面向中国用户推出 Bing 国际版英文搜索引擎,旨在为国内从事学术和科研的专家、学生以及其他英文搜索用户提供更加准确、全面、智能的搜索体验。

对于广大开发者来说,Bing 有一项功能可能是大家都爱不释手的:2016 年,微软必应搜索引擎联合 HackerRank 推出了一项全新功能——源代码搜索,并提供直接编译运行代码的能力。而近日,微软又将这一功能进行了智能化升级,堪称程序员好帮手。本文作者来自 Bing 技术团队,同为开发者的他们,将为你全面解读这项新功能带来的便利。

如果你是一名开发人员,你可能会阅读大量文档、论坛和讨论去寻找编码问题的解决方案,学习新的编程语言或掌握新工具。在最终找到答案之前,阅读大量类似问题和潜在解决方案的讨论总是需要花费很多时间和精力。

我们 Bing 的许多工作人员也是开发人员,我们想:是否可以让 Bing 变得足够智能,为我们解决上述问题?如果想让它通过自动查找包含问题答案的确切代码段来帮助用户节省时间,该怎么做?这就是 Code Sample Answer 诞生的原因。

你可以尝试在 Bing 输入“使用 R 中的函数转换大小写”( https://cn.bing.com/search?q=convert+case+using+a+function+in+R )等查询来查看结果,相信你会为 Bing 从文章中提取代码段并在右侧的结果栏中以特定的编程语言显示出结果而感到开心不已。如果你需要更多上下文,代码示例下方的链接将直接链接到相应的文章。更棒的是,我们支持的编程语言不仅限于 Microsoft 系列编程语言。(P.S. 小编实际尝试了 Python、Java、C++、Ruby、Lua、Swift、C#、JavaScript 都能得到相应的代码实例,支持的语言还不少呢)



源码搜索的挑战

根据维基百科,源代码是使用某种人类可读编程语言编写的任何计算机指令集合,通常是纯文本。每种编程语言都有一组定义的指令、语法和形式,这些语言对于该语言是唯一的。

我们希望这个解决方案可以支持广泛的编程语言。为了使 Bing 能够满足此要求并找到回答用户查询的相应代码片段,它必须能够解析和理解这些指令,以及众多不同编程语言的语法和形式。那么,是否可以在不必为每种语言构建完全独立系统的情况下做到这点呢?

另一方面,开发人员更喜欢使用自然语言来搜索问题的解决方案。Bing 需要能够将查询的意图(以自然语言表示)映射到代码样本的意图(以编程语言表示),以便为查询找到相关性最大的代码样本。

通过利用 Bing 的自然语言处理(NLP)技术和对语言无关代码的理解功能,我们能够解决这一挑战,这大大减少了许多开发人员从查询到获得答案的时间和精力。

Code Sample Answer 如何工作?

当开发人员输入一个复杂的查询,例如“使用 java 发送包含 Outlook 附件的 html 电子邮件”,其中包含多个与编码相关的术语:“html”、“java”、“outlook”,需要花费大量工作才能正确地分辨用户的实际意图。在这种情况下,我们实际想做的事是使用 Java 编程语言通过 Outlook 发送带有附件的 HTML 格式的电子邮件。获得正确的查询意图对于从一系列可用选项中提取最相关的代码示例来说至关重要。

Bing 的自然语言处理流程通过将查询转换为等效的“编码查询关键词”来实现此目的。随后,Bing 的语言不可知代码理解引擎确保结果正确地反映基于整体查询理解的意图,而不是简单的单个关键字匹配。下图更详细地展示了这一过程。



在 Bing.com 上进行查询时,首先根据其作为代码或非代码意图类型查询对其进行分类。其后由 Bing 的几个基本查询更改管道(包括我们的 NLP 管道)处理,并转换为查询关键字,随后与相关网页匹配。

这些管道每一个都是专用编码查询,因为其语义通常与一般查询完全不同,例如:查询“Chai 或 Mocha”和“Chai 或 Mocha assert”。虽然他们可能有一些重叠,但主要意图明显不同。在前一种情况下,用户可能正在寻找 chai 和 mocha 这两种饮料之间的差异,而后者很明显主要意图肯定是要找到更多相应的 JavaScript 测试框架。

在诸如此类的模糊情况下,网络结果将继续考虑所有可能的意图,并且代码答案可能会被抑制。只有当 Bing 智能检测到编码意图,并十分确信时,才会触发代码示例应答:



为了使查询意图检测达到这种精确度,Bing 为开发人员提供的自然语言处理流程利用了多年来收集的开发人员查询训练数据中的模式,这些模式包含编码查询的常用术语和文本结构。该系统还利用大量点击信号进一步提高精确度。

一旦查询被分类为代码或非代码查询,并且识别出关键短语术语,Bing 的语言不可知代码理解引擎就会智能地解读开发者意图。这种对意图的理解是根据特定语法,查询中使用的目前在开发者社区中很常见的 API、工具或语言名称等信号构建的。

基于查询理解,系统从诸如 Stackoverflow、Github、W3Schools、MSDN、Tutorialpoints 等流行权威站点提取最匹配的代码样本,同时考虑 API 的保真度和编程语言匹配、支持 / 反对投票、解决方案的完整性等。

从网页中提取和显示最匹配代码片段的关键挑战之一是,这些页面中的许多页面可能包含多个意图。例如 Stackoverflow 上的这篇文章( https://stackoverflow.com/questions/30547349/node-js-pdf-generation-with-dynamic-tables )的主要话题即是用 Nodejs 通过动态表生成 PDF,但同一页面还包含了开发人员的回复,建议将 Phantomjs 作为一个解决方案。页面上的这些建议可能会导致模糊的结果。因此,为了保持结果精确,我们使用显式语义分析来提取网页内容,该语义分析可以测量查询关键短语和给定网页之间的语义相关性。

模型产生的语义分数显示出文档代码片段与查询的匹配质量。在后续步骤中,我们对代码片段进行评估、排名,并给出最佳代码。



如果我们非常确信给出的最佳代码段完全满足用户的查询,它将显示在结果页面的顶部,如上例所示。你可能还想尝试:“js 中的数组连接”,“c#string.substring”,“arraylist toarray java”,“php preg_match”以查看更多高可信度答案的示例。



如果不是太确信,代码示例答案将会在页面正文更靠下的位置呈现(“c#native json”,“在 html 中缩进项目符号”,“INVALID PARAMETER EXCEPTION”,“如何在根网站上移动 c#.net 中的 sharepoint“)

编者注:小编在测试之后发现只有Bing 搜索国际版有这项功能,且只有在全英文输入的情况下能够实现,想要体验该功能的读者要特别注意哟~



不只代码示例!

Code Sample Answer 的功能并不仅限于编程语言,它还涵盖了开发人员常用的许多工具。例如,如果你想不起所有有用的 git 命令及其语法时,可以用 Code Sample Answer 轻松获取相应信息。

随着我们从网络搜索中获得越来越多的信号以及开发人员的持续反馈,我们将继续致力于完善开发人员支持体验和代码示例答案的覆盖范围。

我们需要用户的反馈,来帮助我们了解未来完善哪些功能将对你完成日常工作最有帮助、最有价值。

祝编码快乐!

查看英文原文: https://blogs.bing.com/search-quality-insights/2018-07/Intelligent-search-Coding-answers-at-your-fingertips/    

本文由陈思策划,感谢蔡芳芳对本文的审校。

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2018-08-09 19:003843
用户头像

发布了 42 篇内容, 共 13.6 次阅读, 收获喜欢 53 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

ipfs矿机公司星际联盟是什么公司?星际联盟ipfs矿机靠谱吗?

分布式存储 IPFS Filecoin ipfs挖矿 ipfs矿机

5000字、12 连环炮、一张图快速搞定线程池

Java 架构 面试 后端 多线程

Go- 递归函数

HelloBug

递归 Go 语言

架构实战营1期模块6作业——微服务架构

tt

架构实战营

智能语音技术:从哪儿来?往何处去?

安第斯智能云

深度学习 语音

neo4j 图数据库基础

escray

学习 neo4j 8月日更

一个案例:论写作的重要性

非著名程序员

个人成长 写作 认知提升 8月日更

按下数字化转型快进键!DataPipeline与星环大数据平台完成产品兼容互认证

DataPipeline数见科技

画15张图搞定MySQL InnoDB工作原理

Java MySQL 数据库 程序员 后端

笔记-python面向对象

加里都好

Python代码阅读(第17篇):列表元素按位合并

Felix

Python 编程 Code Programing 阅读代码

Go- 闭包函数

HelloBug

腾讯WeTest压测大师通过中国计量科学研究院测试认证,获国家级权威认可

WeTest

又快又稳!Alibaba出品Java性能优化高级笔记(全彩版)震撼来袭

Java~~~

Java 架构 jdk 面试 JVM

解决生命科学研究痛点,北鲲云计算着力打造行业解决方案

北鲲云

Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

不脱发的程序猿

Python qt GUI UI文件转换为Python文件

Go- defer

HelloBug

defer Go 语言 代码追踪 记录函数参数和返回值

构建可靠分布式架构的最佳方式,竟记在国内第一本“凤凰架构”上

Java~~~

Java 架构 面试 JVM 架构师

高性能C++ HTTP客户端原理与实现

万俊峰Kevin

c++ workflow http client

简述 Linux I/O 原理及零拷贝(下) — 网络 I/O

Qunar技术沙龙

Linux TCP I/O DPDK 网络io

Go- 可变参数函数

HelloBug

Go 语言 可变参数函数 空接口

Apache APISIX 社区周报 | 2021 8.16-8.22

API7.ai 技术团队

Apache 开源 APISIX 社区 社区周报

可视化全埋点系列文章之功能介绍篇

神策技术社区

程序员 代码 埋点 神策数据

fil挖矿怎么挖?fil挖矿成本是多少?

fil挖矿怎么挖 fil挖矿成本是多少

竟有阿里大牛用678页PDF只讲Java程序性能优化,除了干货就是干货

Java~~~

Java 架构 面试 JVM 调优

如何通过AI做智能化转型的一些思考

石云升

学习 AI 8月日更

元宇宙系统|NFT游戏系统技术开发

薇電13242772558

区块链

石油行业数据采集中的 MQTT 协议

EMQ映云科技

数据 mqtt emq 远程监控 实时数据

fil矿机1T一天可以挖多少币?fil矿机能挖多久?

fil矿机能挖多久 fil矿机1T一天可以挖多少

吹爆!阿里高工携18位架构师耗时57天整合的1658页面试总结太香了

Java~~~

Java spring 架构 面试 JVM

FabEdge快速安装指南,极速上手体验边缘集群

BoCloud博云

边缘计算 博云开源 FabEdge 技术干货

代码跑不出头发都揪秃了?Bing搜索新功能直接给代码!_微软_陈利鑫_InfoQ精选文章