Como consumir um serviço da Web do Azure Machine Learning StudioHow to consume an Azure Machine Learning Studio web service

Depois de implantar um modelo de previsão do Azure Machine Learning Studio como um serviço Web, você pode usar uma API REST para enviar dados e obter previsões.Once you deploy an Azure Machine Learning Studio predictive model as a Web service, you can use a REST API to send it data and get predictions. Você pode enviar os dados em tempo real ou em modo de lote.You can send the data in real-time or in batch mode.

Você pode encontrar mais informações sobre como criar e implantar um serviço Web de Machine Learning usando o Machine Learning Studio aqui:You can find more information about how to create and deploy a Machine Learning Web service using Machine Learning Studio here:

Visão geralOverview

Com o serviço Web do Azure Machine Learning, um aplicativo externo se comunica com um modelo de pontuação do fluxo de trabalho do Machine Learning em tempo real.With the Azure Machine Learning Web service, an external application communicates with a Machine Learning workflow scoring model in real time. Uma chamada do serviço Web do Machine Learning retorna resultados de previsão para um aplicativo externo.A Machine Learning Web service call returns prediction results to an external application. Para fazer uma chamada de serviço Web do Machine Learning, transmita uma chave de API que é criada quando você implanta uma previsão.To make a Machine Learning Web service call, you pass an API key that is created when you deploy a prediction. O serviço Web do Machine Learning baseia-se em REST, uma opção popular de arquitetura para projetos de programação da Web.The Machine Learning Web service is based on REST, a popular architecture choice for web programming projects.

O Azure Machine Learning Studio tem dois tipos de serviços:Azure Machine Learning Studio has two types of services:

  • Serviço de Solicitação-Resposta (RRS) – Um serviço de baixa latência e altamente escalonável que fornece uma interface para os modelos sem monitoração de estado criados e implantados no Machine Learning Studio.Request-Response Service (RRS) – A low latency, highly scalable service that provides an interface to the stateless models created and deployed from the Machine Learning Studio.
  • Serviço de Execução de Lote (BES) – Um serviço assíncrono que pontua um lote de registros de dados.Batch Execution Service (BES) – An asynchronous service that scores a batch for data records.

Para obter mais informações sobre os serviços Web do Machine Learning, confira Implantar um serviço Web do Machine Learning.For more information about Machine Learning Web services, see Deploy a Machine Learning Web service.

Obter uma chave de autorização para o Azure Machine Learning StudioGet an Azure Machine Learning Studio authorization key

Quando você implanta seu experimento, as chaves de API são geradas para o serviço Web.When you deploy your experiment, API keys are generated for the Web service. Você pode recuperar as chaves de vários locais.You can retrieve the keys from several locations.

Por meio do portal de serviços Web do Microsoft Azure Machine LearningFrom the Microsoft Azure Machine Learning Web Services portal

Entre no portal Serviços Web do Microsoft Azure Machine Learning.Sign in to the Microsoft Azure Machine Learning Web Services portal.

Para recuperar a chave de API para um novo serviço Web do Machine Learning:To retrieve the API key for a New Machine Learning Web service:

  1. No portal de serviços Web do Azure Machine Learning, clique em Serviços Web no menu superior.In the Azure Machine Learning Web Services portal, click Web Services the top menu.
  2. Clique no serviço Web para o qual deseja recuperar a chave.Click the Web service for which you want to retrieve the key.
  3. No menu superior, clique em Consumir.On the top menu, click Consume.
  4. Copie e salve a Chave Primária.Copy and save the Primary Key.

Para recuperar a chave de API para um serviço Web clássico do Machine Learning:To retrieve the API key for a Classic Machine Learning Web service:

  1. No portal de serviços Web do Azure Machine Learning, clique em Serviços Web Clássicos no menu superior.In the Azure Machine Learning Web Services portal, click Classic Web Services the top menu.
  2. Clique no serviço Web com o qual está trabalhando.Click the Web service with which you are working.
  3. Clique no ponto de extremidade para o qual deseja recuperar a chave.Click the endpoint for which you want to retrieve the key.
  4. No menu superior, clique em Consumir.On the top menu, click Consume.
  5. Copie e salve a Chave Primária.Copy and save the Primary Key.

Serviço Web ClássicoClassic Web service

Você também pode recuperar um serviço Web clássico por meio do Machine Learning Studio.You can also retrieve a key for a Classic Web service from Machine Learning Studio.

Machine Learning StudioMachine Learning Studio

  1. No Machine Learning Studio, clique em SERVIÇOS WEB à esquerda.In Machine Learning Studio, click WEB SERVICES on the left.
  2. Clique em um serviço Web.Click a Web service. A Chave de API está na guia PAINEL.The API key is on the DASHBOARD tab.

Conectar-se a um serviço Web do Machine LearningConnect to a Machine Learning Web service

Você pode se conectar a um serviço Web do Machine Learning usando qualquer linguagem de programação que dá suporte à resposta e à solicitação HTTP.You can connect to a Machine Learning Web service using any programming language that supports HTTP request and response. Você pode exibir exemplos em C#, Python e R de uma página de ajuda do serviço Web do Machine Learning.You can view examples in C#, Python, and R from a Machine Learning Web service help page.

Ajuda da API do Machine Learning Uma ajuda de API do Machine Learning é criada quando você implanta um serviço Web.Machine Learning API help Machine Learning API help is created when you deploy a Web service. Confira Tutorial 3: Implantar o modelo de risco de crédito.See Tutorial 3: Deploy credit risk model. A ajuda da API do Machine Learning contém detalhes sobre um serviço Web de previsão.The Machine Learning API help contains details about a prediction Web service.

  1. Clique no serviço Web com o qual está trabalhando.Click the Web service with which you are working.
  2. Clique no ponto de extremidade para o qual deseja exibir uma página de ajuda da API.Click the endpoint for which you want to view the API Help Page.
  3. No menu superior, clique em Consumir.On the top menu, click Consume.
  4. Clique na página de ajuda da API nos pontos de extremidade Solicitação de Resposta ou Execução em Lote.Click API help page under either the Request-Response or Batch Execution endpoints.

Como exibir a ajuda da API do Machine Learning para um novo serviço WebTo view Machine Learning API help for a New Web service

No Portal de Serviços Web do Azure Machine Learning:In the Azure Machine Learning Web Services Portal:

  1. Clique em SERVIÇOS WEB no menu superior.Click WEB SERVICES on the top menu.
  2. Clique no serviço Web para o qual deseja recuperar a chave.Click the Web service for which you want to retrieve the key.

Clique em Usar Serviço Web para obter os URIs dos Serviços de Solicitação-Resposta e Execução em Lotes, bem como o código de exemplo, em C#, R e Python.Click Use Web Service to get the URIs for the Request-Response and Batch Execution Services and Sample code in C#, R, and Python.

Clique em API do Swagger para obter a documentação baseada no Swagger para as APIs chamadas dos URIs fornecidos.Click Swagger API to get Swagger based documentation for the APIs called from the supplied URIs.

Exemplo de C#C# Sample

Para se conectar a um serviço Web do Machine Learning, use um HttpClient passando ScoreData.To connect to a Machine Learning Web service, use an HttpClient passing ScoreData. ScoreData contém um FeatureVector, um vetor com n dimensões de recursos numéricos que representa o ScoreData.ScoreData contains a FeatureVector, an n-dimensional vector of numerical features that represents the ScoreData. Autentique no serviço de Machine Learning com uma chave de API.You authenticate to the Machine Learning service with an API key.

Para se conectar a um serviço Web do Machine Learning, o pacote Nuget Microsoft.AspNet.WebApi.Client deve ser instalado.To connect to a Machine Learning Web service, the Microsoft.AspNet.WebApi.Client NuGet package must be installed.

Instalar o Nuget Microsoft.AspNet.WebApi.Client no Visual StudioInstall Microsoft.AspNet.WebApi.Client NuGet in Visual Studio

  1. Publica o conjunto de dados de Download de UCI: Serviço Web do conjunto de dados de classe Adulto 2.Publish the Download dataset from UCI: Adult 2 class dataset Web Service.
  2. Clique em Ferramentas > Gerenciador de Pacotes do NuGet > Console do Gerenciador de Pacotes.Click Tools > NuGet Package Manager > Package Manager Console.
  3. Escolha Install-Package Microsoft.AspNet.WebApi.Client.Choose Install-Package Microsoft.AspNet.WebApi.Client.

Para executar o exemplo de códigoTo run the code sample

  1. Publique o experimento "Exemplo 1: Baixar o conjunto de dados do UCI: Conjunto de dados de classe adulto 2", parte da coleção de exemplos do Machine Learning.Publish "Sample 1: Download dataset from UCI: Adult 2 class dataset" experiment, part of the Machine Learning sample collection.
  2. Atribua apiKey com a chave de um serviço Web.Assign apiKey with the key from a Web service. Confira a seção Obter uma chave de autorização para o Azure Machine Learning Studio acima.See Get an Azure Machine Learning Studio authorization key above.
  3. Atribua serviceUri com o URI de solicitação.Assign serviceUri with the Request URI.

Esta é a aparência de uma solicitação concluída.Here is what a complete request will look like.

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace CallRequestResponseService
{
    class Program
    {
        static void Main(string[] args)
        {
            InvokeRequestResponseService().Wait();
        }

        static async Task InvokeRequestResponseService()
        {
            using (var client = new HttpClient())
            {
                var scoreRequest = new
                {
                    Inputs = new Dictionary<string, List<Dictionary<string, string>>> () {
                        {
                            "input1",
                            // Replace columns labels with those used in your dataset
                            new List<Dictionary<string, string>>(){new Dictionary<string, string>(){
                                    {
                                        "column1", "value1"
                                    },
                                    {
                                        "column2", "value2"
                                    },
                                    {
                                        "column3", "value3"
                                    }
                                }
                            }
                        },
                    },
                    GlobalParameters = new Dictionary<string, string>() {}
                };

                // Replace these values with your API key and URI found on https://services.azureml.net/
                const string apiKey = "<your-api-key>"; 
                const string apiUri = "<your-api-uri>";
                
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Bearer", apiKey);
                client.BaseAddress = new Uri(apiUri);

                // WARNING: The 'await' statement below can result in a deadlock
                // if you are calling this code from the UI thread of an ASP.NET application.
                // One way to address this would be to call ConfigureAwait(false)
                // so that the execution does not attempt to resume on the original context.
                // For instance, replace code such as:
                //      result = await DoSomeTask()
                // with the following:
                //      result = await DoSomeTask().ConfigureAwait(false)

                HttpResponseMessage response = await client.PostAsJsonAsync("", scoreRequest);

                if (response.IsSuccessStatusCode)
                {
                    string result = await response.Content.ReadAsStringAsync();
                    Console.WriteLine("Result: {0}", result);
                }
                else
                {
                    Console.WriteLine(string.Format("The request failed with status code: {0}", response.StatusCode));

                    // Print the headers - they include the request ID and the timestamp,
                    // which are useful for debugging the failure
                    Console.WriteLine(response.Headers.ToString());

                    string responseContent = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseContent);
                }
            }
        }
    }
}

Exemplo de PythonPython Sample

Para conectar-se a um serviço Web de Machine Learning, use a biblioteca urllib2 do Python 2. x e a biblioteca urllib.request do Python 3. x.To connect to a Machine Learning Web service, use the urllib2 library for Python 2.X and urllib.request library for Python 3.X. Você passará o ScoreData, que contém um FeatureVector, um vetor com n dimensões de recursos numéricos que representa o ScoreData.You will pass ScoreData, which contains a FeatureVector, an n-dimensional vector of numerical features that represents the ScoreData. Autentique no serviço de Machine Learning com uma chave de API.You authenticate to the Machine Learning service with an API key.

Para executar o exemplo de códigoTo run the code sample

  1. Implante o experimento "Exemplo 1: Baixar o conjunto de dados do UCI: Conjunto de dados de classe adulto 2", parte da coleção de exemplos do Machine Learning.Deploy "Sample 1: Download dataset from UCI: Adult 2 class dataset" experiment, part of the Machine Learning sample collection.
  2. Atribua apiKey com a chave de um serviço Web.Assign apiKey with the key from a Web service. Confira a seção Obter uma chave de autorização do Azure Machine Learning Studio no início deste artigo.See the Get an Azure Machine Learning Studio authorization key section near the beginning of this article.
  3. Atribua serviceUri com o URI de solicitação.Assign serviceUri with the Request URI.

Esta é a aparência de uma solicitação concluída.Here is what a complete request will look like.

import urllib2 # urllib.request for Python 3.X
import json

data = {
    "Inputs": {
        "input1":
        [
            {
                'column1': "value1",   
                'column2': "value2",   
                'column3': "value3"
            }
        ],
    },
    "GlobalParameters":  {}
}

body = str.encode(json.dumps(data))

# Replace this with the URI and API Key for your web service
url = '<your-api-uri>'
api_key = '<your-api-key>'
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)}

# "urllib.request.Request(uri, body, headers)" for Python 3.X
req = urllib2.Request(url, body, headers)

try:
    # "urllib.request.urlopen(req)" for Python 3.X
    response = urllib2.urlopen(req)

    result = response.read()
    print(result)
# "urllib.error.HTTPError as error" for Python 3.X
except urllib2.HTTPError, error: 
    print("The request failed with status code: " + str(error.code))

    # Print the headers - they include the request ID and the timestamp, which are useful for debugging the failure
    print(error.info())
    print(json.loads(error.read())) 

Exemplo de RR Sample

Para se conectar a um serviço Web de Machine Learning, use as bibliotecas RCurl e rjson para fazer a solicitação e processar a resposta JSON retornada.To connect to a Machine Learning Web Service, use the RCurl and rjson libraries to make the request and process the returned JSON response. Você passará o ScoreData, que contém um FeatureVector, um vetor com n dimensões de recursos numéricos que representa o ScoreData.You will pass ScoreData, which contains a FeatureVector, an n-dimensional vector of numerical features that represents the ScoreData. Autentique no serviço de Machine Learning com uma chave de API.You authenticate to the Machine Learning service with an API key.

Esta é a aparência de uma solicitação concluída.Here is what a complete request will look like.

library("RCurl")
library("rjson")

# Accept SSL certificates issued by public Certificate Authorities
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))

h = basicTextGatherer()
hdr = basicHeaderGatherer()

req = list(
    Inputs = list(
            "input1" = list(
                list(
                        'column1' = "value1",
                        'column2' = "value2",
                        'column3' = "value3"
                    )
            )
        ),
        GlobalParameters = setNames(fromJSON('{}'), character(0))
)

body = enc2utf8(toJSON(req))
api_key = "<your-api-key>" # Replace this with the API key for the web service
authz_hdr = paste('Bearer', api_key, sep=' ')

h$reset()
curlPerform(url = "<your-api-uri>",
httpheader=c('Content-Type' = "application/json", 'Authorization' = authz_hdr),
postfields=body,
writefunction = h$update,
headerfunction = hdr$update,
verbose = TRUE
)

headers = hdr$value()
httpStatus = headers["status"]
if (httpStatus >= 400)
{
print(paste("The request failed with status code:", httpStatus, sep=" "))

# Print the headers - they include the request ID and the timestamp, which are useful for debugging the failure
print(headers)
}

print("Result:")
result = h$value()
print(fromJSON(result))

Exemplo de JavaScriptJavaScript Sample

Para se conectar a um serviço Web de Machine Learning, use o pacote npm de solicitação em seu projeto.To connect to a Machine Learning Web Service, use the request npm package in your project. Você também usará o objeto JSON para formatar sua entrada e analisar o resultado.You will also use the JSON object to format your input and parse the result. Instale usando npm install request --save ou adicione "request": "*" ao package.json em dependencies e execute npm install.Install using npm install request --save, or add "request": "*" to your package.json under dependencies and run npm install.

Esta é a aparência de uma solicitação concluída.Here is what a complete request will look like.

let req = require("request");

const uri = "<your-api-uri>";
const apiKey = "<your-api-key>";

let data = {
    "Inputs": {
        "input1":
        [
            {
                'column1': "value1",
                'column2': "value2",
                'column3': "value3"
            }
        ],
    },
    "GlobalParameters": {}
}

const options = {
    uri: uri,
    method: "POST",
    headers: {
        "Content-Type": "application/json",
        "Authorization": "Bearer " + apiKey,
    },
    body: JSON.stringify(data)
}

req(options, (err, res, body) => {
    if (!err && res.statusCode == 200) {
        console.log(body);
    } else {
        console.log("The request failed with status code: " + res.statusCode);
    }
});