Informazioni sui tipi di progetti di classificazione
La classificazione personalizzata del testo assegna etichette, che nel servizio Lingua di Azure AI è una classe definita dallo sviluppatore, ai file di testo. Ad esempio, un riepilogo di un videogioco può essere classificato come "Avventura", "Strategia", "Azione" o "Sport".
La classificazione personalizzata del testo rientra in due tipi di progetti:
- Classificazione a etichetta singola: è possibile assegnare solo una classe a ogni file. Tornando all'esempio precedente, il riepilogo di un videogioco può essere classificato solo come "Avventura" o "Strategia".
- Classificazione a più etichette: è possibile assegnare più classi a ogni file. Questo tipo di progetto consente di classificare un riepilogo di un videogioco come "Avventura" o "Avventura e Strategia".
Quando si crea il progetto di classificazione personalizzata del testo, è possibile specificare il tipo di progetto da creare.
Progetti a etichetta singola e progetti a più etichette
Oltre alla possibilità di inserire i file in più classificazioni, le differenze principali con i progetti di classificazione a più etichette sono l'etichettatura, le considerazioni per migliorare il modello e il payload dell'API per le attività di classificazione.
Etichettatura dei dati
Durante il processo di etichettatura dei progetti a etichetta singola, a ogni file viene assegnata una sola classe; per questa assegnazione in Lingua di Azure AI è consentita la selezione di un'unica classe.
Quando si esegue l'etichettatura di progetti a più etichette, è possibile assegnare tutte le classi desiderate per file. L'impatto della complessità aggiunta significa che i dati devono rimanere chiari e fornire una distribuzione valida dei possibili input da cui il modello può imparare.
L'etichettatura corretta dei dati, soprattutto per i progetti a più etichette, è direttamente correlata al livello di prestazioni del modello. Maggiori saranno la qualità, la chiarezza e la variazione del set di dati, più accurato sarà il modello.
Valutazione e miglioramento del modello
La misurazione delle prestazioni predittive del modello va oltre il conteggio delle stime corrette. Le classificazioni corrette sono quando l'etichetta effettiva è x e il modello prevede un'etichetta x. Nel mondo reale, i documenti generano diversi tipi di errori quando una classificazione non è corretta:
- Falso positivo: il modello prevede x, ma il file non è etichettato x.
- Falso negativo: il modello non prevede l'etichetta x, ma il file in realtà è etichettato x.
Queste metriche vengono tradotte in tre misure fornite da Lingua di Azure AI:
- Richiamo: di tutte le etichette effettive, quante sono state identificate; il rapporto dei veri positivi rispetto a tutto quanto era etichettato.
- Precisione: quante etichette stimate sono corrette; rapporto dei veri positivi rispetto a tutti i positivi identificati.
- Punteggio F1: una funzione di richiamo e precisione, mirata a fornire un singolo punteggio da massimizzare per un equilibrio di ogni componente
Suggerimento
Per altre informazioni, vedere le metriche di valutazione di Lingua di Azure AI, tra cui il modo esatto in cui vengono calcolate queste metriche
Con un progetto a etichetta singola, è possibile identificare quali classi non sono classificate correttamente come le altre e trovare altri dati di qualità da usare per eseguire il training del modello. Per i progetti a più etichette, l’individuazione di dati qualitativi diventa più complessa a causa della matrice delle possibili permutazioni di etichette combinate.
Ad esempio, si supponga che il modello classifichi correttamente i giochi "Azione" e alcuni giochi "Azione e Strategia", ma non i giochi "Strategia". Per migliorare il modello, sarà necessario trovare riepiloghi di maggiore qualità e varietà per i giochi "Azione e Strategia" e i giochi "Strategia" per insegnare al modello come differenziare i due. Questa sfida aumenta in modo esponenziale con più classi possibili in cui il modello viene classificato.
Payload dell'API
Lingua di Azure AI fornisce un'API REST per creare e interagire con il modello, usando un corpo JSON per specificare la richiesta. Questa API viene astratta in più SDK specifici del linguaggio, ma per questo modulo verranno illustrati gli esempi sull'API REST di base.
Per inviare un'attività di classificazione, l'API richiede al corpo JSON di specificare quale attività eseguire. Altre informazioni sull'API REST sono disponibili nell'unità successiva, ma è consigliabile acquisire familiarità con le parti del corpo richiesto.
I modelli di classificazione a etichetta singola specificano un tipo di progetto di customSingleLabelClassification
:
{
"projectFileVersion": "<API-VERSION>",
"stringIndexType": "Utf16CodeUnit",
"metadata": {
"projectName": "<PROJECT-NAME>",
"storageInputContainerName": "<CONTAINER-NAME>",
"projectKind": "customSingleLabelClassification",
"description": "Trying out custom multi label text classification",
"language": "<LANGUAGE-CODE>",
"multilingual": true,
"settings": {}
},
"assets": {
"projectKind": "customSingleLabelClassification",
"classes": [
{
"category": "Class1"
},
{
"category": "Class2"
}
],
"documents": [
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"class": {
"category": "Class2"
}
},
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"class": {
"category": "Class1"
}
}
]
}
}
I modelli di classificazione a etichetta multipla specificano un tipo di progetto di CustomMultiLabelClassification
{
"projectFileVersion": "<API-VERSION>",
"stringIndexType": "Utf16CodeUnit",
"metadata": {
"projectName": "<PROJECT-NAME>",
"storageInputContainerName": "<CONTAINER-NAME>",
"projectKind": "customMultiLabelClassification",
"description": "Trying out custom multi label text classification",
"language": "<LANGUAGE-CODE>",
"multilingual": true,
"settings": {}
},
"assets": {
"projectKind": "customMultiLabelClassification",
"classes": [
{
"category": "Class1"
},
{
"category": "Class2"
}
],
"documents": [
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"classes": [
{
"category": "Class1"
},
{
"category": "Class2"
}
]
},
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"classes": [
{
"category": "Class2"
}
]
}
]
}
}