Competenza personalizzata di Machine Learning

Completato

L'uso di una competenza personalizzata di apprendimento automatico funziona come l'aggiunta di qualsiasi altra competenza personalizzata a un indice di ricerca.

Verranno qui illustrate le differenze relative all'uso della competenza personalizzata AmlSkill e verranno esplorate le considerazioni su come usarla in modo efficace.

Schema personalizzato delle competenze di Azure Machine Learning

Quando si arricchisce un indice di ricerca con una competenza personalizzata di Azure Machine Learning (AML), l'arricchimento avviene a livello di documento. Il set di competenze usato dall'indicizzatore di documenti deve includere un AmlSkill. Lo schema per questa competenza è:

{
      "@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
      "name": "AML name",
      "description": "AML description",
      "context": "/document",
      "uri": "https://[Your AML endpoint]",
      "key": "Your AML endpoint key",
      "resourceId": null,
      "region": null,
      "timeout": "PT30S",
      "degreeOfParallelism": 1,
      "inputs": [
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },

      ],
      "outputs": [
        {
          "name": "result field from the AML model",
          "targetName": "result field in the document"
        }
      ]
    }

Importante

L'URI deve usare un endpoint HTTPS. Può trattarsi di un indirizzo URL personalizzato gestito fornito da Microsoft o del proprio nome di dominio e certificato.

Si noti che la competenza personalizzata non include impostazioni per batchSize perché il modello AML elabora un singolo documento alla volta. Le impostazioni rimanenti che controllano le prestazioni della competenza sono timeout e degreeOfParallelism. Lo schema precedente ha impostato 30 secondi come valore di timeout. Il grado di parallelismo deve iniziare da uno. A seconda dell'infrastruttura, potrebbe essere possibile aumentare questo numero.

Il modo migliore per gestire l'efficienza di una competenza di AML consiste nell'aumentare le prestazioni del cluster di inferenza Kubernetes in modo appropriato per gestire il carico di lavoro.

L'indice per il documento richiede un campo per archiviare i risultati del modello di AML. Si aggiungerà quindi un mapping dei campi di output per archiviare i risultati del set di competenze personalizzate nel campo del documento nell'indice.

Il codice JSON per eseguire questo mapping dei campi di output è:

"outputFieldMappings": [
    {
      "sourceFieldName": "/result field in the document",
      "targetFieldName": "result field from the AML model"
    }
  ]

Il modello di Azure Machine Learning viene creato usando strumenti di sviluppo come Python SDK, API REST o interfaccia della riga di comando di Azure. Un'altra opzione consiste nel sfruttare Azure AI Machine Learning Studio, un'interfaccia utente grafica che consente di creare, eseguire il training e distribuire modelli senza scrivere codice.

Diagramma che illustra i passaggi per arricchire un indice di ricerca con un modello di Azure AI Machine Learning Studio.

Dopo aver creato un modello, si modifica il modo in cui il codice di assegnazione dei punteggi chiama il modello per consentirne l'uso da parte della competenza di ricerca personalizzata.

Gli ultimi passaggi sono la creazione di un cluster Kubernetes per ospitare un endpoint per il modello.

Creare un'area di lavoro AML

Quando si crea l'area di lavoro AML, Azure creerà anche account di archiviazione, un archivio chiavi e le risorse di Application Insights. Il riquadro Panoramica dell'area di lavoro AML offre un collegamento per avviare Azure AI Machine Learning Studio.

Creare ed eseguire il training di un modello in Azure Machine Learning Studio

Azure AI Machine Learning Studio consente di usare una finestra di progettazione per usare il trascinamento della selezione per creare pipeline che creano ed eseguono il training di modelli. Esiste un modo ancora più semplice per creare modelli usando modelli predefiniti.

Screenshot di tutti i componenti predefiniti in Azure AI Machine Learning Studio.

Tuttavia, si sceglie di creare i modelli, devono essere registrati in Azure AI Machine Learning Studio in modo da poter distribuire il modello in un servizio Web.

Modificare il funzionamento del modello per consentire la chiamata dalla competenza personalizzata AML

I modelli di cui si esegue il training usano normalmente molti esempi dei dati. I set di dati avranno molte righe e verranno suddivisi e usati per eseguire il training e testare il modello. Il codice che gestisce questi dati e lo passa al modello deve essere modificato per gestire singole righe.

La risposta JSON dal modello deve contenere anche solo la stima di output.

Ad esempio, se i dati sono una matrice di oggetti JSON:

[ 
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    }
]

Il codice di assegnazione dei punteggi Python dovrà elaborare i dati una riga alla volta:

data = json.loads(data)
for row in data:
    for key, val in row.items():
        input_entry[key].append(decode_nan(val))

per modificare il set di dati di input in un singolo record:

{
    "attribute-1": null,
    "attribute-2": null
}

il codice python dovrà cambiare in:

data = json.loads(data)
for key, val in data.items():
    input_entry[key].append(decode_nan(val))

Per la risposta dal codice di assegnazione dei punteggi, il codice predefinito restituisce l'intero documento JSON:

return json.dumps({"result": result.data_frame.values.tolist()})

la competenza personalizzata deve essere in grado di eseguire il mapping di una singola risposta dal modello. Il codice deve quindi restituire JSON che è solo l'ultimo attributo.

output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
    "predicted_outcome": output[0][-1]
}

Creare un endpoint per il modello da usare

Il modello viene distribuito in un endpoint. Azure AI Machine Learning Studio supporta la distribuzione di un modello in un endpoint in tempo reale, un endpoint batch o un servizio Web. Al momento, la competenza personalizzata AmlSkill in Azure AI Search supporta solo gli endpoint servizio Web.

L'altra restrizione è che l'endpoint deve essere un cluster del servizio Azure Kubernetes. Le istanze di Container non sono supportate.

Se si ha esperienza nella creazione e nella gestione dei cluster del servizio Azure Kubernetes, è possibile creare manualmente i cluster nel portale di Azure e farvi riferimento quando si crea l'endpoint. Tuttavia, un'opzione più semplice consiste nel consentire ad Azure AI Machine Learning Studio di creare e gestire automaticamente il cluster.

Se si passa alla sezione di calcolo dello studio, è possibile creare cluster di inferenza. AML Studio guiderà quindi la scelta delle dimensioni del cluster e anche l'abilitazione di HTTPS e la creazione di un nome di dominio. Avrà il formato location.cloudapp.azure.com:443.

Connettere la competenza personalizzata AML all'endpoint

Con tutti gli elementi sopra indicati, è necessario aggiornare il servizio Azure AI Search. La procedura per eseguire questa operazione è simile a quella degli esempi illustrati in questo modulo, quindi non verranno descritte in dettaglio le specifiche, ma verranno elencati i passaggi da seguire.

  1. Prima di tutto, per arricchire l'indice di ricerca, si aggiungerà un nuovo campo all'indice per includere l'output per il modello.
  2. Si aggiornerà quindi il set di competenze dell'indice e si aggiungerà la competenza personalizzata#Microsoft.Skills.Custom.AmlSkill.
  3. Successivamente, si cambierà l'indicizzatore per eseguire il mapping dell'output dalla competenza personalizzata al campo creato nell'indice.
  4. L'ultimo passaggio consiste nel eseguire nuovamente l'indicizzatore per arricchire l'indice con il modello AML.