Integrazione di Machine Learning in Analisi di flussoMachine Learning integration in Stream Analytics

Analisi di flusso supporta funzioni definite dall'utente che chiamano gli endpoint di Azure Machine Learning.Stream Analytics supports user-defined functions that call out to Azure Machine Learning endpoints. Il supporto dell'API REST per questa funzionalità è illustrato in dettaglio nella libreria delle API REST di Analisi di flusso.REST API support for this feature is detailed in the Stream Analytics REST API library. Questo articolo fornisce le informazioni supplementari necessarie per la corretta implementazione di questa funzionalità in Analisi di flusso.This article provides supplemental information needed for successful implementation of this capability in Stream Analytics. È stata pubblicata anche un'esercitazione che è disponibile qui.A tutorial has also been posted and is available here.

Panoramica: Terminologia di Azure Machine LearningOverview: Azure Machine Learning terminology

Microsoft Azure Machine Learning fornisce uno strumento di trascinamento collaborativo che consente di compilare, testare e distribuire soluzioni di analisi predittiva ai dati.Microsoft Azure Machine Learning provides a collaborative, drag-and-drop tool you can use to build, test, and deploy predictive analytics solutions on your data. Questo strumento si chiama Azure Machine Learning Studio.This tool is called the Azure Machine Learning Studio. e viene usato per interagire con le risorse di Machine Learning ed eseguire facilmente la compilazione, il test e l'iterazione del progetto.The studio is used to interact with the Machine Learning resources and easily build, test, and iterate on your design. Di seguito sono riportate le risorse e le rispettive definizioni.These resources and their definitions are below.

  • Area di lavoro: l' area di lavoro è un contenitore che include tutte le altre risorse di Machine Learning per poterle gestire e controllare.Workspace: The workspace is a container that holds all other Machine Learning resources together in a container for management and control.
  • Esperimento: gli esperimenti vengono creati dagli esperti di gestione dati per utilizzare i set di dati ed eseguire il training di un modello di Machine Learning.Experiment: Experiments are created by data scientists to utilize datasets and train a machine learning model.
  • Endpoint: gli endpoint sono gli oggetti di Azure Machine Learning usati per accettare le funzionalità come input, applicare un modello di apprendimento automatico specificato e restituire un output con punteggio.Endpoint: Endpoints are the Azure Machine Learning object used to take features as input, apply a specified machine learning model and return scored output.
  • Servizio Web di assegnazione dei punteggi: un servizio Web di assegnazione dei punteggi è una raccolta di endpoint, come indicato sopra.Scoring Webservice: A scoring webservice is a collection of endpoints as mentioned above.

Ogni endpoint ha API per l'esecuzione batch e per l'esecuzione sincrona.Each endpoint has apis for batch execution and synchronous execution. Analisi di flusso usa l'esecuzione sincrona.Stream Analytics uses synchronous execution. Il servizio specifico è detto servizio di richiesta/risposta in Azure ML Studio.The specific service is named a Request/Response Service in AzureML studio.

Risorse di Machine Learning necessarie per i processi di analisi di flussoMachine Learning resources needed for Stream Analytics jobs

Ai fini dell'elaborazione dei processi di Analisi di flusso, per la corretta esecuzione sono necessari un endpoint di richiesta/risposta, una chiave APIe una definizione swagger.For the purposes of Stream Analytics job processing, a Request/Response endpoint, an apikey, and a swagger definition are all necessary for successful execution. Analisi di flusso ha un endpoint aggiuntivo che crea l'URL per l'endpoint swagger, cerca l'interfaccia e restituisce all'utente una definizione UDF predefinita.Stream Analytics has an additional endpoint that constructs the url for swagger endpoint, looks up the interface and returns a default UDF definition to the user.

Configurare una funzione definita dall'utente di Analisi di flusso e di Machine Learning con l'API RESTConfigure a Stream Analytics and Machine Learning UDF via REST API

Usando le API REST è possibile configurare il processo per chiamare le funzioni di Azure Machine Learning.By using REST APIs you may configure your job to call Azure Machine Language functions. Attenersi alla procedura seguente:The steps are as follows:

  1. Creare un processo di Analisi di flusso.Create a Stream Analytics job
  2. Definire un inputDefine an input
  3. Definire un outputDefine an output
  4. Creare una funzione definita dall'utenteCreate a user-defined function (UDF)
  5. Scrivere una trasformazione di Analisi di flusso che chiami la funzione definita dall'utenteWrite a Stream Analytics transformation that calls the UDF
  6. Avviare il processoStart the job

Creazione di una funzione definita dall'utente con proprietà di baseCreating a UDF with basic properties

Il codice di esempio seguente crea una funzione definita dall'utente scalare denominata newudf che viene associata a un endpoint di Azure Machine Learning.As an example, the following sample code creates a scalar UDF named newudf that binds to an Azure Machine Learning endpoint. Si noti che l'endpoint (URI del servizio) è disponibile nella pagina della Guida dell'API per il servizio scelto e la chiave API nella pagina principale dei servizi.Note that the endpoint (service URI) can be found on the API help page for the chosen service and the apiKey can be found on the Services main page.

    PUT : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.StreamAnalytics/streamingjobs/<streamingjobName>/functions/<udfName>?api-version=<apiVersion>  

Corpo della richiesta di esempio:Example request body:

    {
        "name": "newudf",
        "properties": {
            "type": "Scalar",
            "properties": {
                "binding": {
                    "type": "Microsoft.MachineLearning/WebService",
                    "properties": {
                        "endpoint": "https://ussouthcentral.services.azureml.net/workspaces/f80d5d7a77fb4b46bf2a30c63c078dca/services/b7be5e40fd194258796fb402c1958eaf/execute ",
                        "apiKey": "replacekeyhere"
                    }
                }
            }
        }
    }

Chiamare l'endpoint RetrieveDefaultDefinition per la funzione definita dall'utente predefinitaCall RetrieveDefaultDefinition endpoint for default UDF

Una volta creata la struttura della funzione definita dall'utente, è necessaria la definizione completa della funzione.Once the skeleton UDF is created the complete definition of the UDF is needed. L'endpoint RetreiveDefaultDefinition consente di ottenere la definizione predefinita per una funzione scalare associata a un endpoint di Azure Machine Learning.The RetreiveDefaultDefinition endpoint helps you get the default definition for a scalar function that is bound to an Azure Machine Learning endpoint. Per il payload seguente è necessario ottenere la definizione di definizione definita dall'utente predefinita per una funzione scalare associata a un endpoint di Azure Machine Learning.The payload below requires you to get the default UDF definition for a scalar function that is bound to an Azure Machine Learning endpoint. Il payload non specifica l'endpoint effettivo perché è già stato fornito durante la richiesta PUT.It doesn’t specify the actual endpoint as it has already been provided during PUT request. Analisi di flusso chiama l'endpoint fornito nella richiesta se viene specificato in modo esplicito.Stream Analytics calls the endpoint provided in the request if it is provided explicitly. In caso contrario, usa quello a cui si è fatto riferimento in origine.Otherwise it uses the one originally referenced. Qui la funzione definita dall'utente accetta un singolo parametro di stringa (una frase) e restituisce un singolo output di tipo stringa indicante l'etichetta "sentiment" per tale frase.Here the UDF takes a single string parameter (a sentence) and returns a single output of type string which indicates the “sentiment” label for that sentence.

POST : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.StreamAnalytics/streamingjobs/<streamingjobName>/functions/<udfName>/RetrieveDefaultDefinition?api-version=<apiVersion>

Corpo della richiesta di esempio:Example request body:

    {
        "bindingType": "Microsoft.MachineLearning/WebService",
        "bindingRetrievalProperties": {
            "executeEndpoint": null,
            "udfType": "Scalar"
        }
    }

Un output di esempio dovrebbe essere simile al seguente.A sample output of this would look something like below.

    {
        "name": "newudf",
        "properties": {
            "type": "Scalar",
            "properties": {
                "inputs": [{
                    "dataType": "nvarchar(max)",
                    "isConfigurationParameter": null
                }],
                "output": {
                    "dataType": "nvarchar(max)"
                },
                "binding": {
                    "type": "Microsoft.MachineLearning/WebService",
                    "properties": {
                        "endpoint": "https://ussouthcentral.services.azureml.net/workspaces/f80d5d7a77ga4a4bbf2a30c63c078dca/services/b7be5e40fd194258896fb602c1858eaf/execute",
                        "apiKey": null,
                        "inputs": {
                            "name": "input1",
                            "columnNames": [{
                                "name": "tweet",
                                "dataType": "string",
                                "mapTo": 0
                            }]
                        },
                        "outputs": [{
                            "name": "Sentiment",
                            "dataType": "string"
                        }],
                        "batchSize": 10
                    }
                }
            }
        }
    }

Inserire la risposta nella funzione definita dall'utentePatch UDF with the response

Ora è necessario inserire la risposta precedente nella funzione definita dall'utente, come illustrato di seguito.Now the UDF must be patched with the previous response, as shown below.

PATCH : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.StreamAnalytics/streamingjobs/<streamingjobName>/functions/<udfName>?api-version=<apiVersion>

Corpo della richiesta (output da RetrieveDefaultDefinition):Request Body (Output from RetrieveDefaultDefinition):

    {
        "name": "newudf",
        "properties": {
            "type": "Scalar",
            "properties": {
                "inputs": [{
                    "dataType": "nvarchar(max)",
                    "isConfigurationParameter": null
                }],
                "output": {
                    "dataType": "nvarchar(max)"
                },
                "binding": {
                    "type": "Microsoft.MachineLearning/WebService",
                    "properties": {
                        "endpoint": "https://ussouthcentral.services.azureml.net/workspaces/f80d5d7a77ga4a4bbf2a30c63c078dca/services/b7be5e40fd194258896fb602c1858eaf/execute",
                        "apiKey": null,
                        "inputs": {
                            "name": "input1",
                            "columnNames": [{
                                "name": "tweet",
                                "dataType": "string",
                                "mapTo": 0
                            }]
                        },
                        "outputs": [{
                            "name": "Sentiment",
                            "dataType": "string"
                        }],
                        "batchSize": 10
                    }
                }
            }
        }
    }

Implementare una trasformazione di Analisi di flusso per chiamare la funzione definita dall'utenteImplement Stream Analytics transformation to call the UDF

Cercare ora nella funzione definita dall'utente (denominata qui scoreTweet) ogni evento di input e scrivere una risposta per ogni evento in un output.Now query the UDF (here named scoreTweet) for every input event and write a response for that event to an output.

    {
        "name": "transformation",
        "properties": {
            "streamingUnits": null,
            "query": "select *,scoreTweet(Tweet) TweetSentiment into blobOutput from blobInput"
        }
    }

Ottenere aiutoGet help

Per assistenza, provare il Forum di Analisi di flusso di AzureFor further assistance, try our Azure Stream Analytics forum

Passaggi successiviNext steps