L'attività Classificatore di testo consente di classificare il testo in un insieme di categorie definite, come sentiment positivo o negativo. Le categorie vengono stabilite in base al modello utilizzato e all'addestramento del modello. Queste istruzioni mostrano come utilizzare il classificatore di testo nelle app per iOS. L'esempio di codice descritto in queste istruzioni è disponibile su GitHub.
Puoi vedere questa attività in azione visualizzando questa demo web. Per ulteriori informazioni sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la Panoramica.
Esempio di codice
Il codice di esempio di MediaPipe Tasks è un'implementazione di base di un'app Text Classifier per iOS.
Puoi utilizzare l'app come punto di partenza per la tua app per iOS o farvi riferimento quando modifichi un'app esistente. Puoi fare riferimento al codice di esempio del classificatore di testo su GitHub.
Scarica il codice
Le seguenti istruzioni mostrano come creare una copia locale del codice di esempio utilizzando lo strumento a riga di comando git.
Per scaricare il codice di esempio:
Clona il repository git utilizzando il seguente comando:
git clone https://github.com/google-ai-edge/mediapipe-samples
Facoltativamente, configura la tua istanza Git in modo da utilizzare il pagamento sparse, in modo da avere solo i file per l'app di esempio Text Classifier:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/ios/
Dopo aver creato una versione locale del codice di esempio, puoi installare la libreria di attività MediaPipe, aprire il progetto utilizzando Xcode ed eseguire l'app. Per le istruzioni, consulta la Guida alla configurazione per iOS.
Componenti chiave
I seguenti file contengono il codice fondamentale per l'applicazione di esempio Text Classifier:
- TextClassifierHelper.swift: inizializza il classificatore del testo e gestisce la selezione del modello.
- ViewController.swift: implementa l'interfaccia utente e formatta i risultati.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e i progetti di codice per l'utilizzo di Text Classifier. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività MediaPipe, inclusi i requisiti di versione della piattaforma, consulta la Guida alla configurazione per iOS.
Dipendenze
Il classificatore di testo utilizza la libreria MediaPipeTasksText
, che deve essere installata
utilizzando CocoaPods. La libreria è compatibile con le app Swift e Objective-C e non richiede alcuna configurazione aggiuntiva specifica per la lingua.
Per istruzioni su come installare CocoaPods su macOS, consulta la guida all'installazione di CocoaPods.
Per istruzioni su come creare un Podfile
con i pod necessari per la tua
app, consulta la sezione Utilizzare
CocoaPods.
Aggiungi il pod MediaPipeTasksText in Podfile
utilizzando il seguente codice:
target 'MyTextClassifierApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
Se la tua app include target per il test delle unità, consulta la Guida alla configurazione per iOS per ulteriori informazioni sulla configurazione di Podfile
.
Modello
L'attività Classificazione di testo MediaPipe richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per il classificatore di testo, consulta la sezione Modelli della panoramica dell'attività.
Seleziona e scarica un modello, quindi aggiungilo alla directory del progetto utilizzando Xcode. Per istruzioni su come aggiungere file al progetto Xcode, consulta Gestione di file e cartelle nel progetto Xcode.
Utilizza la proprietà BaseOptions.modelAssetPath
per specificare il percorso del modello
nel tuo app bundle. Per un esempio di codice, consulta la sezione successiva.
Creare l'attività
Puoi creare l'attività Classificazione di testo chiamando uno dei suoi inizializzatori. L'inizializzazione TextClassifier(options:)
imposta i valori per le opzioni di configurazione.
Se non hai bisogno di un classificatore di testo inizializzato con opzioni di configurazione personalizzate, puoi usare l'inizializzazione TextClassifier(modelPath:)
per creare un classificatore di testo con le opzioni predefinite. Per ulteriori informazioni sulle opzioni di configurazione, consulta Panoramica della configurazione.
Il codice seguente mostra come creare e configurare questa attività.
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6
let textClassifier = try TextClassifier(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;
MPPTextClassifier *textClassifier =
[[MPPTextClassifier alloc] initWithOptions:options error:nil];
Opzioni di configurazione
Questa attività prevede le seguenti opzioni di configurazione per le app per iOS:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
displayNamesLocale |
Imposta la lingua delle etichette da utilizzare per i nomi visualizzati forniti nei metadati del modello dell'attività, se disponibili. Il valore predefinito è en per
l'inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato utilizzando l'API Metadata Writer di TensorFlow Lite
| Codice impostazioni internazionali | it |
maxResults |
Imposta il numero massimo facoltativo di risultati di classificazione con il punteggio più alto da restituire. Se < 0, verranno restituiti tutti i risultati disponibili. | Eventuali numeri positivi | -1 |
scoreThreshold |
Imposta la soglia del punteggio di previsione che sostituisce quella fornita nei metadati del modello (se presenti). I risultati inferiori a questo valore vengono rifiutati. | Qualsiasi elemento in virgola mobile | Non impostata |
categoryAllowlist |
Consente di impostare l'elenco facoltativo di nomi di categorie consentite. Se il campo non è vuoto,
i risultati della classificazione il cui nome categoria non è presente in questo set verranno
filtrati. I nomi di categoria duplicati o sconosciuti vengono ignorati.
Questa opzione si esclude a vicenda con categoryDenylist e l'utilizzo di entrambe genera un errore. |
Qualsiasi stringa | Non impostata |
categoryDenylist |
Consente di impostare l'elenco facoltativo di nomi di categorie non consentiti. Se il campo non è vuoto, i risultati di classificazione il cui nome di categoria è presente in questo set verranno filtrati. I nomi di categoria duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con categoryAllowlist e l'uso di entrambe genera un errore. |
Qualsiasi stringa | Non impostata |
Preparazione dei dati
Il classificatore di testo funziona con i dati di testo. L'attività gestisce la pre-elaborazione dell'input dei dati, tra cui la tokenizzazione e la pre-elaborazione tensor.
L'intera pre-elaborazione viene gestita all'interno della funzione classify(text:)
. Non è necessaria
ulteriore pre-elaborazione del testo di input.
Swift
let text = "The input text to be classified."
Objective-C
NSString *text = @"The input text to be classified.";
Esegui l'attività
Per eseguire il classificatore di testo, utilizza il metodo classify(text:)
. Il classificatore di testo
restituisce le categorie possibili per il testo di input.
Swift
let result = try textClassifier.classify(text: text)
Objective-C
MPPTextClassifierResult *result = [textClassifier classifyText:text
error:nil];
Nota: l'attività blocca il thread corrente finché non termina di eseguire l'inferenza sul testo. Per evitare di bloccare il thread corrente, esegui l'elaborazione in un thread in background utilizzando i framework per iOS Dispatch o NSOperation.
Gestire e visualizzare i risultati
Dopo l'esecuzione dell'inferenza, l'attività Classificazione testo restituisce un oggetto TextClassifierResult
che contiene l'elenco di possibili categorie per il testo di input. Le categorie sono definite dal modello utilizzato, quindi se vuoi categorie diverse, scegli un modello diverso o riaddestra uno esistente.
Di seguito è riportato un esempio dei dati di output di questa attività:
TextClassificationResult:
Classification #0 (single classification head):
ClassificationEntry #0:
Category #0:
category name: "positive"
score: 0.8904
index: 0
Category #1:
category name: "negative"
score: 0.1096
index: 1
Questo risultato è stato ottenuto eseguendo il classificatore BERT sul testo di input:
"an imperfect but overall entertaining mystery"
.
Il file ViewController.swift nel codice di esempio mostra come visualizzare i risultati del rilevamento restituiti dall'attività.