{"id":20845,"date":"2019-01-10T12:34:16","date_gmt":"2019-01-10T20:34:16","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/dotnet\/?p=20845"},"modified":"2019-02-24T18:24:51","modified_gmt":"2019-02-25T01:24:51","slug":"announcing-ml-net-0-9-machine-learning-for-net","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/announcing-ml-net-0-9-machine-learning-for-net\/","title":{"rendered":"Announcing ML.NET 0.9 \u2013 Machine Learning for .NET"},"content":{"rendered":"<p>&nbsp;<\/p>\n<div id=\"readme\" class=\"readme blob instapaper_body js-code-block-container\">\n<article class=\"markdown-body entry-content\">\n<h2><a id=\"user-content-announcing-mlnet-09---machine-learning-for-net\" class=\"anchor\" href=\"#announcing-mlnet-09---machine-learning-for-net\"><\/a>Announcing ML.NET 0.9 &#8211; Machine Learning for .NET<\/h2>\n<p><a href=\"https:\/\/user-images.githubusercontent.com\/1712635\/50993976-d2447b80-14cf-11e9-952c-77cc765a74b6.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"ML.NET logo\" src=\"https:\/\/user-images.githubusercontent.com\/1712635\/50993976-d2447b80-14cf-11e9-952c-77cc765a74b6.png\" alt=\"alt text\" \/><\/a><\/p>\n<p><a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> is an open-source and cross-platform machine learning framework (Windows, Linux, macOS) for .NET developers. Using ML.NET, developers can leverage their existing tools and skillsets to develop and infuse custom AI into their applications by creating custom machine learning models.<\/p>\n<p><a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> allows you to create and use machine learning models targeting common tasks such as classification, regression, clustering, ranking, recommendations and anomaly detection. It also supports the broader open source ecosystem by proving integration with popular deep-learning frameworks like TensorFlow and interoperability through ONNX. Some common use cases of <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> are scenarios like Sentiment Analysis, Recommendations, Image Classification, Sales Forecast, etc. Please see our <a href=\"https:\/\/github.com\/dotnet\/machinelearning-samples\">samples<\/a> for more scenarios.<\/p>\n<p>Today we\u2019re happy to announce the release of <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> 0.9. ( <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> 0.1 was released at \/\/Build 2018). This release focuses on: API improvements, model explainability and feature contribution, support for GPU when scoring ONNX models and significant clean up of the framework internals.<\/p>\n<p>This blog post provides details about the following topics in the <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> 0.9 release:<\/p>\n<ul>\n<li><a href=\"#feature-contribution-calculation-and-other-model-explainability-improvements\" rel=\"nofollow\">Feature Contribution Calculation (FCC) and other Model Explainability improvements<\/a><\/li>\n<li><a href=\"#added-gpu-support-for-onnx-transform\" rel=\"nofollow\">Added GPU support for ONNX Transform<\/a><\/li>\n<li><a href=\"#new-visual-studio-mlnet-project-templates-preview\" rel=\"nofollow\">New Visual Studio ML.NET project templates preview<\/a><\/li>\n<li><a href=\"#additional-api-improvements-in-mlnet-09\" rel=\"nofollow\">Additional API improvements in ML.NET 0.9<\/a><\/li>\n<\/ul>\n<h2><a id=\"feature-contribution-calculation-and-other-model-explainability-improvements\" class=\"anchor\" href=\"#feature-contribution-calculation-and-other-model-explainability-improvements\"><\/a>Feature Contribution Calculation and other model explainability improvements<\/h2>\n<h3><a id=\"user-content-feature-contribution-calculation-fcc\" class=\"anchor\" href=\"#feature-contribution-calculation-fcc\"><\/a>Feature Contribution Calculation (FCC)<\/h3>\n<p>The <strong>Feature Contribution Calculation (FCC for short)<\/strong> shows which features are most influential for a model\u2019s prediction on a particular and individual data sample by determining the amount each feature contributed to the model\u2019s score for that particular data sample.<\/p>\n<p>FCC is particulary important when you initialy have a lot of features\/attributes in your historic data and you want to select and use only the most important features because using too many features (especially if including features that don&#8217;t influence the model) can reduce the model&#8217;s performance and accuracy. Therefore, with FCC you can identify the most influential positive and negative contributions from the initial attribute set.<\/p>\n<p>You can use FCC to produce feature contributions with code like the following:<\/p>\n<div class=\"highlight highlight-source-cs\">\n<pre class=\"lang:default decode:true\">\/\/ Create a Feature Contribution Calculator\r\n\/\/ Calculate the feature contributions for all features given trained model parameters\r\n\r\nvar featureContributionCalculator = mlContext.Model.Explainability.FeatureContributionCalculation(model.Model, model.FeatureColumn, numPositiveContributions: 11, normalize: false);\r\n\r\n\/\/ FeatureContributionCalculatingEstimator can be use as an intermediary step in a pipeline. \r\n\/\/ The features retained by FeatureContributionCalculatingEstimator will be in the FeatureContribution column.\r\n\r\nvar pipeline = mlContext.Model.Explainability.FeatureContributionCalculation(model.Model, model.FeatureColumn, numPositiveContributions: 11)\r\n    .Append(mlContext.Regression.Trainers.OrdinaryLeastSquares(featureColumn: \"FeatureContributions\"));<\/pre>\n<\/div>\n<pre><code>The output of the above code is:\r\n\r\n  Label   Score   BiggestFeature         Value   Weight   Contribution\r\n\r\n  24.00   27.74   RoomsPerDwelling        6.58    98.55   39.95\r\n  21.60   23.85   RoomsPerDwelling        6.42    98.55   39.01\r\n  34.70   29.29   RoomsPerDwelling        7.19    98.55   43.65\r\n  33.40   27.17   RoomsPerDwelling        7.00    98.55   42.52\r\n<\/code><\/pre>\n<p>FCC can be used as a step in the ML pipeline and complements the current explainability tools in <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> like Permutation Feature Importance (PFI). With <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> 0.8, we already provided <a href=\"https:\/\/blogs.msdn.microsoft.com\/dotnet\/2018\/12\/04\/announcing-ml-net-0-8-machine-learning-for-net\/#model-explainability\" rel=\"nofollow\">initial APIs for model explainability<\/a> to help machine learning developers better understand the feature importance of models (&#8220;Overall Feature Importance&#8221;) and create (&#8220;Generalized Additive Models&#8221;)<\/p>\n<p><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/master\/docs\/samples\/Microsoft.ML.Samples\/Dynamic\/FeatureContributionCalculationTransform.cs\">Sample for FCC<\/a>.<\/p>\n<h3><a id=\"user-content-new-ml-tasks-and-other-model-explainability-improvements\" class=\"anchor\" href=\"#new-ml-tasks-and-other-model-explainability-improvements\"><\/a>Additional model explainability improvements for features selection<\/h3>\n<p>In addition to FCC, we also extended the capabilities of Permutation Feature Importance (PFI) and Generalized Additive Models (GAMs):<\/p>\n<ul>\n<li>PFI now supports most learning tasks: Regression, Binary Classification, Multiclass Classification, and Ranking.<\/li>\n<li>PFI now allows you to calculate confidence intervals on feature importance scores to allow you to get a better estimate of the mean.<\/li>\n<li>GAMs now supports Feature Contribution Calculation (FCC) so you can quickly see which features drove an individual prediction.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/master\/docs\/samples\/Microsoft.ML.Samples\/Dynamic\/PermutationFeatureImportance\/PfiBinaryClassificationExample.cs\">Sample for PFI<\/a>.<\/p>\n<h2><a id=\"added-gpu-support-for-onnx-transform\" class=\"anchor\" href=\"#added-gpu-support-for-onnx-transform\"><\/a>Added GPU support for ONNX Transform<\/h2>\n<p><a href=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994115-3d8e4d80-14d0-11e9-8612-6f0531befda8.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"ONNX logo image\" src=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994115-3d8e4d80-14d0-11e9-8612-6f0531befda8.png\" alt=\"alt text\" \/><\/a><\/p>\n<p>In <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> 0.9 we added the capability to score\/run <a href=\"https:\/\/onnx.ai\/\" rel=\"nofollow\">ONNX<\/a> models using <a href=\"https:\/\/developer.nvidia.com\/cuda-downloads\" rel=\"nofollow\">CUDA 10.0<\/a> enabled GPUs (such as most NVIDIA GPUs), by integrating the high performance <a href=\"https:\/\/github.com\/Microsoft\/onnxruntime\">ONNX Runtime<\/a> library. GPU support for ONNX models is currently available only on Windows 64-bit (not x86,yet), with Linux and Mac support coming soon. Learn <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/d9270c9c42da70817e8a71e39a069d2339f6972d\/src\/Microsoft.ML.OnnxTransform\/OnnxTransform.cs#L46\">here<\/a> about supported ONNX\/CUDA formats\/version.<\/p>\n<p><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/master\/docs\/samples\/Microsoft.ML.Samples\/Dynamic\/OnnxTransform.cs\">Sample code<\/a> plus a Test <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/#L151\">here<\/a>.<\/p>\n<h2><a id=\"new-visual-studio-mlnet-project-templates-preview\" class=\"anchor\" href=\"#new-visual-studio-mlnet-project-templates-preview\"><\/a>New Visual Studio ML.NET project templates preview<\/h2>\n<p><a href=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994182-73cbcd00-14d0-11e9-8659-78a26d7ffd38.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"VS Logo icon\" src=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994182-73cbcd00-14d0-11e9-8659-78a26d7ffd38.png\" alt=\"alt text\" \/><\/a><\/p>\n<p>We are pleased to announce a preview of Visual Studio project templates for <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a>. These templates make it very easy to get started with machine learning. You can download these templates from <a href=\"https:\/\/aka.ms\/mlnettemplates\" rel=\"nofollow\">Visual Studio gallery here<\/a>.<\/p>\n<p>The templates cover the following scenarios:<\/p>\n<ul>\n<li><strong>ML.NET Console Application<\/strong> \u2013 Sample app that demonstrates how you can use a machine learning model in your application.<\/li>\n<li><strong>ML.NET Model Library<\/strong> \u2013 Creates a new machine learning model library which you can consume from within your application.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994231-9362f580-14d0-11e9-9c3e-28261c02ee0e.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" src=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994231-9362f580-14d0-11e9-9c3e-28261c02ee0e.png\" alt=\"VS ML.NET templates screenshot\" \/><\/a><\/p>\n<h2><a id=\"additional-api-improvements-in-mlnet-09\" class=\"anchor\" href=\"#additional-api-improvements-in-mlnet-09\"><\/a>Additional API improvements in ML.NET 0.9<\/h2>\n<p>In this release we have also added other enhancements to our APIs such as the following.<\/p>\n<h3><a id=\"user-content-text-data-loading-is-simplified\" class=\"anchor\" href=\"#text-data-loading-is-simplified\"><\/a>Text data loading is simplified<\/h3>\n<p>In <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> 0.9, when using the TextLoader class you can either directly provide the attributes\/columns in the file as you were able to do it in previous versions or as a new improvement and optional choice you can instead specify those columns\/attributes through a data-model class.<\/p>\n<p>Before <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> v0.9 you always needed to have explicit code like the following:<\/p>\n<div class=\"highlight highlight-source-cs\">\n<pre class=\"lang:default decode:true\">\/\/\r\n\/\/... Your code...\r\nvar mlContext = new MLContext();\r\n\r\n\/\/ Create the reader: define the data columns and where to find them in the text file.\r\nvar reader = mlContext.Data.CreateTextReader(new[] {\r\n        new TextLoader.Column(\"IsOver50K\", DataKind.BL, 0),\r\n        new TextLoader.Column(\"Workclass\", DataKind.TX, 1)\r\n    },hasHeader: true\r\n);\r\nvar dataView = reader.Read(dataPath);<\/pre>\n<\/div>\n<p>With 0.9, you can simply load the type as follows.<\/p>\n<div class=\"highlight highlight-source-cs\">\n<pre class=\"lang:default decode:true  \">\/\/\r\n\/\/... Your code in your class...\r\nvar mlContext = new MLContext();\r\n\r\n\/\/ Read the data into a data view.\r\nvar dataView = mlContext.Data.ReadFromTextFile&lt;InspectedRow&gt;(dataPath, hasHeader: true);\r\n\r\n\/\/ The data model. This type will be used from multiple code. \r\nprivate class InspectedRow\r\n{\r\n    [LoadColumn(0)]\r\n    public bool IsOver50K { get; set; }\r\n    [LoadColumn(1)]\r\n    public string Workclass { get; set; }\r\n}<\/pre>\n<\/div>\n<p><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/master\/test\/Microsoft.ML.Tests\/Scenarios\/Api\/Estimators\/SimpleTrainAndPredict.cs#L24\">Sample code<\/a>.<\/p>\n<h3><a id=\"user-content-get-prediction-confidence-factor\" class=\"anchor\" href=\"#get-prediction-confidence-factor\"><\/a>Get prediction confidence factor<\/h3>\n<p>With Calibrator Estimators, in addition to the score column you can get when evaluating the quality of your model you can now get a probability column as well (probability of this example being on the predicted class; prediction confidence indicator).<\/p>\n<p>For instance, you could get a list of the probabilities per each predicted value, like in the following list:<\/p>\n<pre><code>Score - 0.458968    Probability 0.4670409\r\nScore - 0.7022135   Probability 0.3912723\r\nScore 1.138822      Probability 0.8703266\r\n<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/\">Sample code<\/a><\/p>\n<h3><a id=\"user-content-new-key-value-mapping-estimator-and-transform\" class=\"anchor\" href=\"#new-key-value-mapping-estimator-and-transform\"><\/a>New Key-Value mapping estimator and transform<\/h3>\n<p>This feature replaces the TermLookupTransform and provides a way to\nspecify the mapping betweeen two values (note this is specified and not\ntrained). You can specify the mapping by providing a keys list and\nvalues list that must be equal in size.<\/p>\n<p><a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/master\/test\/Microsoft.ML.Tests\/Transformers\/ValueMappingTests.cs\">Sample code<\/a><\/p>\n<h3><a id=\"user-content-other-improvements-and-changes\" class=\"anchor\" href=\"#other-improvements-and-changes\"><\/a>Other improvements and changes<\/h3>\n<ul>\n<li>Allow <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> to run on Windows Nano containers or Windows machines without Visual C++ runtime installed.<\/li>\n<li>Metadata Support In DataView Construction with information about the model, like the evaluation metrics which is encoded metadata into the model and can be programatically extracted and therefore visualized in any tool. This feature can be useful for ISVs.<\/li>\n<li>For a with list of breaking changes in v0.9 that impacted the <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> samples, check this <a href=\"https:\/\/gist.github.com\/CESARDELATORRE\/38182e5f86e9df69e5dcf2f83936b2f5\">Gist here<\/a><\/li>\n<\/ul>\n<h3><a id=\"user-content-moving-forward\" class=\"anchor\" href=\"#moving-forward\"><\/a>Moving forward<\/h3>\n<p>While on the past 9 months we have been adding new features and improving ML.NET, in the forthcoming 0.10, 0.11 and upcoming releases before we reach v1.0, we will focus on the overall stability of the package, continue to refine the API, increase test coverage and improve documentation and samples.<\/p>\n<h2><a id=\"user-content-provide-your-feedback-through-the-new-mlnet-survey\" class=\"anchor\" href=\"#provide-your-feedback-through-the-new-mlnet-survey\"><\/a>Provide your feedback through the new ML.NET survey!<\/h2>\n<p><a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> is new, and as we are developing it, we would love to get your feedback! Please fill out the brief survey below and help shape the future of <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> by telling us about your usage and interest in Machine Learning and <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a>.<\/p>\n<p><a href=\"https:\/\/www.research.net\/r\/mlnet-survey\" rel=\"nofollow\">Take the survey now!<\/a><\/p>\n<p><a href=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994275-b7bed200-14d0-11e9-8855-91074af44054.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Survey icon\" src=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994275-b7bed200-14d0-11e9-8855-91074af44054.png\" alt=\"alt text\" \/><\/a><\/p>\n<h2><a id=\"user-content-get-started\" class=\"anchor\" href=\"#get-started\"><\/a>Get started!<\/h2>\n<p><a href=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994359-ec328e00-14d0-11e9-87d4-cb10d6171339.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" style=\"max-width: 100%;\" title=\"Get started icon\" src=\"https:\/\/user-images.githubusercontent.com\/1712635\/50994359-ec328e00-14d0-11e9-87d4-cb10d6171339.png\" alt=\"alt text\" \/><\/a><\/p>\n<p>If you haven\u2019t already get started with <a href=\"https:\/\/www.microsoft.com\/net\/learn\/apps\/machine-learning-and-ai\/ml-dotnet\/get-started\" rel=\"nofollow\">ML.NET here<\/a>.<\/p>\n<p>Next, going further explore some other resources:<\/p>\n<ul>\n<li>Tutorials and resources at the <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/machine-learning\/\" rel=\"nofollow\">Microsoft Docs ML.NET Guide<\/a><\/li>\n<li>Code samples at the <a href=\"https:\/\/github.com\/dotnet\/machinelearning-samples\">machinelearning-samples GitHub repo<\/a><\/li>\n<li>Important ML.NET concepts for understanding the new API are introduced <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/machine-learning\/basic-concepts-model-training-in-mldotnet\" rel=\"nofollow\">here<\/a><\/li>\n<li>&#8220;How to&#8221; guides that show how to use these APIs for a variety of scenarios can be found <a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/machine-learning\/how-to-guides\/\" rel=\"nofollow\">here<\/a><\/li>\n<\/ul>\n<p>We will appreciate your feedback by filing issues with any suggestions or enhancements in the <a href=\"https:\/\/github.com\/dotnet\/machinelearning\">ML.NET GitHub repo<\/a> to help us shape <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> and make .NET a great platform of choice for Machine Learning.<\/p>\n<p>Thanks and happy coding with <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a>!<\/p>\n<p>The <a href=\"http:\/\/dot.net\/ml\" rel=\"nofollow\">ML.NET<\/a> Team.<\/p>\n<p><em>This blog was authored by Cesar de la Torre and Pranav Rastogi plus additional contributions from the ML.NET team<\/em><\/p>\n<\/article>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Announcing ML.NET 0.9 &#8211; Machine Learning for .NET ML.NET is an open-source and cross-platform machine learning framework (Windows, Linux, macOS) for .NET developers. Using ML.NET, developers can leverage their existing tools and skillsets to develop and infuse custom AI into their applications by creating custom machine learning models. ML.NET allows you to create and [&hellip;]<\/p>\n","protected":false},"author":362,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[685,688,691],"tags":[4,93,96],"class_list":["post-20845","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-machine-learning","category-ml-dotnet","tag-net","tag-machine-learning","tag-ml-net"],"acf":[],"blog_post_summary":"<p>&nbsp; Announcing ML.NET 0.9 &#8211; Machine Learning for .NET ML.NET is an open-source and cross-platform machine learning framework (Windows, Linux, macOS) for .NET developers. Using ML.NET, developers can leverage their existing tools and skillsets to develop and infuse custom AI into their applications by creating custom machine learning models. ML.NET allows you to create and [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/20845","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/362"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=20845"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/20845\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=20845"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=20845"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=20845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}