Arricchire un indice di ricerca usando un modello di Azure Machine Learning

Completato

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.

A diagram showing the steps to enrich a search index with an Azure AI Machine Learning Studio model.

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.

A screenshot of all the prebuilt components in the 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 servizio Azure Kubernetes (servizio Azure Kubernetes), le istanze del contenitore 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. Prima di tutto, per arricchire l'indice di ricerca, si aggiungerà un nuovo campo all'indice per includere l'output per il modello.

Si aggiornerà quindi il set di competenze dell'indice e si aggiungerà la competenza personalizzata#Microsoft.Skills.Custom.AmlSkill.

Successivamente, si cambierà l'indicizzatore per eseguire il mapping dell'output dalla competenza personalizzata al campo creato nell'indice.

L'ultimo passaggio consiste nel eseguire nuovamente l'indicizzatore per arricchire l'indice con il modello AML.