AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

代码跑不出头发都揪秃了?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/    

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

2018-08-09 19:004257
用户头像

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

关注

评论 1 条评论

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

嘉为蓝鲸WeOps荣获“2022年度行业科技创新产品”

嘉为蓝鲸

运维 嘉为蓝鲸 #WeOps

嘉为蓝鲸IT服务管理中心V3.0正式发布,实现IT服务管理体系新升级!

嘉为蓝鲸

运维 嘉为蓝鲸 IT服务

干货 | 五大关键点,帮助企业快速构建可落地的IT服务管理体系

嘉为蓝鲸

运维 嘉为蓝鲸 IT服务

AI 作画领域中的“神笔马良”是怎样炼成的?

行者AI

阿里云ECS后台CPU占用100%,top却找不到

Jeremy Lai

cpu 100% 阿里云;

应用瓴羊Quick BI数据分析,实时掌控企业运营数据

对不起该用户已成仙‖

友元、异常和其他

Maybe_fl

CleanMyMac X2023第三方mac系统清理软件

茶色酒

CleanMyMac X CleanMyMac X2023

2022腾讯Techo前沿技术论坛召开,六位科学家分享前沿科学成果

科技热闻

MySQL索引的底层数据结构原理剖析(二叉树、 红黑树、Hash、B-Tree、B+Tree)

C++后台开发

MySQL 数据结构 后端开发 底层原理 C++开发

后端程序员实现一个IP归属地的小程序

Jeremy Lai

Seata 环境搭建

Jeremy Lai

分布式事务 seata

中国视频云进入“出海”时代,腾讯云音视频发布海外专门品牌及新产品

科技热闻

超简单的CDH6部署和体验(单机版)

程序员欣宸

大数据 hadoop CDH 12月月更

MySQL更新锁表超时 Lock wait timeout exceeded

Jeremy Lai

事务隔离 Mysql死锁

字节一面:说说TCP的三次握手

Jeremy Lai

三次握手 TCP协议

手把手教你用Java获取IP归属地

Jeremy Lai

IP地址

腾讯发布数字政务核心产品体系,多方位助力政府数字化转型

科技热闻

1-5-10 快恢在数字化安全生产平台 DPS 中的设计与落地

阿里巴巴云原生

阿里云 云原生 数字化安全生产平台

深入理解Redis 数据结构—字典

Jeremy Lai

字典 redis 底层原理

详解MySQL隔离级别

Jeremy Lai

隔离级别

Spring Cloud 整合 nacos 实现动态配置中心

Jeremy Lai

nacos 动态配置

腾讯云升级云端 IDE Cloud Studio,助力开发“化繁为简”

科技热闻

干货 | 企业如何快速采集分析日志?

嘉为蓝鲸

运维 嘉为蓝鲸

Web3时代到来,腾讯云助力产业提效和互联网创新

科技热闻

商务部研究院信用所、启信宝联合发布《中国商务信用发展指数报告(2022)》

合合技术团队

人工智能 大数据 商业

小程序正式版报错600002 url not in domain list

Jeremy Lai

小程序

EMQ助力阿里云飞天洛神云网络构建新一代“亿级并发、百万级吞吐”NLB网络型负载均衡系统

EMQ映云科技

阿里云 物联网 IoT mqtt 12 月 PK 榜

融云&艾瑞发布《政企数智办公平台行业研究报告》,解读数智化时代的办公新趋势

融云 RongCloud

即时通讯 办公 数智化

PID和TID的区别

源字节1号

软件开发 前端开发 后端开发 小程序开发

一图读懂《2022 年中国政企数智办公平台行业研究报告》

融云 RongCloud

办公 数智化 图论

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