﻿<?xml version="1.0" encoding="utf-8"?>
<rss
  version="2.0">
  <channel>
    <title>Do not use</title>
    <link>https://blogs.bing.com/Engineering-Blog/Feed</link>
    <description>Do not use</description>
    <language>en</language>
    <item>
      <guid
        isPermaLink="false">0c97c363-b05a-42d9-86cc-5c787ab8b39e</guid>
      <link>https://blogs.bing.com/Engineering-Blog/august-2023/Driving-Performance-at-Microsoft-Bing</link>
      <author>Bing Team</author>
      <category>bing</category>
      <category>Performance</category>
      <category>scale</category>
      <category>speed</category>
      <title>Driving Performance at Microsoft Bing</title>
      <description>Building fast websites is challenging, often hindered by new features and a lack of prioritization and funding for performance work. Many sites suffer as a result. This blog shares Bing&amp;#39;s holistic model for maintaining and enhancing site performance. We hope this template, blending data, tools, teamwork, processes, and commitment, can be a valuable guide for others facing these common challenges.</description>
      <pubDate>Thu, 17 Aug 2023 08:00:00 Z</pubDate>
      <content><![CDATA[Ensuring fast performance is a common challenge faced by teams building web sites, especially given the tendency for new features and functionality to cause performance regressions. A related challenge is that many organizations don&rsquo;t adequately prioritize and fund performance work. These are difficult challenges to overcome, and many sites perform poorly because of it.<br />
&nbsp;<br />
In this blog we present the model Bing uses to successfully maintain and continuously improve site performance. The model is comprised of components spanning data and tools, a dedicated performance team, processes, and organizational commitment. While each component will be familiar to most people, it&rsquo;s their synthesis into a unified model that we hope teams across the industry will find useful as a template for their own performance missions.<br />
&nbsp;
<h3>The Bing Model for Driving Performance</h3>
A prior <a href="https://blogs.bing.com/search-quality-insights/august-2022/Fast-Front-End-Performance-for-Microsoft-Bing" target="_blank">blog</a> discussed the architecture and many of the technical performance techniques used by the Bing search engine to deliver world-class performance to end users. But architecture and performance techniques alone are not sufficient to ensure fast performance.<br />
&nbsp;<br />
At Bing we employ a set of <em>necessary and sufficient</em> components that have proven successful in the mission to maintain and continuously improve site performance. The model is shown below.<br />
&nbsp;<br />
<img alt="Picture1.png" src="/getattachment/188e64f7-5b8b-4aa3-98fa-f8eccda6aab9/Picture1.png?lang=en-US" title="Picture1.png" /><br />
Figure 1: Bing Model for Driving Performance<br />
<br />
<em>Necessary and sufficient</em> means that each component of the model is necessary, and collectively they are sufficient to drive a successful performance mission. Additionally, each component must be executed with a high standard of <em>excellence</em>. A component that is either missing or poorly executed will undermine the mission.<br />
&nbsp;<br />
This model has been developed over time through experience and learnings, both at Bing and other divisions at Microsoft. The following sections discuss each component of the model.<br />
&nbsp;
<h3>Organizational Commitment</h3>
Strong organizational commitment to performance is the foundation and its importance cannot be overstated because all other components of the model depend on it. At Bing there is an unwavering commitment to performance at the highest levels in the organization. For example:

<ul>
	<li>Performance doesn&rsquo;t need to be justified; it&rsquo;s known to be good for users and good for business.</li>
	<li>Performance isn&rsquo;t traded off against features. There is a win-win attitude of delivering both new features <em>and</em> performance and, importantly, this is reflected in ship criteria that prevent regressions.</li>
	<li>Significant resources are allocated to performance.</li>
</ul>
&nbsp;<br />
An anti-pattern to watch out for in your own organizations is lip service to performance. The importance may be understood but isn&rsquo;t backed up by treating performance as a top priority when it comes to resource allocation, ship criteria, or architectural decisions.<br />
&nbsp;
<h3>Data &amp; Tools</h3>
Excellent quantitative data and tools for developers are critical. At Bing the performance team discussed later is responsible for providing solutions in this space.<br />
&nbsp;
<h4>Representative Metrics</h4>
Fast performance is in service of desirable business outcomes such as user satisfaction, loyalty, and engagement. Thus, it&rsquo;s important to have performance metrics representing <em>end user perceived performance</em>, such that an improvement to performance metrics can be assumed to have a beneficial impact on business metrics.<br />
&nbsp;<br />
Which performance metrics to use is dependent on the specific experience being measured and what makes users perceive it to be fast. Many metrics are used at Bing depending on the scenario. For the main search results page, we primarily focus on three metrics representing rendering performance: First Render, First Results Render, and Above Fold Render, which correspond to the main rendering phases of the experience.<br />
&nbsp;<br />
<img alt="Picture2.png" src="/getattachment/322fd7fe-253f-42a6-8378-c4cc66910a1b/Picture2.png?lang=en-US" title="Picture2.png" /><br />
Figure 2: Bing Rendering Sequence in Slow Motion for Main Search Results Page
<h4><br />
Real User Measurement</h4>
Collecting performance metrics from real users is called RUM, or Real User Monitoring. Measuring performance in the wild is essential as it represents the &ldquo;truth&rdquo; across the myriad of different conditions (network speeds, device speeds, browsers, etc.) in the real user population. At Bing RUM data is used during the A/B Experimentation and Live Site phases as discussed in the next section.<br />
&nbsp;<br />
Performance is analyzed and tracked across the full distribution of percentiles, but the 90<sup>th</sup> percentile is primarily used for detailed tracking, goal setting, and accountability for end user performance.<br />
&nbsp;
<h4>Performance Tools</h4>
Bing uses performance tools at each stage in the ship pipeline as shown in the diagram below. These tools are designed to be used by any engineer in Bing, not just the performance team engineers.<br />
<img alt="Picture3.png" src="/getattachment/15a3c070-3444-45b5-92d0-34ecc1f10f19/Picture3.png?lang=en-US" title="Picture3.png" /><br />
Figure 3: Performance Tools<br />
&nbsp;
<h4><em>Upstream Dev Tools</em></h4>
The Bing performance team operates a system &nbsp;&nbsp;called the Performance Analyzer Service (PAS) which runs in a highly controlled environment of identical machines and is used to measure the performance of front-end code. PAS runs tests against URLs (or scripts) using real browsers in so-called test agents running on the machines. Tests generate the perceived performance metrics discussed earlier, along with a wealth of other useful metrics and diagnostics for performance debugging.<br />
&nbsp;<br />
Under the hood, PAS leverages WebPageTest open source which is an outstanding system for measuring web page performance. PAS uses layered services and a database to implement extensions to WebPageTest.<br />
&nbsp;<br />
PAS has implemented built-in support for executing multiple tests together as a group in support of &ldquo;Lab A/B Testing.&rdquo; Just as developers test the performance impact of a code change in the real-world using A/B experimentation (see next section), they use Lab A/B testing to test the perf impact in a controlled lab environment during the development cycle.&nbsp;<br />
&nbsp;<br />
PAS also has implemented Web Page Replay (WPR), which is a mechanism to eliminate test results variance due to servers, CDN, and networking when testing front-end code. It works by running a pre-test (called the Recording) through a WPR service which is essentially a web proxy that captures and stores all HTTP request/response information. Then, the actual test (called the Playback) is run against the WPR service with all requests served by it using the stored responses from the Recording. PAS is built such that a test agent and its WPR service are collocated, so that all HTTP traffic during a Playback is local to a single host; this further reduces variance.<br />
&nbsp;<br />
Because of WPR and other tactics to reduce variance such as disabling background services and non-deterministic browser heuristics on the test agents, PAS provides repeatable test results with high sensitivity in detecting the front-end perf impact of a code change. PAS has proven to be very popular with developers in Bing and other divisions at Microsoft.<br />
&nbsp;
<h4><em>A/B Experimentation</em></h4>
Bing uses Microsoft&rsquo;s internal A/B testing platform to evaluate performance in the real world prior to shipping. A/B experimentation is used both for evaluating the benefit of a potential perf optimization and for ensuring that standard feature enhancements don&rsquo;t regress performance. An A/B experiment&rsquo;s scorecard includes all relevant performance metrics that enable ship decisions after an experiment has completed (see more in the Enforced No Regressions section).<br />
&nbsp;<br />
The Bing performance team operates a <em>pre-experiment gate</em> that acts as a performance sanity check. It is implemented using the PAS system described in the prior section. The gate measures the control and treatments of an experiment to ensure the treatments&rsquo; performance are within a margin of expectations. This prevents egregiously performing code from being inflicted on real users during experiments. An additional guard is that after an experiment starts, it can trigger performance alerts if perf has regressed beyond a threshold and will automatically be shut down if severe enough. &nbsp;<br />
&nbsp;
<h4><em>Live Site Tools</em></h4>
Despite best efforts to prevent performance regressions due to code ships, it sometimes happens. Or a regression can occur due to other causes such as a networking infrastructure problem, capacity issue, or feature promotion on the site that is outside the control of engineering. &nbsp;To detect and quickly identify the root cause of a regression, Bing uses various tools.<br />
&nbsp;<br />
Bing uses typical time-series dashboards and reports to track real world performance over time, including drill-down into different dimensions and percentiles. There are flavors of these dashboards based on pre-cooked daily aggregations (unsampled) as well as NRT (near real time). Additionally, a data store with sampled data is used for deeper debugging across a larger set of dimensions; using sampled data allows for faster queries and visualization than is possible with the full data set.<br />
&nbsp;<br />
Because Bing has a vast amount of performance data collected from different sources, it&rsquo;s a challenge to automatically detect regressions. Unlike availability which can be measured against a fixed threshold like 99.99%, performance metrics can&rsquo;t be measured using fixed thresholds because the expected performance varies depending on dimensions such as country, device class, browser, or seasonality in the data (end user performance varies across time-of-day and day-of-week due to a different mix of users on faster enterprise networks versus slower home networks).<br />
&nbsp;<br />
To automatically detect and alert on regressions, Bing uses an <em>Anomaly Detection</em> tool. Anomaly detection efficiently checks a vast number of dimension combinations to quickly identify unusual patterns or deviations in metrics, such as spikes or steps in latency or traffic. Anomaly detection allows engineers to identify and isolate issues to specific areas of the system, rather than having to search through a vast amount of data.<br />
&nbsp;
<h3>Team &amp; Process</h3>
Team and process components are the next part of the model. With a foundation of strong organizational commitment and excellent data and tools, Bing uses a centralized performance team and a couple of key processes to round out its performance mission.<br />
&nbsp;
<h4>Dedicated Performance Team</h4>
Bing has a dedicated performance team whose responsibility is to deliver and maintain the data and tools components described above and to oversee the processes described in the following two sections.<br />
&nbsp;<br />
The Bing performance team provides expert guidance, analysis, driving, training, and data and tools that democratizes the performance mission &ndash; i.e., enables all feature developers to write and ship optimal code. For optimizing existing code, it will sometimes be done by an engineer from the performance team, but to achieve scale, frequently the performance team will identify opportunities and then partner with other teams, so that many optimizations are implemented by feature developers.<br />
&nbsp;
<h4>Improvement Workstreams</h4>
The Bing performance team drives workstreams whose goal is to improve performance. A backlog is maintained that is populated with opportunities, usually deriving from data analysis of RUM data, lab analysis using the PAS tool, or the emergence of new web technologies (see prior <a href="https://blogs.bing.com/search-quality-insights/august-2022/Fast-Front-End-Performance-for-Microsoft-Bing" target="_blank">blog </a>for examples of optimizations that have come from these workstreams).<br />
&nbsp;<br />
For end user performance, the 90<sup>th</sup> percentile of worldwide performance is the primary focus, but specialized workstreams also are spun up as needed (e.g., to focus on a particular geography, to focus on higher percentiles, etc.).&nbsp; As mentioned above, these workstreams are typically executed in partnership with other teams to scale the optimization efforts.<br />
&nbsp;<br />
Given that Bing is a large organization with many teams and experiences, it&rsquo;s not feasible for the performance team to drive all improvement workstreams. In some cases, they will be driven by feature teams with the performance team in a supporting role.<br />
&nbsp;<br />
To add accountability, formal goals are set and tracked on a regular basis to ensure that perf improvement targets are being met. Without accountability, even the best-intentioned process is susceptible to failure.<br />
&nbsp;
<h4>Policy of No Regressions</h4>
Enforcing a policy of <em>No Regressions</em> is super important to the performance mission. It&rsquo;s all too easy to tradeoff performance against new features, especially if a business metric is shown to improve due to a new feature during A/B experimentation. But this is a losing game, as over time performance will inevitably degrade.<br />
&nbsp;<br />
Because of the strong organizational commitment to performance discussed earlier, Bing has been able to implement a process that prevents shipping perf regressions. New features must be at least performance-neutral, and Bing uses a formal sign-off process (tooling + humans) to ensure perf regressions don&rsquo;t ship. This forces teams to optimize performance of their features, and in some cases find other code to optimize to stay neutral.<br />
&nbsp;<br />
<img alt="Picture4.png" src="/getattachment/f5b0b1fe-e4e7-4fed-b95a-f218719cdba3/Picture4.png?lang=en-US" title="Picture4.png" /><br />
Figure 4: Process for Preventing Performance Regressions<br />
<br />
An exception mechanism exists so that in rare cases a perf regression can ship; this requires VP approval and must fit within a small annual <em>budget</em> (in msec) for regressions.&nbsp; To counteract the effect of these regressions, workstreams exist to improve performance as described above, which has the effect of funding the regression budget plus a surplus so that Bing is getting net faster.<br />
&nbsp;<br />
Like the perf improvement process, formal goals are set and tracked to ensure accountability to the policy of no regressions.<br />
&nbsp;
<h3>Continuity Over Time</h3>
Finally, continuity over time is essential. In other words, as an organization morphs due to turnover or new people in leadership positions, it&rsquo;s important to keep the model&rsquo;s execution intact.<br />
&nbsp;<br />
Fortunately, this hasn&rsquo;t been a problem at Bing, and we&rsquo;ve been able to improve the model&rsquo;s execution over time. But we&rsquo;ve seen cases in other divisions where a large reorganization led to a dramatic loss of institutional knowledge and a significant setback in the performance mission. The best way to overcome such situations is to ensure knowledge transfer to the new people, or even better have the model institutionalized company-wide, or at least across a higher level in the organization.<br />
&nbsp;<br />
- <a href="https://www.linkedin.com/in/pauljroy/">Paul Roy</a>, <a href="https://www.linkedin.com/in/jasonyu07msft/" target="_blank">Jason Yu</a>, and the Bing Performance Team]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">2e55e70a-c922-49d6-bd7d-25aa448b2239</guid>
      <link>https://blogs.bing.com/Engineering-Blog/october-2021/Bing-delivers-more-contextualized-search-using-quantized-transformer-inference-on-NVIDIA-GPUs-in-Azu</link>
      <author>Bing Team</author>
      <category>Bing</category>
      <category>Engineering</category>
      <title>Bing delivers more contextualized search using quantized transformer inference on NVIDIA GPUs in Azure</title>
      <description>Transformer models that power a growing number of intelligent capabilities in Microsoft Bing have significantly increased model complexity over the last couple of years.&amp;nbsp; To ensure Bing will continue to deliver the fast, responsive, and relevant search experience our users expect, we optimized transformer inference for both latency and throughput using NVIDIA T4 GPUs in NCasT4v3 Azure VMs.&amp;nbsp; These optimizations have enabled Microsoft Bing to serve millions of complex transformer inferences per second in a performant and cost efficient manner.&amp;nbsp;</description>
      <pubDate>Thu, 07 Oct 2021 08:00:00 Z</pubDate>
      <content><![CDATA[A couple of years ago we shared how Bing leveraged transformers for the first time at web-search scale to deliver <a href="https://azure.microsoft.com/en-us/blog/bing-delivers-its-largest-improvement-in-search-experience-using-azure-gpus/#:~:text=%20Bing%20delivers%20its%20largest%20improvement%20in%20search,Bing%20search%20experience%20worldwide%20using%20Azure%E2%80%99s...%20More%20">its largest improvement in search experience</a>.&nbsp; At the time, we used a distilled 3-layer transformer on top of Azure NV-series VMs with NVIDIA M60 GPUs to significantly improve Bing&rsquo;s search relevance within the stringent cost and latency constraints for web search.&nbsp;<br />
<br />
Since then, transformers have become increasingly popular across Bing and now power new capabilities such as <a href="https://blogs.bing.com/search/2020_05/AI-at-Scale-in-Bing">intelligent summarization</a> and <a href="https://blogs.bing.com/search-quality-insights/october-2020/Bing-Releases-Intelligent-Question-Answering-Feature-to-100-Languages">expanding Question-Answering to 100+ languages</a>. &nbsp;For example, by using domain adapted transformers, Bing incorporates signals such as the page&rsquo;s language, location, and a higher proportion of the web page&rsquo;s content to provide more relevant, fresh, and contextualized search experiences.&nbsp; Now when a user in Japan searches &ldquo;精神病院赤羽&rdquo;(mental health clinic Akabane), Bing uses the user&rsquo;s location and language to surface relevant clinic options in Akabane.<br />
<br />
<img alt="image002.png" src="/getattachment/0bafcd83-9bd5-4e1a-88ee-cf229a51a01d/image002.png.aspx?width=798&amp;height=275" style="width: 798px; height: 275px;" title="image002.png" /><br />
<br />
Relative to the initial 3-layer transformer integrated into Bing, the latest transformers are much more complex &ndash; each model has many more layers and needs to support much longer input sequence lengths. To ensure Bing will continue to deliver the fast, responsive, and relevant search experience our users expect, we&rsquo;ve invested heavily in transformer inference optimization across both hardware and software to mitigate the performance and cost impact of higher model complexity.&nbsp;<br />
&nbsp;
<h3>Optimizing transformers using inference-focused NVIDIA T4 GPUs in Azure</h3>
Using our prior experience optimizing transformers using <a href="https://docs.microsoft.com/en-us/azure/virtual-machines/ncv3-series">NCsv3 series Azure VMs</a> with NVIDIA V100 Tensor Core GPUs, we focused on optimizing transformers using <a href="https://docs.microsoft.com/en-us/azure/virtual-machines/nct4-v3-series">NCasT4v3 Azure VMs</a> given the inference-focused nature of NVIDIA T4 Tensor Core GPUs with low precision support like INT8.&nbsp; We optimized model inference along three main dimensions: Operator fusion, INT8 model quantization, and maximizing inference serving throughput.<br />
&nbsp;
<h3>Custom fused multi-head attention kernel</h3>
Operator fusion is an optimization technique to accelerate transformer performance by fusing multiple discrete transformer operations into a single kernel.&nbsp; This minimizes the overhead from memory copy and data transfer across different kernels to improve inference performance.&nbsp; &nbsp;<br />
In close collaboration with NVIDIA, we used a custom fused multi-head attention kernel that combined batch matrix multiplication, softmax, and other operators and adapted it for each model&rsquo;s specific transformer parameters such as hidden dimension and sequence length.&nbsp; The kernel was also optimized to take advantage of the new INT8 Tensor Core support available on NVIDIA T4 GPUs.<br />
&nbsp;
<h3>Applying INT8 quantization</h3>
Another approach to improve model inference speed is to decrease the overall amount of computation through model compression via quantization.&nbsp; To leverage NVIDIA&rsquo;s Tensor Core GPU mixed-precision &nbsp;support, we applied post-training quantization to each model&rsquo;s FP32 weights using two steps: 1) Generate and apply the INT8 scaling factors and 2) select the operators to quantize in the graph based on the scenario&rsquo;s precision and latency thresholds.&nbsp; By using only post-training quantization, we were able to avoid quantization aware finetuning and deploy models to production faster.&nbsp;<br />
<br />
We leveraged NVIDIA TensorRT&rsquo;s INT-8 quantization pipeline to first dump each model&rsquo;s FP32 weights, identify the weight and activation quantization scaling factors based on calibration data, and store the quantized weights.&nbsp; We then evaluated multiple combinations of quantized kernels (levels).&nbsp; In Level 1 quantization, only the projection, embedding, and feed forward layers were quantized to INT8 which improved model latency by 20.6%.&nbsp; For Level 2, we added INT8 batch matrix multiplication kernels which improved model latency by 30.5% and for level 3 we quantized the additional layers, providing a 35.4% latency improvement at P95.&nbsp; Each quantization level has varying impacts to model precision so depending on the specific use case and model precision requirements, we select different levels of INT8 quantization to apply.<br />
<br />
<img alt="image004.png" src="/getattachment/4448afcf-055f-4766-be11-04be4d12bb31/image004.png.aspx" title="image004.png" /><br />
&nbsp;
<h3>Maximizing inference serving throughput</h3>
These transformers are hosted in Bing&rsquo;s deep learning inference service (DLIS) which is hosted on&nbsp;heterogeneous hardware fleet spanning across GPU and CPU machines. &nbsp;Each NCasT4v3 Azure VM contains four NVIDIA T4 GPUs per VM and can host four independent model instances. Each model instance is associated with two CUDA streams to further saturate the GPU utilization which means that in&nbsp;total each GPU server could handle eight concurrent inference requests. To minimize the service overhead, each server runs a single&nbsp;DLIS&nbsp;service instance. The service instance has a per-model dispatch queue to decide which model instance to release the request, and the dynamic batch size based on the number of the requests in the queue as shown in below diagram.&nbsp;<br />
<br />
<img alt="image006.png" src="/getattachment/d22e6e87-832c-4f91-b61c-74a1dd7ac931/image006.png.aspx?width=800&amp;height=315" style="width: 800px; height: 315px;" title="image006.png" /><br />
While we successfully optimized tensor computation on GPU, we observed that tokenization emerged as a system bottleneck due to concurrent inference requests and longer input sequences.&nbsp; By offloading the tokenization pre-processing to CPU-dense servers in combination with accelerated networking available in NCasT4v3 VMs, we reduced the end-to-end latency for each inference by 2.5 milliseconds.&nbsp; This is quite significant given that each model inference is typically tuned below 10 milliseconds per inference to ensure fast and responsive Bing search results.<br />
<br />
Serving complex transformer inference at web-search scale. We benchmarked a 6-layer transformer with max sequence length 256 and batch size 10 on NCasT4_v3 Azure VM using the above optimizations.&nbsp; By combining all of them, we observed nearly a 3x increase in throughput per NVIDIA T4 GPU which was critical to meet our stringent cost-to-serve and latency requirements.<br />
&nbsp;
<table border="1" cellpadding="0" cellspacing="0">
	<tbody>
		<tr>
			<td style="width:174px;"><strong>Benchmarks on T4</strong></td>
			<td style="width:107px;"><strong>Precision</strong></td>
			<td style="width:90px;"><strong>Throughput</strong></td>
			<td style="width:138px;"><strong>Model Latency (ms)</strong></td>
		</tr>
		<tr>
			<td style="width:174px;">Baseline Model</td>
			<td style="width:107px;">FP16</td>
			<td style="width:90px;">1123</td>
			<td style="width:138px;">8.9</td>
		</tr>
		<tr>
			<td style="width:174px;">Fused Kernel</td>
			<td style="width:107px;">FP16</td>
			<td style="width:90px;">2083</td>
			<td style="width:138px;">4.84</td>
		</tr>
		<tr>
			<td style="width:174px;">Fused Kernel</td>
			<td style="width:107px;">INT8 (Level 1)</td>
			<td style="width:90px;">2525</td>
			<td style="width:138px;">3.96</td>
		</tr>
		<tr>
			<td style="width:174px;">Fused Kernel + two CUDA streams</td>
			<td style="width:107px;">INT8 (Level 1)</td>
			<td style="width:90px;">3174</td>
			<td style="width:138px;">6.38</td>
		</tr>
	</tbody>
</table>
Globally we&rsquo;re using these transformer optimizations to support tens of millions of transformer inferences per second across 5 Azure regions on thousands of NCaSv3_T4 Azure VMs.&nbsp; Our experience shows that complex large-scale transformer inference can be successfully optimized for both performance and efficiency by using inference-focused Azure NCasT4v3 VMs.&nbsp; Without these software and hardware inference optimizations, the increase in model latency and cost to serve would have made these models impossible to ship and power Bing&rsquo;s continued improvements in search experience.&nbsp;<br />
<br />
If you&rsquo;re interested in exploring some of these optimizations, please see the following resources:
<ul>
	<li><a href="https://docs.microsoft.com/en-us/azure/virtual-machines/nct4-v3-series">NCasT4_v3 series Azure VMs</a> are now generally available in Azure</li>
	<li>To explore applying INT8 quantization for NVIDIA GPUs, see <a href="https://github.com/NVIDIA/TensorRT/tree/master/demo/BERT">NVIDIA&rsquo;s BERT Inference with Nvidia TensorRT demo on GitHub</a> for quantization examples</li>
</ul>
-&nbsp;<a href="https://www.linkedin.com/in/jeffrey-s-zhu/">Jeffrey Zhu</a>, <a href="https://www.linkedin.com/in/mingqin-%E6%9D%8E%E6%98%8E%E7%90%B4-b017b41a/">Mingqin Li</a>, <a href="https://www.linkedin.com/in/zengzhongli/">Jason (Zengzhong) Li</a>, and <a href="https://www.linkedin.com/in/cassandrato/">Cassandra Oduola</a><br />
&nbsp;]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">24749f0c-13ee-405b-bbb8-3494210cf847</guid>
      <link>https://blogs.bing.com/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing</link>
      <author>Bing Team</author>
      <category>bing</category>
      <category>engineering</category>
      <title>RocksDB in Microsoft Bing </title>
      <description>&lt;em&gt;The Microsoft Bing platform has built one of the largest distributed storages for Bing web search data, using its home grown &lt;/em&gt;&lt;a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fresearch%2Fblog%2Fevolution-bings-objectstore%2F&amp;amp;data=04%7C01%7CAshish.Jaiman%40microsoft.com%7Cb835b2cbe05943850be908d9878a8f8c%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637689851494516706%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;amp;sdata=iDsSN6Y8HLgZbXqPDPg0%2F0napI%2FmEnYpfIJALkRN84w%3D&amp;amp;reserved=0"&gt;&lt;em&gt;ObjectStore service&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. The system hosts hundreds of petabyte data and processes hundreds of millions lookups per sec. Open source &lt;/em&gt;&lt;a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Frocksdb.org%2F&amp;amp;data=04%7C01%7CAshish.Jaiman%40microsoft.com%7Cb835b2cbe05943850be908d9878a8f8c%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637689851494526659%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;amp;sdata=h3vkZJpnMbH7AeGq3Dg8PcycsU3kerE%2FhDjhzmGnQPQ%3D&amp;amp;reserved=0"&gt;&lt;em&gt;RocksDB&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is used as the storage engine. Multiple techniques are applied to efficiently store and process the massive data with sub-second data freshness. This blog will present those techniques and the results in production.&amp;nbsp;&amp;nbsp;&lt;/em&gt;</description>
      <pubDate>Tue, 05 Oct 2021 08:17:36 Z</pubDate>
      <content><![CDATA[<div><em>The Microsoft Bing platform has built one of the largest distributed storages for Bing web search data, using its home grown </em><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fresearch%2Fblog%2Fevolution-bings-objectstore%2F&amp;data=04%7C01%7Cpul%40microsoft.com%7C78e52ada1165418ab7cf08d956aef2ff%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637636131740236409%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=JQ8tyHHT4SNA7QNclNiFZZNruYZ7R71z2pNOGW7UFM4%3D&amp;reserved=0"><em>ObjectStore service</em></a><em>. The system hosts hundreds of petabyte data and processes hundreds of millions lookups per sec. Open source </em><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Frocksdb.org%2F&amp;data=04%7C01%7Cpul%40microsoft.com%7C78e52ada1165418ab7cf08d956aef2ff%7C72f988bf86f141af91ab2d7cd011db47%7C0%7C0%7C637636131740246367%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=6kdUgr32i225VvMTQ8zVkTRnBRXnJYFYv8JSzHdPcqI%3D&amp;reserved=0"><em>RocksDB</em></a><em> is used as the storage engine. Multiple techniques are applied to efficiently store and process the massive data with sub-second data freshness. This blog will present those techniques and the results in production.&nbsp;&nbsp;</em></div>

<h3><br />
<span style="font-size: 24px;">Web Search Data Scenario</span></h3>

<div>In early 2018, the team started the effort to build a new platform based on ObjectStore with RocksDB for all Microsoft Bing web document storage and processing pipelines. The new platform is not just a replacement for the old one which served Bing offline data processing workloads for over 10 years, but also with a massive increase of data volume and improved freshness. It hosts hundreds of petabytes of data and handles 10s of billions of document processing per day. This new platform became the largest RocksDB deployment in Microsoft.<br />
<br />
The following diagram shows a simplified architecture of web data platform. The processing of a document starts in Process Controller when it picks which documents should currently be processed. The first interaction is with Crawler where a subset of these documents is recrawled to get the latest content. Then documents are assigned to a Document Processing node which first reads the prior state of the document from Web Data table. Then it generates the in-index representation of the document and updates processing metadata to help in future reprocessing. All the newly created data is stored back into Web Data table. Index Building service then reads the in-index version of document from Web Data table and creates a merged index that is served to users. Injections (of offline generated data) are written directly to the Web Data table and picked up by Index Building service to add directly into merged index. Messaging Service is used to send information between different documents (e.g. Anchor text collection from source page to target page). Lookups of any document state/data are possible from Web Data table at any time and are used in web partner pipelines and for debugging.<br />
<br />
<img alt="image002.png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image002.png?width=798&amp;height=445" style="width: 798px; height: 445px;" title="image002.png" /><br />
&nbsp;
<h3>Compute and Storage Fabric</h3>
The capability of growing computing power and storage independently is highly demanded. Also having separate development and release cycles between computing and storage services are critical, hence the decoupling of storage and computing becomes the key design principle.<br />
<br />
At the same time, it does not mean we should use different machines for deploying two types of services, instead, physically co-hosting CPU-intensive computing services with IO-intensive table services can greatly improve resource utilization. Networking costs for transferring data between storage and compute can be also reduced with affinitization.<br />
<br />
The following illustration shows cohosted Document Process Server and ObjectStore Table Server. Coprocessors are user-defined functions that are hosted and executed by Table Server, which allows running user code close to data. In the design, some light-weighted processing logics are executed in Coprocessors, like close-to-data filtering to find candidate documents to process.<br />
<br />
<img alt="image004.png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image004.png?lang=en-US&amp;width=800&amp;height=488" style="width: 800px; height: 488px;" title="image004.png" /><br />
&nbsp;
<h3>Data Model</h3>
When we prototyped the web data project, a series of tables came up naturally to present lifespan of web documents, from crawled raw documents to processed documents. Some common data from different tables are duplicated, so to achieve consistency under concurrent data processing tasks, transaction support across tables is required. We settled on a Bigtable-like data model by joining all sub-tables by primary key as column groups (will be explained later), which could be used by many applications and pipelines. It improved resource efficiency by avoiding redundant data, and reduced management costs by using fewer tables. Also, when doing batch update on multiple datasets for a document, it uses cheap in-row transaction instead of distributed transactions across tables.<br />
<br />
<img alt="image006.png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image006.png?lang=en-US&amp;width=800&amp;height=405" style="width: 800px; height: 405px;" title="image006.png" /><br />
&nbsp;
<h3>Column Store</h3>
Web Data Table is persisted and served as Column Store, which is a distributed NoSQL database built on RocksDB supporting column-oriented operations. It provides an efficient way of accessing a portion of the data within a record and guarantees atomicity when multiple columns are updated or read across column groups. Partitioning is done by splitting ranges of URL hash. Logical storage hierarchy is shown as below:<br />
<br />
<img alt="image008.png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image008.png?lang=en-US&amp;width=800&amp;height=344" style="width: 800px; height: 344px;" title="image008.png" /><br />
<br />
Column store supports up to 64k of predefined columns with <a href="https://github.com/Microsoft/bond#:~:text=Bond%20is%20a%20cross-platform%20framework%20for%20working%20with,broadly%20used%20at%20Microsoft%20in%20high%20scale%20services.">Bond</a> as schematization provider.

<ul>
	<li>Column family (different from column family of RocksDB&rsquo;s terminology, term CF will be used for RocksDB column family in this document to avoid ambiguity) is a special column that includes a set of sub-columns indexed by a string key (e.g.: K1, K2, K3&hellip;). The number of sub-columns is arbitrary and can be different for different records. It is commonly used for storing various number of same typed facets for a record.</li>
	<li>Column group is set of columns with the same data locality.</li>
</ul>
Column Store uses column storage key schematization to flatten 2-dimensional table cells into K/V pairs stored in RocksDB. A column storage key is combined by primary key, 2 bytes of column Id and nullable sub-key for indexing column family. The way of the column key schematization keeps columns in the same row adjacent in the compacted SST (Sorting String Table) file, which improves the efficiency of key prefix encoding, also maximizes the block cache hit rate.<br />
<br />
<img alt="image010.png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image010.png?width=800&amp;height=493" style="width: 800px; height: 493px;" title="image010.png" /><br />
&nbsp;
<h3>Hot and cold data separation using column groups</h3>
Distributed storage engines are often optimized for high QPS and low latency or high throughputs and low-cost. Most popular engines can be configured towards either one of the characteristics. However, there are two major challenges to support web documents processing:

<ol>
	<li>Hot documents can be refreshed in seconds, but the cold ones can be still for years, also the characteristics for the same documents can change dramatically over time.</li>
	<li>System cost is impossible to ignore when solving problems at web-scale.</li>
</ol>
SSD technologies have evolved rapidly in the past decade. It provides cheaper IOPS/dollar compared with HDD, however for workload does not require substantial amounts of random accesses, HDD is still the more economical solution considering the volume/dollar.<br />
<br />
Web documents can be classified as relatively hot or cold by update frequency, then stored into different column groups correspondingly. Each column group maps to a separated LSM-tree with a path assigned either on SSD or HDD.<br />
<br />
Different from separating hot and cold data by multiple tables, single table with multiple column groups supports in row transaction across storages naturally, which allows documents switching between hot and cold storage easily. Also, batch accessing multiple column data for a document across storages is much cheaper.
<h2>Columnar processing</h2>
A major portion of document processing is done sequentially, which requires enormous range scans on some column data. Joining columns frequently accessed together as a separated column group enables efficient columnar processing.<br />
<br />
Here is a Column Store performance comparison of sequential scan on HDD without cache. Tests were done after ingested 500K rows, and each row has 2 columns with 100KB average size. Test compares read throughputs by:
<ul style="list-style-type:circle;">
	<li>Read one of two columns by filter on the column Id.</li>
	<li>Assigning columns to two column groups and read on one column group.</li>
</ul>

<table border="0" cellpadding="0" cellspacing="0" width="449">
	<tbody>
		<tr>
			<td nowrap="nowrap" style="width:201px;height:15px;">&nbsp;</td>
			<td nowrap="nowrap" style="width:123px;height:15px;"><strong><em>Column Filter</em></strong></td>
			<td nowrap="nowrap" style="width:123px;height:15px;"><strong><em>Column Group</em></strong></td>
		</tr>
		<tr>
			<td nowrap="nowrap" style="width:201px;height:15px;"><strong><em>Sequential Scan </em></strong></td>
			<td style="width:123px;height:15px;">15.6 MB/s</td>
			<td style="width:123px;height:15px;">22.0 MB/s</td>
		</tr>
	</tbody>
</table>
Using column group prevents reading unnecessary data and provides better performance.<br />
&nbsp;
<h3>Column Groups in RocksDB</h3>
Column groups are mapped to <a href="https://github.com/facebook/rocksdb/wiki/Column-Families">RocksDB&rsquo;s CFs</a>, which physically splits database into separated LSM-trees, at the same time atomic accesses are supported across CFs.<br />
<br />
Here is the illustration for RocksDB stack:<br />
<br />
<img alt="image012-(1).png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image012.png?lang=en-US&amp;width=800&amp;height=458" style="width: 800px; height: 458px;" title="image012-(1).png" /><br />
<br />
There are 3 major techniques to improve performance: JBOD, applying per storage compaction limiter and using disk prioritization management.<br />
&nbsp;
<h3>JBOD on RocksDB</h3>
JBOD (stands for Just-a-Bunch-Of-Disks) is one of the fundamental technologies we picked for Web Data table. Compared with RAID0, it gives the ability for software stack to access all disks independently. While RAID0 has lower development costs, throughput and IOPS capacity are much less than JBOD.<br />
<br />
JBOD supports on RocksDB is done by overriding file system APIs from JBOD environment wrapper. The performance benefits on HDD are significant as IOPS is the bottleneck of HDD for most scenarios, by using JBOD, IOPS for individual disk can be used separately.<br />
<br />
In a RocksDB random overwrite test with 3 HDDs, JBOD got more than 2x write throughputs compared with RAID0, and the later test using 9 HDDs JBOD shows almost linear improvements along with number of disks.<br />
&nbsp;
<table border="0" cellpadding="0" cellspacing="0" width="582">
	<tbody>
		<tr>
			<td nowrap="nowrap" style="width:205px;height:16px;">&nbsp;</td>
			<td nowrap="nowrap" style="width:125px;height:16px;"><strong><em>3 HDDs RAID0</em></strong></td>
			<td nowrap="nowrap" style="width:125px;height:16px;"><strong><em>3 HDDs JBOD</em></strong></td>
			<td style="width:125px;height:16px;"><strong><em>9 HDDs JBOD</em></strong></td>
		</tr>
		<tr>
			<td nowrap="nowrap" style="width:205px;height:16px;"><strong><em>Write throughputs </em></strong></td>
			<td style="width:125px;height:16px;">40 MB/s</td>
			<td style="width:125px;height:16px;">100 MB/s</td>
			<td style="width:125px;height:16px;">285 MB/s</td>
		</tr>
	</tbody>
</table>
&nbsp;

<h3>Compaction Concurrent Limiter</h3>
RocksDB ingestion speed is limited by background compaction throughput. Writes will be throttled eventually if compaction cannot catch up with user write.<br />
<br />
Column group is built on top of RocksDB column family (CF), and all the CFs for the same DB instance share components like WAL, flush, compaction schedulers and thread pool, etc. After we extend RocksDB to support <a href="https://github.com/facebook/rocksdb/commit/446b32cfc35f38d173673aa461ac9a91b0d0054d">configure CFs with different working paths</a> across storages, we found <a href="https://github.com/facebook/rocksdb/issues/3972">a performance issue</a> that SSD and HDD didn&rsquo;t work well together, slow HDD compactions exhaust the compaction thread pool and block SSD compactions.<br />
<br />
Enlarging thread pool is not an option, as HDD becomes much less performant with high concurrent compactions bounded by IOPS. <a href="https://github.com/facebook/rocksdb/commit/a8b9891f95235d14f9119edbe8042cad708b22bc">Compaction limiter</a> is designed as a sharable object across CF, controls the outstanding compaction tasks. Global control for max outstanding compaction tasks on individual drive is done by sharing per-drive compaction limiter across CFs of all DB instances. Comparing with uncontrolled mix compactions, a fine-tuned compaction limiter gave us 80% combined ingestion throughput gain. This perf number was measured with 3 HDDs as JBOD and 2 SSDs as RAID0.<br />
&nbsp;
<h3>Disk Prioritization Management</h3>
To achieve better serving performance and IO utilization, Disk IO manager is introduced as a common layer on top of file system API, and it controls and prioritizes IO based on current outstanding requests. For example, RocksDB compaction writes yield to flush write, compaction reads yield to user read when disk is busy. Disk reads and writes for remote data recovery yield to all the other types of IO, and they are marked as the lowest priority.<br />
<br />
Disk IO manager maintenances IO task as multi-level feedback queue with FCFS (first come first serve) as the algorithm for each level, and IO requests are pushed into the queue if predefined max outstanding IO or outstanding bytes are reached. When IO task completes, the next task is picked from highest priority queue by FCFS followed by lower priority queues until outstanding task limit is reached again. To prevent starvation for lower priority queue, the task will be promoted to higher queue after a certain waiting time.<br />
<br />
<img alt="image014.png" src="/getattachment/Engineering-Blog/october-2021/RocksDB-in-Microsoft-Bing/image014.png?width=800&amp;height=303" style="width: 800px; height: 303px;" title="image014.png" />
<h3>Summary</h3>
In this blog post, we introduced RocksDB usage in Microsoft Bing web data scenario which to our knowledge is one of the largest windows RocksDB deployment in industry. To meet the scalability and agility requirements, we built the storage fabric independent of computing fabric on top of ObjectStore table service. Several key techniques are applied, including column-based processing, hot-cold data tiering, JBOD, separate compaction filter between HDD and SSD, and disk prioritization, to make the system efficient and performant.<br />
<br />
There are also tremendous improvements done at data replication protocol. We will talk about them in the next blog post.<br />
<br />
<br />
- Burton&nbsp;(Pu)&nbsp;Li, Jason&nbsp;(Zengzhong)&nbsp;Li, Max Sigalov,&nbsp;Dafan Liu,&nbsp;Knut Magne Risvik&nbsp;<br />
<br />
<br />
&nbsp;</div>
]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">721d2211-3248-4980-9a94-f39f8b12fc04</guid>
      <link>https://blogs.bing.com/Engineering-Blog/october-2021/Welcome-to-the-engineering-blog</link>
      <author>Bing Team</author>
      <category>Bing</category>
      <category>Engineering</category>
      <title>Welcome to the engineering blog</title>
      <description>Bing and all search and recommendation experiences at Microsoft are powered by infrastructure that runs at extreme scale and speed. The platform team is a world-class engineering team with presence around the world. Our mission is to build platforms that empowers the scale and scenarios for search today.&lt;br /&gt;
&amp;nbsp;</description>
      <pubDate>Tue, 05 Oct 2021 08:14:01 Z</pubDate>
      <content><![CDATA[Bing and all search and recommendation experiences at Microsoft are powered by infrastructure that runs at extreme scale and speed. The platform team is a world-class engineering team with presence around the world. Our mission is to build platforms that empowers the scale and scenarios for search today and tomorrow.<br />
<br />
Some of our infrastructure is specialized for the extreme scale and performance we will need, but we also embrace open-source technology to a great extent. We stand on the shoulders of giants.<br />
<br />
In this new blog we will showcase our work on infrastructure, presented by amazing engineers. We are excited to share, and even more excited to learn.<br />
Happy reading!<br />
&nbsp;<br />
Andrey Proskurin, Corporate Vice President&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Knut Risvik, Distinguished Engineer<br />
<br />
&nbsp;]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">25749f88-3626-4344-b9c3-bdbd44eadd86</guid>
      <link>https://blogs.bing.com/Engineering-Blog/march-2020/Bling-FIRE-Tokenizer-for-BERT</link>
      <author>Bing Team</author>
      <category>BERT</category>
      <category>Bling</category>
      <category>fast</category>
      <category>FIRE</category>
      <category>Tokenizer</category>
      <title>Bling FIRE Tokenizer for BERT</title>
      <description>Bling Fire Tokenizer is a blazing fast tokenizer that we use in production at Bing for our Deep Learning models. We&amp;rsquo;ve added support for the BERT-style tokenizers, available for Windows, Linux and Mac OS X.</description>
      <pubDate>Thu, 19 Mar 2020 07:00:00 Z</pubDate>
      <content><![CDATA[Bling Fire Tokenizer is a blazing fast tokenizer that we use in production at Bing for our Deep Learning models. For online scenarios, where the tokenizer is part of the critical path to return a result to the user in the shortest amount of time, every millisecond matters. This is where Bling FIRE performance helps us achieve sub second response time, allowing more execution time for complex deep models, rather than spending this time in tokenization.<br />
<br />
We released Bling Fire Tokenizer to open source a year ago, to great community interest. We also got feedback and feature asks from you that we&rsquo;ve addressed since then.<br />
<br />
We&rsquo;ve since added support for the BERT-style tokenizers with normalization and sub-token extraction. We provide precompiled tokenization models for BERT base/large, BERT base/large cased, BERT Chinese, Bert Multilingual Cased. As well as added instructions to create your own tokenization models <a href="https://github.com/microsoft/BlingFire/wiki/How-to-add-a-new-BERT-tokenizer-model">here</a> and <a href="https://github.com/microsoft/BlingFire/wiki/How-to-change-linguistic-resources">here</a>.<br />
<br />
In terms of speed, we&rsquo;ve now measured how Bling Fire Tokenizer compares with the current BERT style tokenizers: the original WordPiece BERT tokenizer and Hugging Face tokenizer. &nbsp;Using the BERT Base Uncased tokenization task, we&rsquo;ve ran the original BERT tokenizer, the latest Hugging Face tokenizer and Bling Fire v0.0.13 with the following results:<br />
<img alt="" src="/BingBlogs/media/Developer-Blog/BlingFireSpeedBERT2.PNG" /><br />
As you can see Bling Fire is much faster than existing tokenizers for BERT based models. You can find the details of the benchmark <a href="https://github.com/microsoft/BlingFire/wiki/Comparing-performance-of-Bling-Fire-and-Hugging-Face-Tokenizers">here</a>.<br />
<br />
Bling Fire provides state of the art latency and is available for Windows, Linux and Mac OS X platforms.&nbsp; You can get access to the library and find out more details at: <a href="https://github.com/Microsoft/BlingFire">https://github.com/Microsoft/BlingFire</a>. To reach out to the team with questions or comments, connect with us on <a href="https://stackoverflow.com/questions/tagged/blingfire">Stack Overflow</a>.<br />
&nbsp;<br />
- Bling Web Data Team
<div>&nbsp;</div>
]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">f10a93bf-7d05-4123-a884-689319ccfab5</guid>
      <link>https://blogs.bing.com/Engineering-Blog/2019-10/learn-connect-explore-with-the-bing-search-apis-team-at-microsoft-ignite-2019</link>
      <author>Bing Team</author>
      <category>Bing Search APIs</category>
      <category>Cognitive Services</category>
      <category>Microsoft Ignite 2019</category>
      <category>Search APIs</category>
      <title>Learn, Connect, Explore with the Bing Search APIs team at Microsoft Ignite 2019 in Orlando, Florida</title>
      <description>The Bing Search APIs team will be at Microsoft Ignite 2019, in Orlando, Florida, November 4th through the 8th. If you are registered for the event, stop by the Azure Cognitive Services Web Search booth in the AI Apps &amp;amp; Agents area to learn more about the rich Cognitive Services search features and solutions available via the Bing Search APIs.</description>
      <pubDate>Wed, 02 Oct 2019 09:00:39 Z</pubDate>
      <content><![CDATA[<p>The Bing Search APIs team will be at <a href="https://www.microsoft.com/en-us/ignite" target="_blank">Microsoft Ignite 2019</a>, in Orlando, Florida, November 4<sup>th</sup> through the 8<sup>th</sup>.<br />
<br />
If you are registered for the event, stop by the Azure Cognitive Services Web Search booth in the AI Apps &amp; Agents area to learn more about the rich Cognitive Services search features and solutions available via the <a href="https://azure.microsoft.com/en-us/services/cognitive-services/directory/search/" target="_blank">Bing Search APIs</a> , including:</p>

<ul>
	<li>Bing Search APIs that enable you to query for web, images, news, video, entity, autosuggest and spell check</li>
	<li>Bing Custom Search API -Tailor-made, ad-free and adjustable search experiences</li>
	<li>Bing Visual Search API - Image-based search options for your app or website</li>
</ul>

<p><img alt="Microsoft Ignite 2019" src="/BingBlogs/media/Developer-Blog/2019/10/Ignite2019_Image.png" /><br />
<br />
Additionally, sign up to attend our Bing Search APIs session, to learn more about our flexible, state-of-the-art, end-to-end search services, that enable users to access the right information from Bing&rsquo;s powerful knowledge graph, including intelligent tools such as fraud and plagiarism detection.</p>

<h4>BRK3030 &ndash; AI powered web search with Bing Search APIs and more</h4>

<p>In today&rsquo;s competitive landscape, a business&rsquo;s success is predicated on its ability to provide its users with the right products and services. In this session, learn how easy it is to create a tailored, end-to-end solution using Bing APIs such as Bing Custom Search, Bing Web Search, Bing Visual Search, Bing Entity Search, Bing Autosuggest, Bing Spell Check, and more. Next, learn how to triangulate multiple data sources to develop more nuanced insights and an improved understanding of customer sentiments using a combination of Cognitive AI API capabilities. Discover how companies around the world are using these APIs to access the powerful Bing knowledge graph and index for scenarios like plagiarism detection, fraud detection and reinforcing their existing datasets, and many more. Leverage these APIs to grow your business.</p>

<p>To learn more about how you can infuse applications and webpages with contextual intelligence and engaging experiences, visit the <a href="https://www.bing.com/partners/developers" target="_blank">Bing for Partners site</a>, follow us on <a href="https://www.facebook.com/BingForPartners" target="_blank">Facebook</a>, and join the <a href="https://www.linkedin.com/groups/12150358/" target="_blank">Bing APIs LinkedIn group</a> for news and updates.</p>

<p>- Bing APIs Team</p>
]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">8af1a06f-b01f-4311-8119-2d5fabfbc203</guid>
      <link>https://blogs.bing.com/Engineering-Blog/2019-06/connect-with-the-bing-search-apis-team-at-microsoft-inspire-2019-in-las-vegas</link>
      <author>Bing Team</author>
      <category>Microsoft Inspire</category>
      <category>Microsoft Inspire 2019</category>
      <title>Connect with the Bing Search APIs team at Microsoft Inspire 2019</title>
      <description>The Bing Search APIs team will be at Microsoft Inspire 2019, in Las Vegas, Nevada, July 14 through the 18th. If you are registered for the event, stop by the Bing Search APIs booth in the AI area to learn more about the rich Cognitive Services search features and solutions available on the Bing Search APIs platform.</description>
      <pubDate>Wed, 05 Jun 2019 09:00:12 Z</pubDate>
      <content><![CDATA[<p>The Bing Search APIs team will be at <a href="https://partner.microsoft.com/en-US/inspire" target="_blank"> Microsoft Inspire 2019</a>, in Las Vegas, Nevada, July 14 through the 18<sup>th</sup>. If you are registered for the event, stop by the Bing Search APIs booth in the AI area to learn more about the rich Cognitive Services search features and solutions available on the Bing Search APIs platform, including:</p>

<ul>
	<li>Bing Search APIs, including web, news, image, video, entity, and more</li>
	<li>Bing Custom Search API</li>
	<li>Bing Visual Search API</li>
	<li>Bing Statistics, Bing Autosuggest, and Bing Spellcheck</li>
	<li>And more</li>
</ul>

<p>Bing Search APIs provide flexible, state-of-the-art, end-to-end search services, that enable users to access the right information from billions of web documents, images, videos and more. Help your customers extract various kinds of content, gain valuable insights, and protect your business with features such as fraud and plagiarism detection.<br />
<br />
<img alt="Microsoft Ignite" src="/BingBlogs/media/Developer-Blog/2019/06/BingSearchAPIs_Ignite.jpg" /></p>

<p>To learn more about how you can transform your apps, webpages, and other experiences, visit the <a href="https://www.bing.com/partners/developers" target="_blank">Bing for Partners site</a> and join the <a href="https://www.linkedin.com/groups/12150358/" target="_blank">Bing APIs LinkedIn group</a> for news and updates.</p>

<p>- Bing APIs Team</p>
]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">fa91b039-a7c1-41af-b0b8-267434a605ad</guid>
      <link>https://blogs.bing.com/Engineering-Blog/2019-04/bling-fire-tokenizer-released-to-open-source</link>
      <author>Bing Team</author>
      <category>Beyond Language and Understanding team</category>
      <category>Bling</category>
      <category>Bling FIRE Tokenizer</category>
      <category>FInite state machine and Regular Expression manipulation</category>
      <category>FIRE</category>
      <category>lemmatization</category>
      <category>tokenizer</category>
      <title>Bling FIRE Tokenizer Released to Open Source</title>
      <description>The Bling team in Bing Web Data is proud to announce that we&amp;rsquo;ve released Bling FIRE (FInite state machine and Regular Expression manipulation) library to the open source community.</description>
      <pubDate>Thu, 25 Apr 2019 09:08:28 Z</pubDate>
      <content><![CDATA[<p>The Bling team (Beyond Language and Understanding team) in Bing Web Data is proud to announce that we&rsquo;ve released <a href="https://github.com/Microsoft/BlingFire" target="_blank">Bling FIRE</a> (FInite state machine and Regular Expression manipulation) library to the open source community.</p>

<p>Bling FIRE is a library that allows construction of efficient tokenizers, sentence breakers, word segmentations, multi-word expression matching, unknown word-guessing, stemming/lemmatization, etc. It is designed for high speed and quality tokenization of natural language text.</p>

<p>The first application released on this library is Bling FIRE, which is the tokenizer used internally by Bing for all its Deep Learning based projects. It supports all whitespace separated languages and follows closely the NLTK tokenization logic with additional fixes and added breaking for hyphenated words:</p>

<p><tt><code><strong>NLTK:</strong> The South <mark>Florida/Miami</mark> area has previously hosted the event 10 times .</code></tt></p>

<p><tt><code><strong>FIRE:</strong> The South <mark>Florida / Miami</mark> area has previously hosted the event 10 times .</code></tt></p>

<p><tt><code><strong>NLTK:</strong> Marconi &#39;s European experiments in July <mark>1899&mdash;Marconi</mark> may have transmitted the letter S ( dot/dot/dot ) in a naval demonstration</code></tt></p>

<p><tt><code><strong>FIRE:</strong> Marconi &#39;s European experiments in July <mark>1899 &mdash; Marconi</mark> may have transmitted the letter S ( dot / dot / dot ) in a naval demonstration</code></tt></p>

<p><tt><code><strong>NLTK:</strong> Go to C : <mark>\Users\Public\Documents\hyper - v\Virtual hard disks\</mark> and delete <mark>MSIT_Win10.VHDX</mark> .</code></tt></p>

<p><tt><code><strong>FIRE:</strong> Go to C : <mark>\ Users \ Public \ Documents \ hyper - v \ Virtual hard disks \</mark> and delete <mark>MSIT_Win10<mark> . VHDX</mark></mark></code></tt></p>

<p><tt><code><strong>NLTK:</strong> In the confirmation window , click <mark>OK.</mark> Review the FMT Real - time Report ES .</code></tt></p>

<p><tt><code><strong>FIRE:</strong> In the confirmation window , click <mark>OK .</mark> Review the FMT Real - time Report ES .</code></tt></p>

<p>The key advantage of this library is speed &ndash; it is 10x faster than existing open source tokenizers:</p>

<table border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;" width="300">
	<tbody>
		<tr>
		</tr>
	</tbody>
	<thead>
		<tr>
			<th>System</th>
			<th>Avg Run Time (Second Per 10,000 Passages)</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>Bling FIRE</td>
			<td>0.823</td>
		</tr>
		<tr>
			<td>SpaCy</td>
			<td>8.653</td>
		</tr>
		<tr>
			<td>NLTK</td>
			<td>17.821</td>
		</tr>
	</tbody>
</table>

<p>Since getting released, the project has seen coverage in specialized news sites and already has more than 1000 stars on GitHub.</p>

<p>You can get access to the library and find out more details at: <a href="https://github.com/Microsoft/BlingFire" target="_blank">https://github.com/Microsoft/BlingFire</a>. To reach out to the team with questions or comments, connect with us on <a href="https://stackoverflow.com/questions/tagged/blingfire" target="_blank">Stack Overflow</a>.</p>

<p>- Bling Web Data Team</p>

<p><small>Copyright &copy; Microsoft Corporation. All rights reserved. Bling Fire is licensed under the MIT License.</small></p>
]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">ba02f983-d12c-430d-b1df-1968559ffef3</guid>
      <link>https://blogs.bing.com/Engineering-Blog/2019-04/talk-shop-with-the-bing-search-apis-team-at-microsoft-build-2019</link>
      <author>Bing Team</author>
      <category>Bing Search APIs</category>
      <category>Build</category>
      <category>Build 2019</category>
      <category>Cognitive Services</category>
      <category>Microsoft Build</category>
      <category>Microsoft Build 2019</category>
      <title>Talk Shop with the Bing Search APIs Team at Microsoft Build 2019</title>
      <description>Microsoft Build 2019 is taking place in Seattle, Washington, May 6 to May 8, and the Bing Search APIs team will be there. If you are registered for the event, stop by the Bing Search APIs booth to check out the rich web search API solutions available, all powered by Bing.</description>
      <pubDate>Mon, 15 Apr 2019 09:30:37 Z</pubDate>
      <content><![CDATA[<p><a href="https://www.microsoft.com/en-us/build" target="_blank">Microsoft Build 2019</a> is taking place in Seattle, Washington, May 6 to May 8, and the Bing Search APIs team will be there. If you are registered for the event, stop by the Bing Search APIs booth to check out the rich web search API solutions available, all powered by Bing.</p>

<p>The Internet is always changing and evolving. If you want to extract this vast knowledge of the Web, you can use various Bing web search APIs to do that with solutions that help you extract various kinds of content (e.g., websites, images, videos, entities, and local businesses) from the web and cool insights (e.g., trending news images, video, visually similar products, etc.).<br />
<br />
Come by our booth to learn more about these flexible Cognitive Services that can be customized to fit your application needs. Also, hear first-hand about the new features available for scenarios such as fraud detection, plagiarism detection, extracting sentiments from across the web, and more.<br />
<br />
<img alt="Microsoft Build" src="/BingBlogs/media/Developer-Blog/2019/04/MicrosoftBuild_BingSearchAPIs.jpg" style="vertical-align: middle; display: block; margin: 0 auto;" /></p>

<p>If you are not able to attend Microsoft Build 2019, check for updates on the <a href="https://blogs.bing.com/Developers-Blog" target="_blank">Bing Developers blog</a> after the conference. To learn more about the API solutions from Bing, visit the <a href="https://www.bing.com/partners/developers" target="_blank">Bing for Partners site and join the </a><a href="https://www.linkedin.com/groups/12150358/" target="_blank">Bing APIs LinkedIn</a> group.</p>

<p>- Bing Search APIs Team</p>
]]></content>
    </item>
    <item>
      <guid
        isPermaLink="false">5195349d-4c10-440e-be0e-1d414bbec201</guid>
      <link>https://blogs.bing.com/Engineering-Blog/2019-03/how-to-track-customer-sentiment-online-with-bing-news-search-api-and-text-analytics-api</link>
      <author>Bing Team</author>
      <category>Bing News Search API</category>
      <category>Microsoft Cognitive Services</category>
      <category>Reputation Management</category>
      <category>Text Analytics</category>
      <title>How to track customer sentiment online with Bing News Search API and Text Analytics API</title>
      <description>Nothing is more important than your reputation. The reputation of a business or organization is built from several factors&amp;mdash;search results, social media mentions, and customer reviews. Bing News Search can serve as a powerful data provider to help you track and manage public sentiment about you, an organization, or a brand</description>
      <pubDate>Thu, 21 Mar 2019 10:03:23 Z</pubDate>
      <content><![CDATA[<p>Nothing is more important than your reputation. The old adage has never been more true with our reputations largely being formed by our presence online. For brands, this goes two-fold. The reputation of a business or organization is built from several factors&mdash;search results, social media mentions, and customer reviews. How we show up in search results impacts how we are perceived by the world. We work and live within a pull economy where people, customers, and employers are looking for you online. And when they find you, their decision to purchase, connect, or move on is ultimately based on your reputation.<br />
<br />
In a world where how you show up on search is key to how you are perceived, reputation management has become a function of monitoring and analyzing what your customers are saying about you online and in person. With the goal of building trust and maintaining positive control over your brand&rsquo;s reputation, there are many tools available to help with just that. There are tools that can monitor social media mentions, compare you to your competitors, notify you whenever your brand is referenced online, understand sentiment, and much more. With such a vast landscape of content out there, both positive and negative about your brand, keeping up can feel like a daunting task.</p>

<h3>Reputation Management with Bing News Search API</h3>

<p><a href="https://azure.microsoft.com/en-us/services/cognitive-services/bing-news-search-api/" target="_blank">Bing News Search</a> can serve as a powerful data provider to help you track and manage public sentiment about you, an organization, or brand. A Bing News Search pointed at a company&rsquo;s own name can populate an internal dashboard with new or trending news content regarding that group. Also, News Search can be pointed outward to help you track your competitors&rsquo; latest releases or initiatives.</p>

<p>With the Bing News Search API, you can extract headlines and excerpts from articles and return them in the response, making it easier to scan and track the content in an article, and much easier to build additional tools that leverage that data stream.</p>

<h3>How to track sentiment</h3>

<p>Tracking sentiment online can be done quickly with the help of Bing News Search as one of the tools in your reputation management toolkit. Search for news about businesses, people, and products that you care about and then use text analytics to programmatically detect sentiment of articles, social media mentions, and more.</p>

<p>For example, in the screenshot below, there are a couple of headlines that came back when we searched for news about &ldquo;Microsoft&rdquo; that we can check:</p>

<ul>
	<li>&ldquo;Microsoft&#39;s popular Halo Xbox games are coming to the PC&rdquo;</li>
	<li>&ldquo;Microsoft to start nagging users in April about the January 2020 Windows 7 end-of-support deadline&rdquo;</li>
</ul>
<img alt="Bing News Search Example" src="/BingBlogs/media/Developer-Blog/2019/03/BingNewsSearchExample.png" /><br />
&nbsp;
<p>Using the <a href="https://azure.microsoft.com/en-us/services/cognitive-services/text-analytics/" target="_blank">Text Analytics API</a>, also available via Cognitive Services, we can take those headlines and quickly detect sentiment that is returned as a numeric score, ranging from 0% (negative) to 100% (positive). See our results below:</p>

<p><strong>Positive Sentiment Score (93%)</strong> - &ldquo;Microsoft&#39;s popular Halo Xbox games are coming to the PC&rdquo;<br />
<br />
<img alt="Text Analytics Example - Positive Sentiment" src="/BingBlogs/media/Developer-Blog/2019/03/TextAnalyticsExample.png" /></p>

<p><strong>Neutral Sentiment Score (50%)</strong> &ndash; &ldquo;Microsoft to start nagging users in April about the January 2020 Windows 7 end-of-support deadline&rdquo;<br />
<br />
<img alt="Text Analytics Example - Neutral Sentiment" src="/BingBlogs/media/Developer-Blog/2019/03/TextAnalyticsExampleNeutral.png" /></p>

<p>Tracking mentions and gauging sentiment to help manage perception can be done just like that.<br />
<br />
To learn more about <a href="https://azure.microsoft.com/en-us/services/cognitive-services/bing-news-search-api/" target="_blank">Bing News Search API</a> and <a target="_blank">Text Analytics API</a>, go to <a href="https://azure.microsoft.com/en-us/services/cognitive-services/" target="_blank">https://azure.microsoft.com/en-us/services/cognitive-services/</a>.</p>

<p>&nbsp;- Bing APIs Team</p>
]]></content>
    </item>
  </channel>
</rss>