{"id":468,"date":"2020-10-29T18:24:48","date_gmt":"2020-10-29T18:24:48","guid":{"rendered":"https:\/\/machine-learning.webcloning.com\/2020\/10\/29\/building-a-real-time-conversational-analytics-platform-for-amazon-lex-bots\/"},"modified":"2020-10-29T18:24:48","modified_gmt":"2020-10-29T18:24:48","slug":"building-a-real-time-conversational-analytics-platform-for-amazon-lex-bots","status":"publish","type":"post","link":"https:\/\/salarydistribution.com\/machine-learning\/2020\/10\/29\/building-a-real-time-conversational-analytics-platform-for-amazon-lex-bots\/","title":{"rendered":"Building a real-time conversational analytics platform for Amazon Lex bots"},"content":{"rendered":"<div id=\"\">\n<p><a href=\"https:\/\/aws.amazon.com\/lex\/\">Conversational interfaces<\/a> like chatbots have become an important channel for brands to communicate with their customers, partners, and employees. They offer faster service, 24\/7 availability, and lower service costs. By analyzing your bot\u2019s customer conversations, you can discover challenges in user experience, trending topics, and missed utterances. These additional insights can help you identify how to improve your bot and user engagement continuously. Whether you\u2019re a product owner looking for user engagement insights or a conversation designer wanting to review missed utterances, a conversational analytics dashboard plays a vital role in serving these needs.<\/p>\n<p>In this post, we build a real-time conversational analytics solution using the conversational logs from <a href=\"http:\/\/aws.amazon.com\/lex\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Lex<\/a>. Amazon Lex is a service for building conversational interfaces into any application using voice and text. We use <a href=\"https:\/\/aws.amazon.com\/quicksight\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon QuickSight<\/a> to create a dashboard to visualize business KPIs, identify trends, and provide training data for bots to learn from their past failures. Some of the metrics we cover in this post include:<\/p>\n<ul>\n<li>Daily summary statistics<\/li>\n<li>User adoption<\/li>\n<li>Intent and utterance metrics<\/li>\n<li>Conversation review<\/li>\n<li>Sentiment analysis<\/li>\n<\/ul>\n<h2>Solution architecture<\/h2>\n<p>The following diagram illustrates the architecture of our solution.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17428 size-full\" title=\"Solution architecture\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/1-SolutionArchitecture.jpg\" alt=\"\" width=\"900\" height=\"352\"><\/p>\n<p>The architecture comprises streaming the conversation logs from <a href=\"http:\/\/aws.amazon.com\/cloudwatch\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon CloudWatch<\/a> to <a href=\"https:\/\/aws.amazon.com\/kinesis\/data-streams\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Kinesis Data Streams<\/a> and having a stream consumer (an <a href=\"http:\/\/aws.amazon.com\/lambda\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Lambda<\/a> function) transforming the data to be written into an <a href=\"https:\/\/aws.amazon.com\/rds\/aurora\/\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Aurora<\/a> database that serves as the analytics store.<\/p>\n<p>Depending on your project\u2019s scale and your organizational needs and preferences, you may want to look into a data warehousing solution like <a href=\"http:\/\/aws.amazon.com\/redshift\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Redshift<\/a> or use <a href=\"http:\/\/aws.amazon.com\/athena\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Athena<\/a> and <a href=\"http:\/\/aws.amazon.com\/s3\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Simple Storage Service<\/a> (Amazon S3). For more information, see <a href=\"https:\/\/aws.amazon.com\/blogs\/machine-learning\/building-a-business-intelligence-dashboard-for-your-amazon-lex-bots\/\" target=\"_blank\" rel=\"noopener noreferrer\">Building a business intelligence dashboard for your Amazon Lex bots<\/a>.<\/p>\n<p>We use the Aurora connector in QuickSight to pull in the data, create datasets and analysis, and publish a conversation analytics dashboard. QuickSight lets you easily create and publish interactive dashboards. You can choose from an extensive library of visualizations, charts, and tables, and add interactive features such as drill-downs and filters.<\/p>\n<h2>Solution overview<\/h2>\n<p>For this post, we created an Amazon Lex bot using the sample <code>OrderFlowers<\/code> blueprint. The default sample only comes with one intent: <code>OrderFlowers<\/code>. To make the analytics more interesting, we added custom intents like <code>BusinessHoursIntent<\/code>, <code>OffersIntent<\/code>, and <code>MyFallbackIntent<\/code>. For the export of this bot, download <a href=\"https:\/\/aws-ml-blog.s3.amazonaws.com\/artifacts\/Building-a-real-time-conversation-analytics-platform\/OrderFlowers.json\" target=\"_blank\" rel=\"noopener noreferrer\">OrderFlowers.zip<\/a>. You can import this file into your Amazon Lex console or use your own Amazon Lex bot.<\/p>\n<p>To implement the solution, we need to complete the following tasks:<\/p>\n<ol>\n<li>Enable the conversation logs feature for your Amazon Lex bot.<\/li>\n<li>Create a Kinesis data stream and make it a subscriber to the CloudWatch log group created on the <a href=\"http:\/\/aws.amazon.com\/cloudformation\" target=\"_blank\" rel=\"noopener noreferrer\">AWS CloudFormation<\/a>\n<\/li>\n<li>Create an Aurora database to store the conversation log data.<\/li>\n<li>Create a Lambda function and subscribe it to listen to the data stream. The Lambda function extracts the data from the stream and writes it to the Aurora database.<\/li>\n<li>Set up QuickSight to consume data from the Aurora database.<\/li>\n<li>Create datasets and analysis, and publish the dashboard in QuickSight.<\/li>\n<\/ol>\n<h2>Deploying the CloudFormation template<\/h2>\n<p>The CloudFormation template deploys the following resources:<\/p>\n<ul>\n<li>An <a href=\"http:\/\/aws.amazon.com\/iam\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Identity and Access Management<\/a> (IAM) role to allow Amazon Lex to stream to CloudWatch Logs<\/li>\n<li>A CloudWatch log group<\/li>\n<li>A CloudWatch subscription filter<\/li>\n<li>A Kinesis data stream and its associated IAM role<\/li>\n<li>A Kinesis data stream consumer<\/li>\n<li>A Lambda function for object construction and its associated IAM role<\/li>\n<li>A serverless Aurora RDS cluster and its associated security group<\/li>\n<li>A security group for QuickSight access to <a href=\"http:\/\/aws.amazon.com\/rds\" target=\"_blank\" rel=\"noopener noreferrer\">Amazon Relational Database Service<\/a> (Amazon RDS)<\/li>\n<li>An <a href=\"https:\/\/aws.amazon.com\/secrets-manager\" target=\"_blank\" rel=\"noopener noreferrer\">AWS Secrets Manager<\/a> secret with Amazon RDS information<\/li>\n<li>A fresh VPC for the Aurora cluster<\/li>\n<li>Two subnets in the generated VPC<\/li>\n<li>A DB Subnet Group comprised of the two subnets<\/li>\n<\/ul>\n<p>Complete the following steps:<\/p>\n<ol>\n<li>Deploy the template by choosing <strong>Launch Stack<\/strong>:<\/li>\n<\/ol>\n<p><a href=\"https:\/\/console.aws.amazon.com\/cloudformation\/home#\/stacks\/new?stackName=conversationanalytics&amp;templateURL=https:\/\/s3.amazonaws.com\/aws-ml-blog\/\/artifacts\/Building-a-real-time-conversation-analytics-platform\/lex-analytics-cf-template.yaml\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-16174 size-full\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/09\/22\/LaunchStack.jpg\" alt=\"\" width=\"144\" height=\"27\"><\/a><\/p>\n<ol start=\"2\">\n<li>Give your stack a unique name.<\/li>\n<li>Customize AWS CloudFormation deployment as needed.<\/li>\n<li>Deploy the template. This deployment should take approximately 5 minutes to complete<\/li>\n<li>Navigate to the <strong>Outputs<\/strong> tab of the CloudFormation stack and take note of the following values to use later:\n<ol type=\"a\">\n<li><code>SecretARN<\/code><\/li>\n<li><code>QuickSightSecurityGroupID<\/code><\/li>\n<li><code>RDSEndpoint<\/code><\/li>\n<li><code>RDSPort<\/code><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2>Enabling the conversation logs option in your Amazon Lex bot<\/h2>\n<p>Conversation logs are generated when communicating with a Lex bot on an associated alias. Make sure that the AWS CloudFormation deployment is complete before attempting this step.<\/p>\n<ol>\n<li>On the Amazon Lex console, open your bot page and make sure the bot has been built and published.<\/li>\n<li>On the <strong>Settings<\/strong> tab, choose <strong>Conversation Logs<\/strong>.<\/li>\n<li>Publish an alias if you haven\u2019t done so already by choosing the one you want and choosing the <strong>Settings<\/strong>\n<\/li>\n<\/ol>\n<p>You\u2019re prompted to select the log type, the CloudWatch log group, and IAM role on the next page.<\/p>\n<ol start=\"4\">\n<li>For <strong>Log Type<\/strong>, select <strong>Text logs<\/strong>.<\/li>\n<li>For <strong>Log Group<\/strong>, choose<em><span> [STACK-NAME]<\/span><\/em><code>-LexAnalyticsLogGroup-<\/code><em><span>[RANDOM-STRING]<\/span><\/em>.<\/li>\n<li>For <strong>IAM Role<\/strong>, choose <em><span>[STACK-NAME]<\/span><\/em><code>-LexAnalyticsToCWLRole-<\/code><em><span>[RANDOM-STRING]<\/span><\/em>.<\/li>\n<\/ol>\n<p>You now create the FlowersLogs table in Amazon RDS.<\/p>\n<ol start=\"7\">\n<li>On the Amazon RDS console, navigate to the cluster created by the CloudFormation stack (<em><span>[STACK-NAME]<\/span><\/em><code>-orderflowersrds-<\/code><em><span>[RANDOM-STRING]<\/span><\/em>).<\/li>\n<li>Choose <strong>Query Editor<\/strong>.<\/li>\n<li>Select your RDS cluster.<\/li>\n<li>Choose <strong>Connect with a Secrets Manager ARN<\/strong>.<\/li>\n<li>Enter the <code>SecretARN<\/code> from the <strong>Outputs<\/strong> tab of the CloudFormation stack.<\/li>\n<li>Connect to the database and run the following query to create the table:<\/li>\n<\/ol>\n<div class=\"hide-language\">\n<pre class=\"unlimited-height-code\"><code class=\"lang-sql\">CREATE TABLE LexAnalyticsDB.FlowersLogs ( `id` mediumint(9) NOT NULL AUTO_INCREMENT, `botName` varchar(50) DEFAULT NULL, `botAlias` varchar(50) DEFAULT NULL, `botVersion` int(11) DEFAULT NULL, `inputTranscript` varchar(255) DEFAULT NULL, `botResponse` varchar(255) DEFAULT NULL, `intent` varchar(100) DEFAULT NULL, `slots` varchar(255) DEFAULT NULL, `missedUtterance` BOOLEAN DEFAULT NULL, `inputDialog` varchar(50) DEFAULT NULL, `requestId` varchar(255) DEFAULT NULL, `userId` varchar(100) DEFAULT NULL, `sessionId` varchar(255) DEFAULT NULL, `tmstmp` timestamp(2) NULL DEFAULT NULL, `sentiment` varchar(50) DEFAULT NULL, `topic` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2865933 DEFAULT CHARSET=latin1<\/code><\/pre>\n<\/div>\n<p>If you don\u2019t have a client generating data on the Amazon Lex alias, you can generate test data using the <a href=\"https:\/\/github.com\/aws-samples\/aws-lex-web-ui\" target=\"_blank\" rel=\"noopener noreferrer\">aws-lex-web-ui<\/a> deployment.<\/p>\n<ol start=\"13\">\n<li>Navigate to the <a href=\"https:\/\/github.com\/aws-samples\/aws-lex-web-ui\" target=\"_blank\" rel=\"noopener noreferrer\">aws-lex-web-ui<\/a> GitHub repo.<\/li>\n<li>In the <strong>Getting Started<\/strong> section, choose <strong>Launch Stack <\/strong>for the Region you want to build in.<\/li>\n<li>For <strong>BotName<\/strong>, enter the name of your bot.<\/li>\n<li>For <strong>BotAlias<\/strong>, enter the alias of your bot.<\/li>\n<li>Keep the other settings at their default; they should be sufficient in generating sample data.<\/li>\n<li>Choose <strong>Create stack<\/strong>.<\/li>\n<li>When the stack is built, on the <strong>Outputs<\/strong> page, choose the link for <strong>WebAppUrl<\/strong>.<\/li>\n<\/ol>\n<p>You can now use this page to generate traffic for your bot.<\/p>\n<h2>Configuring QuickSight access<\/h2>\n<p>For this post, we assume that you\u2019re starting from scratch and haven\u2019t signed up for QuickSight.<\/p>\n<p><strong>Create a VPC Connection in Amazon\u00a0QuickSight<\/strong><\/p>\n<ol>\n<li>On the QuickSight console, choose <strong>Sign up for QuickSight<\/strong>.<\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17429 size-full\" title=\"Sign up for QuickSight\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/2-QuickSightConsole.jpg\" alt=\"\" width=\"900\" height=\"204\"><\/p>\n<ol start=\"2\">\n<li>Keep the default settings, and make sure that you deploy in the same region where you deployed your CloudFormation stack.<\/li>\n<li>On the <strong>Settings <\/strong>page, on the <strong>Manage VPC connections<\/strong> tab, choose <strong>Add VPC connection<\/strong>.<\/li>\n<\/ol>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17430 size-full\" title=\"Add VPC connection\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/3-AddVPCConnection.jpg\" alt=\"\" width=\"900\" height=\"227\"><\/p>\n<ol start=\"4\">\n<li>Enter a connection name.<\/li>\n<li>Choose the same VPC you deployed your RDS instance into.<\/li>\n<li>Choose any subnet in the VPC.<\/li>\n<li>For <strong>Security Group ID<\/strong>, enter the <code>QuickSightSecurityGroupID<\/code> value from the <strong>Outputs<\/strong> tab of the CloudFormation stack.<\/li>\n<li>Choose <strong>Create<\/strong>.<\/li>\n<\/ol>\n<p><strong>Create a Dataset in QuickSight<\/strong><\/p>\n<ol>\n<li>Go to the\u00a0<strong>Resources<\/strong> tab of your CloudFormation stack.<\/li>\n<li>Navigate to the <strong>LexAnalyticsSecret<\/strong> resource and choose the blue link to the resource.<\/li>\n<li>Choose <strong>Retrieve secret value<\/strong>.<\/li>\n<li>Copy the username and password.<\/li>\n<li>On the QuickSight console, choose <strong>Manage Data<\/strong>.<\/li>\n<li>Choose <strong>New Data Set<\/strong>.<\/li>\n<li>For <strong>Data source<\/strong>, choose <strong>Aurora<\/strong>.<\/li>\n<li>Enter a name for your data source.<\/li>\n<li>For <strong>Connection type, <\/strong>select the connection you created in the previous section.<\/li>\n<li>For <strong>Database connector<\/strong>, choose <strong>MySQL<\/strong>.<\/li>\n<li>For the server and port, use the <code>RDSEndpoint<\/code> and <code>RDSPort<\/code> fields from the CloudFormation stack <strong>Outputs<\/strong>.<\/li>\n<li>For <strong>Database name<\/strong>, enter <code>LexAnalyticsDB<\/code>.<\/li>\n<li>Enter the username and password for the RDS instance earlier.<\/li>\n<li>Choose <strong>Create data source<\/strong>.<\/li>\n<li>Select the <strong>FlowersLogs<\/strong>\n<\/li>\n<li>Import to SPICE.<\/li>\n<\/ol>\n<h2>Configuring QuickSight visuals<\/h2>\n<p>You have an assortment of pivots to base the analytical dashboard on, depending on the use case you\u2019re targeting: summary view, trend analysis, user level, intent level, utterance level, conversation review, and sentiment analysis.<\/p>\n<p>A summary view can help you compare and contrast the number of users, sessions, and utterances between the current day and the previous day, or the current hour and the previous hour.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17431 size-full\" title=\"Analytical dashboard\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/4-DashBoard.jpg\" alt=\"\" width=\"900\" height=\"491\"><\/p>\n<p>A trend analysis of sessions, users, and utterances can help you spot anomalies and cyclical patterns.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17432 size-full\" title=\"Spotting anomalies and cyclical patterns\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/5-Analytics.jpg\" alt=\"\" width=\"900\" height=\"494\"><\/p>\n<p>User-level metrics measure which users are adopting the chatbots more regularly versus users who are not. You can use this data in conjunction with persona data to segment users to create personalized experiences.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17433 size-full\" title=\"Creating personalized experiences\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/6-BarGraphs.jpg\" alt=\"\" width=\"900\" height=\"423\"><\/p>\n<p>Intent-level metrics help identify the top N intents, which improves staffing decisions at the contact centers serving phone and chat channels. When deciding to prune a bot\u2019s intent structure, you can use these metrics to remove the bottom N intents that don\u2019t serve significant traffic.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17434 size-full\" title=\"Intent-level metrics\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/8-Analytics2.jpg\" alt=\"\" width=\"900\" height=\"491\"><\/p>\n<p>Utterance-level metrics help you identify missed utterances and group them by phrases. You can either add the utterances with high counts to the existing intents or create new intents if those utterances don\u2019t already fit into the existing intents.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17435 size-full\" title=\"Utterance-level metrics\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/9-MetricsChart.jpg\" alt=\"\" width=\"900\" height=\"493\"><\/p>\n<p>Conversation review helps you look at the entire conversation between the user and the bot.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17436 size-full\" title=\"Conversation review\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/10-ControlsConversion.jpg\" alt=\"\" width=\"900\" height=\"432\"><\/p>\n<p>Sentiment analysis helps you learn your users\u2019 overall sentiment concerning their experience with the bot. Reviewing conversations that received negative sentiment helps you identify the root cause.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17437 size-full\" title=\"Sentiment analysis\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/11-PieChart.jpg\" alt=\"\" width=\"900\" height=\"298\"><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-17438 size-full\" title=\"Sentiment trends\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/22\/12-Sentiment.jpg\" alt=\"\" width=\"900\" height=\"299\"><\/p>\n<h2>Conclusion<\/h2>\n<p>Whether you\u2019re a product owner, conversation designer, developer, or data scientist, conversational analytics are pivotal to understanding user adoption and teaching your bot to learn from its past mistakes. This post covered how to use conversation logs and QuickSight to capture useful insights from user conversations and visualize them. Get started with Amazon Lex and start building your a customized analytics dashboard for your <a href=\"https:\/\/docs.aws.amazon.com\/lex\/latest\/dg\/conversation-logs.html\" target=\"_blank\" rel=\"noopener noreferrer\">conversation logs<\/a>.<\/p>\n<p>\u00a0<\/p>\n<hr>\n<h3>About the Authors<\/h3>\n<p><strong><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-14062 alignleft\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/07\/24\/shanthan-100.jpg\" alt=\"\" width=\"100\" height=\"118\">Shanthan Kesharaju<\/strong> is a Senior Architect who helps our customers with AI\/ML strategy and architecture. Shanthan has an MBA in Marketing from Duke University and an MS in Management Information Systems from Oklahoma State University.<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-17628 alignleft\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2020\/10\/29\/blake.png\" alt=\"\" width=\"100\" height=\"100\"><strong>Blake DeLee<\/strong> is a Rochester, NY-based conversational AI consultant with AWS Professional Services. He has spent five years in the field of conversational AI and voice, and has experience bringing innovative solutions to dozens of Fortune 500 businesses. Blake draws on a wide-ranging career in different fields to build exceptional chatbot and voice solutions.<\/p>\n<p>\u00a0<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>https:\/\/aws.amazon.com\/blogs\/machine-learning\/building-a-real-time-conversational-analytics-platform-for-amazon-lex-bots\/<\/p>\n","protected":false},"author":0,"featured_media":469,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/posts\/468"}],"collection":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/comments?post=468"}],"version-history":[{"count":0,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/posts\/468\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/media\/469"}],"wp:attachment":[{"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/media?parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/categories?post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salarydistribution.com\/machine-learning\/wp-json\/wp\/v2\/tags?post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}