{"id":33425,"date":"2021-06-22T07:00:06","date_gmt":"2021-06-22T14:00:06","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/dotnet\/?p=33425"},"modified":"2021-06-23T11:06:25","modified_gmt":"2021-06-23T18:06:25","slug":"ml-net-june-updates-model-builder","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/ml-net-june-updates-model-builder\/","title":{"rendered":"ML.NET June Updates"},"content":{"rendered":"<p><a href=\"https:\/\/dot.net\/ml\" target=\"_blank\" rel=\"noopener\">ML.NET<\/a> is an open-source, cross-platform machine learning framework for .NET developers that enables integration of custom machine learning into .NET apps.<\/p>\n<p>We are excited to announce new versions of ML.NET and Model Builder which bring a ton of awesome updates!<\/p>\n<p>In this post, we\u2019ll cover the following items:<\/p>\n<ol>\n<li><a href=\"#ml-net-release\">ML.NET Release<\/a><\/li>\n<li><a href=\"#model-builder-updates\">Model Builder Updates<\/a><\/li>\n<li><a href=\"#ml-net-survey-results\">ML.NET Survey Results<\/a><\/li>\n<li><a href=\"#get-started-and-resources\">Get started and resources<\/a><\/li>\n<\/ol>\n<h2>ML.NET Release<\/h2>\n<p>The next release of ML.NET brings a long-awaited capability to the framework: ARM support!<\/p>\n<h3>ML.NET on ARM<\/h3>\n<p>You can now perform training and inferencing with ML.NET on ARM64 and Apple M1 (in addition to Linux and macOS) devices which enables platform support for mobile and embedded devices as well as ARM-based servers.<\/p>\n<p>The following video shows training and inferencing on a Pinebook Pro laptop running Manjaro ARM Linux distribution:<\/p>\n<p><div style=\"width: 1920px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-33425-1\" width=\"1920\" height=\"1080\" loop preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/mlnet-arm-training.mp4?_=1\" \/><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/mlnet-arm-training.mp4\">https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/mlnet-arm-training.mp4<\/a><\/video><\/div><\/p>\n<p>There are still a few limitations when training and inferencing with ML.NET on ARM which will throw a <code>DLL not found<\/code> exception:<\/p>\n<ul>\n<li>Symbolic SGD, TensorFlow, OLS, TimeSeries SSA, TimeSeries SrCNN, and ONNX are not currently supported for training or inferencing.<\/li>\n<li>LightGBM is currently supported for inferencing, but not training.<\/li>\n<li>You can add LightGBM and ONNX support by compiling them for ARM, but they don\u2019t provide pre-compiled binaries for ARM\/ARM64.<\/li>\n<\/ul>\n<p>These changes for ARM support are currently in GitHub, so if you <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/main\/docs\/building\/unix-instructions.md#cross-compiling-for-arm\">build from source<\/a> you can get the latest bits and try it out (the official release of the next version of ML.NET will be in early July). If you are blocked by any of these limitations or would like to see different behavior when hitting them, please let us know by filing an issue in our <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/issues\/new\/choose\" target=\"_blank\" rel=\"noopener\">GitHub repo<\/a>.<\/p>\n<h3>ML.NET on Blazor Web Assembly<\/h3>\n<p>With .NET 6, you can also now perform some training and inference on Blazor Web Assembly (WASM). It has the same limitations as ARM with the following additions:<\/p>\n<ul>\n<li>You must currently set the <code>EnableMLUnsupportedPlatformTargetCheck<\/code> flag to <code>false<\/code> to install in Blazor.<\/li>\n<li>LDA and Matrix Factorization are not supported.<\/li>\n<\/ul>\n<p>Check out the <a href=\"https:\/\/github.com\/bartczernicki\/MachineLearning-BaseballPrediction-BlazorApp\" target=\"_blank\" rel=\"noopener\">Machine Learning Baseball Prediction repo<\/a> (and the related Community Standup <a href=\"https:\/\/youtu.be\/HBEGPANJnr4\" target=\"_blank\" rel=\"noopener\">video<\/a>) which has examples of using ML.NET in Blazor Web Assembly.<\/p>\n<p>See the <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/master\/docs\/release-notes\/1.5.5\/release-1.5.5.md\" target=\"_blank\" rel=\"noopener\">release notes<\/a> for more details on this release of ML.NET.<\/p>\n<h2>Model Builder Updates<\/h2>\n<p>We recently announced several big changes to Model Builder as part of a preview release, including:<\/p>\n<ul>\n<li>Config-based training with generated code-behind files<\/li>\n<li>Restructured Advanced Data Options<\/li>\n<li>Redesigned Consume step<\/li>\n<\/ul>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/03\/solution-explorer-expanded.png\"><img decoding=\"async\" class=\"alignnone wp-image-32286 size-full\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/03\/solution-explorer-expanded.png\" alt=\"Solution Explorer with ML.NET mbconfig, ML.NET June Updates\" width=\"408\" height=\"283\" srcset=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/03\/solution-explorer-expanded.png 408w, https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/03\/solution-explorer-expanded-300x208.png 300w\" sizes=\"(max-width: 408px) 100vw, 408px\" \/><\/a><\/p>\n<p>These features and enhancements, which you can learn more about from our previous <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/ml-net-and-model-builder-march-updates\/\" target=\"_blank\" rel=\"noopener\">blog post<\/a>, are now available in the public feed. Update your version of Model Builder to access the newest features.<\/p>\n<h3>Project templates<\/h3>\n<p>There is a new <em>Project templates<\/em> section in Model Builder\u2019s Consume step which allows you to generate projects that consume your model. These projects are starting points for model deployment and consumption.<\/p>\n<p><img decoding=\"async\" class=\"alignnone\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/mb-project-templates.png\" alt=\"Project templates in Model Builder, ML.NET June Updates\" width=\"681\" height=\"200\" \/><\/p>\n<p>With this release, you can now add a <strong>console app<\/strong> or a <strong>minimal Web API<\/strong> (as described in this <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/serve-ml-net-models-as-http-apis-with-minimal-configuration\/\" target=\"_blank\" rel=\"noopener\">blog post<\/a>) to your solution.<\/p>\n<p>We plan to add support for more project \/ app types, such as Azure Functions, as we get more feedback (which you can leave in the <a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\" target=\"_blank\" rel=\"noopener\">Model Builder GitHub repo<\/a>).<\/p>\n<h3>New and improved AutoML<\/h3>\n<p>We have also started collaborating with Microsoft Research teams <a href=\"https:\/\/github.com\/Microsoft\/nni\">NNI<\/a> (Neural Network Intelligence) and <a href=\"https:\/\/github.com\/Microsoft\/flaml\">FLAML<\/a> (Fast and Lightweight AutoML) to update ML.NET&#8217;s AutoML implementation.<\/p>\n<p>The partnership with these teams is important in the short- and long-term, and some of the benefits to ML.NET include:<\/p>\n<ul>\n<li>Enabling AutoML support for all ML.NET scenarios<\/li>\n<li>Allowing more precise control over the hyperparameter search space<\/li>\n<li>Enabling more training environments, including local, Azure, and on-prem distributed training<\/li>\n<li>Opening up future collaborations on advanced ML tech, like Network Architecture Search (NAS)<\/li>\n<\/ul>\n<p>In the first implementation iteration, which is a part of this Model Builder release, our teams worked on decreasing the training failure rate, increasing the number of models explored in the given time and CPU resources, and improving overall training performance.<\/p>\n<h4>Benchmark testing<\/h4>\n<p>The team performed benchmark testing to ensure the changes to AutoML are improving the experience. Please note that this is an analysis of short runtimes; for most datasets that will be used to train production-level models, we recommend longer runtimes to allow AutoML to converge on the best model.<\/p>\n<p>These benchmarks run on a standard D32s_v4 machine, and the training constraints are 1m1c, 10m1c and 30m1c (m for minutes and c for cores). There was no restriction on memory usage limit for each trial, and the maximum parallel experiments allowed was 30.<\/p>\n<p>While 51 datasets were evaluated for each AutoML version, the evaluation metrics (AUC, Log loss, and R-Squared) are calculated based only on the datasets which shared success among the two versions.<\/p>\n<p>Below is a summary of the benchmark testing so far:<\/p>\n<h5>Number of models explored<\/h5>\n<p>The new implementation of AutoML <strong>greatly increases the number of models that are explored<\/strong> for 1-minute train time, 10-minute train time, and 30-minute train time.<\/p>\n<p><img decoding=\"async\" class=\"alignnone\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/automl-models-explored.png\" alt=\"Number of models explored comparison, ML.NET June Updates\" width=\"2029\" height=\"1072\" \/><\/p>\n<blockquote><p>Note: More models explored is better.<\/p><\/blockquote>\n<h5>Average timeout error rate<\/h5>\n<p>The new implementation of AutoML <strong>improves the timeout error rate<\/strong> for 1-minute train time, 10-minute train time, and 30-minute train time.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/automl-error-rate.png\" alt=\"Number of models explored comparison\" \/><\/p>\n<blockquote><p>Note: <em>Error<\/em> is defined as when AutoML training times out in the given amount of train time without any model explored; <em>error rate<\/em>, or failure ratio, is defined as the percentage of datasets that finish AutoML training without any models found. <strong>A smaller error rate is better<\/strong>.<\/p><\/blockquote>\n<p>The team used several approaches for finding the first model faster during AutoML training, including:<\/p>\n<ul>\n<li>Starting with a smaller model<\/li>\n<li>Starting with more cost-efficient parameters<\/li>\n<li>Sub-sampling (for large datasets)<\/li>\n<\/ul>\n<h5>Binary classification model performance (Area Under the Curve, or AUC)<\/h5>\n<p>The new implementation of AutoML <strong>decreases the AUC for 1-minute train time<\/strong> but <strong>improves the AUC for 10-minute train time and 30-minute train time<\/strong>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/automl-auc.png\" alt=\"Number of models explored comparison, ML.NET June Updates\" width=\"2065\" height=\"1127\" \/><\/p>\n<blockquote><p>Note: AUC closer to 1 is better.<\/p><\/blockquote>\n<h5>Multiclass classification model performance (Accuracy)<\/h5>\n<p>The new implementation of AutoML <strong>decreases the accuracy for 1-minute train time<\/strong> but <strong>improves the accuracy for 10-minute train time and 30-minute train time<\/strong>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/automl-accuracy.png\" alt=\"Number of models explored comparison, ML.NET June Updates\" width=\"2068\" height=\"1091\" \/><\/p>\n<blockquote><p>Note: Accuracy closer to 1 is better.<\/p><\/blockquote>\n<h5>Regression model performance (R-Squared)<\/h5>\n<p>The new implementation of AutoML <strong>improves R-Squared<\/strong> for 1-minute train time, 10-minute train time, and 30-minute train time.<\/p>\n<p><img decoding=\"async\" class=\"alignnone\" src=\"https:\/\/devblogs.microsoft.com\/dotnet\/wp-content\/uploads\/sites\/10\/2021\/06\/automl-r-squared.png\" alt=\"Number of models explored comparison, ML.NET June Updates\" width=\"2054\" height=\"1190\" \/><\/p>\n<blockquote><p>Note: R-Squared closer to 1 is better.<\/p><\/blockquote>\n<h3>Bug fixes<\/h3>\n<p>Thank you to everyone who tried out the Preview and left feedback! Based on feedback and bugs filed from this Preview, we were able to make a ton of fixes and improvements, some of which include:<\/p>\n<ul>\n<li>Cancelling training does not discard current results (<a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\/issues\/697\" target=\"_blank\" rel=\"noopener\">Issue 697<\/a>)<\/li>\n<li>GPU extension failing (<a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\/issues\/1268\" target=\"_blank\" rel=\"noopener\">Issue 1268<\/a>)<\/li>\n<li>Detect CUDA and cuDNN versions for GPU training (<a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\/issues\/1152\" target=\"_blank\" rel=\"noopener\">Issue 1152<\/a>)<\/li>\n<li>Advanced data options dark theme fix (<a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\/issues\/1264\" target=\"_blank\" rel=\"noopener\">Issue 1264<\/a>)<\/li>\n<li>Unintended page navigation (<a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\/issues\/1276\" target=\"_blank\" rel=\"noopener\">Issue 1276<\/a>)<\/li>\n<\/ul>\n<h3>What&#8217;s next in Model Builder<\/h3>\n<p>We are working on a lot of awesome features and improvements for Model Builder, a few of which we\u2019ve outlined below:<\/p>\n<h4>Easier collaboration and Git<\/h4>\n<p>This release of Model Builder only supports absolute paths for training datasets. This means that there is limited support for Git functionality, and sharing an mbconfig file between computers or accounts will require re-setting the local dataset location. We are tracking this fix in <a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\/issues\/1456\" target=\"_blank\" rel=\"noopener\">Issue 1456<\/a>, which will add better support for sharing and checking in\/out mbconfig files.<\/p>\n<h4>Performance improvements<\/h4>\n<p>The team is working on several performance improvements in the UI, particularly around interactions with large datasets.<\/p>\n<h4>Further AutoML improvements<\/h4>\n<p>The team will continue making improvements to AutoML including improving the current tuning algorithm so that it can search faster on a larger search space, more advanced training (e.g. via advanced featurizers and more trainers), and adding more scenarios to AutoML, including time series forecasting and anomaly detection.<\/p>\n<h4>Continue training<\/h4>\n<p>When you start training in Model Builder, you have to wait out the entire training time in order to get a model. This means that during training if you get, for example, a model with 95% accuracy that you\u2019d like to use but have 10 minutes left of training, you must wait for the rest of the 10 minutes in order to get and use that model. If you \u201cCancel Training\u201d at any point, you lose all progress.<\/p>\n<p>Additionally, if you spend 10 minutes training and don\u2019t get any models, or only get a few models with poor accuracy, you must start training over again with a larger train time in hopes that the next round will give you better models.<\/p>\n<p>The team is working on adding support for being able to \u201ccontinue\u201d training which means the ability to start training again after stopping (or in this case pausing) training. With this feature, the training progress is not reset after you pause training, and instead training will recover from the point that you stopped training. Model Builder can then use the training history to potentially select better algorithm hyperparameters and to pick a pipeline with better performance, resulting in a better model. This also enables the scenarios of being able to pause training early and get the best model without having to re-start training again.<\/p>\n<h4>Azure ML Datasets<\/h4>\n<p>Currently when you train in Model Builder with the Azure ML training environment, your data gets uploaded to an Azure Blob storage associated with an Azure ML workspace. This means that you can only choose local data for training.<\/p>\n<p>The ML.NET team is working with the Azure ML team to add Azure ML Datasets support so that you can choose to train on a dataset already in Azure. Alternatively, you will be able to create new Azure ML Datasets from local data within Model Builder.<\/p>\n<h2>ML.NET Survey Results<\/h2>\n<p>In a previous <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/ml-net-survey-machine-learning-in-net\/\" target=\"_blank\" rel=\"noopener\">post<\/a>, we asked for your feedback on Machine Learning in .NET.<\/p>\n<p>We received ~900 responses (THANK YOU!) and went over some of the results in the <a href=\"https:\/\/youtu.be\/o-WQyQc-rJ0?t=728\" target=\"_blank\" rel=\"noopener\">Machine Learning .NET Community Standup<\/a>.<\/p>\n<p>The key insights from this round of surveys include:<\/p>\n<ul>\n<li>Compared to surveys from the past 2 years,\n<ul>\n<li>More respondents have tried or are currently using ML.NET<\/li>\n<li>More respondents from large companies are using ML.NET (vs. small companies)<\/li>\n<li>More respondents are using ML in production already (vs. in the learning phases)<\/li>\n<li>ML.NET users are getting more advanced and want advanced features (e.g. model explainability, data prep, deep learning)<\/li>\n<\/ul>\n<\/li>\n<li>The biggest blockers \/ pain points \/ challenges all up among respondents are:\n<ul>\n<li>Small ML.NET community<\/li>\n<li>Docs and samples (quantity, quality, real world)<\/li>\n<li>Insufficient deep learning support<\/li>\n<li>Specific ML scenario or algorithm not supported by ML.NET<\/li>\n<li>Afraid Microsoft will abandon it<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>The overall top pain points from the survey, as well as how we plan to address each one, are listed in the table below:<\/p>\n<table style=\"width: 100%;\">\n<thead>\n<tr>\n<th style=\"width: 21.5098%;\">Pain point \/ blocker<\/th>\n<th style=\"width: 78.3868%;\">Action items \/ next steps<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"width: 21.5098%;\">Small ML.NET community<\/td>\n<td style=\"width: 78.3868%;\">\n<ul>\n<li>Continue community efforts (e.g., Virtual ML.NET Community Conference, Machine Learning .NET Community Standup, ML.NET Discord channel)<\/li>\n<li>Share more stories of ML.NET use cases \/ case studies<\/li>\n<li>Be active on Stack Overflow, GitHub, etc. and encourage community contributions<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 21.5098%;\">Insufficient deep learning support<\/td>\n<td style=\"width: 78.3868%;\">\n<ul>\n<li>Torch support (consume PyTorch models in ML.NET)<\/li>\n<li>Add Keras-like feature to build neural networks from scratch<\/li>\n<li>Add scenarios as needed (e.g., NLP and object detection local and Azure training)<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 21.5098%;\">Lack of \/ quality of docs and samples<\/td>\n<td style=\"width: 78.3868%;\">\n<ul>\n<li>Updated Docs plan with more dedicated resources<\/li>\n<li>Keep Docs and samples repo up to date<\/li>\n<li>Add more practical use cases and more complicated E2E samples and tutorials<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 21.5098%;\">Specific ML scenario or algorithm not supported by ML.NET<\/td>\n<td style=\"width: 78.3868%;\">\n<ul>\n<li>Add NLP and local object detection training<\/li>\n<li>Continue working with users and analyzing market to understand which scenarios and algorithms need to be supported in ML.NET<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 21.5098%;\">Afraid Microsoft will abandon it<\/td>\n<td style=\"width: 78.3868%;\">\n<ul>\n<li>Get on the .NET release schedule<\/li>\n<li>Actively work on APIs + tooling \/ develop features \/ keep up to date with ML trends<\/li>\n<li>Public strategy and roadmap<\/li>\n<li>ML.NET announcements and demos in big .NET conference keynotes<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>If you have feedback, ideas, or other things you&#8217;d like to see from the ML.NET team, please let us know!<\/p>\n<h2>Get started and resources<\/h2>\n<p>Learn more about ML.NET and Model Builder in <a href=\"https:\/\/aka.ms\/mlnet-docs\" target=\"_blank\" rel=\"noopener\">Microsoft Docs<\/a>.<\/p>\n<p>If you run into any issues, feature requests, or feedback, please file an issue in the <a href=\"https:\/\/github.com\/dotnet\/machinelearning\" target=\"_blank\" rel=\"noopener\">ML.NET APIs repo<\/a> or the ML.NET Tooling <a href=\"https:\/\/github.com\/dotnet\/machinelearning-modelbuilder\" target=\"_blank\" rel=\"noopener\">(Model Builder &amp; ML.NET CLI) repo<\/a> on GitHub.<\/p>\n<p>Missed The Virtual ML.NET Community Conference? All the sessions were recorded, so you can watch all of the amazing talks from <a href=\"https:\/\/www.youtube.com\/watch?v=ch1aeidOt_M\" target=\"_blank\" rel=\"noopener\">Day 1<\/a> and <a href=\"https:\/\/www.youtube.com\/watch?v=ljL7dJBGBb4&amp;t=19184s\" target=\"_blank\" rel=\"noopener\">Day 2<\/a>.<\/p>\n<p>Tune in to the <a href=\"https:\/\/dotnet.microsoft.com\/platform\/community\/standup\" target=\"_blank\" rel=\"noopener\">Machine Learning .NET Community Standup<\/a> every other Wednesday at 10am Pacific Time.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Check out what&#8217;s new in  ML.NET and Model Builder.<\/p>\n","protected":false},"author":721,"featured_media":33215,"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-33425","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>Check out what&#8217;s new in  ML.NET and Model Builder.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/33425","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\/721"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=33425"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/33425\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/33215"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=33425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=33425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=33425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}