L'attività Classificatore di testo ti consente di classificare il testo in una serie di categorie definite, come sentiment positivi o negativi. Le categorie sono determinate in base al modello utilizzato e al modo in cui è stato addestrato. Queste istruzioni mostrano come usare il classificatore di testo nelle app per iOS. L'esempio di codice descritto in le istruzioni sono disponibili su GitHub.
Puoi vedere questa attività in azione visualizzando questo Web una demo. Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione questa attività, consulta le Panoramica.
Esempio di codice
Il codice di esempio relativo alle attività di MediaPipe è un'implementazione di base di un classificatore di testo per iOS.
Puoi utilizzare l'app come punto di partenza per la tua app per iOS o fare riferimento all'app quando modifichi un'app esistente. Per consultare l'esempio di codice del Classificatore di testo, attivo GitHub.
Scarica il codice
Le seguenti istruzioni mostrano come creare una copia locale dell'esempio utilizzando lo strumento a riga di comando git.
Per scaricare il codice di esempio:
Clona il repository git utilizzando il comando seguente:
git clone https://github.com/google-ai-edge/mediapipe-samples
Facoltativamente, configura la tua istanza Git per l'utilizzo di un pagamento sparso, in modo da avere solo i file per l'app di esempio Classificatore di testo:
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 con la libreria di attività MediaPipe, apri il progetto con Xcode ed esegui l'app. Per istruzioni, vedi la Guida alla configurazione per iOS.
Componenti chiave
I file seguenti contengono il codice fondamentale per l'esempio di classificatore di testo applicazione:
- TextClassifierHelper.swift: Inizializza il classificatore di 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 progetti di codice per usare Classificatore di testo. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'uso di attività MediaPipe, inclusa la 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 raccolta è 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 l'articolo CocoaPods
Guida all'installazione.
Per istruzioni su come creare un elemento Podfile
con i pod necessari per il tuo
consulta la sezione Utilizzo
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 dei test delle unità, consulta la Guida alla configurazione per
iOS per ulteriori informazioni sulla configurazione
il tuo Podfile
.
Modello
L'attività Classificatore di testo MediaPipe richiede un modello addestrato compatibile con questa attività. Per saperne di più sui modelli addestrati disponibili Classificatore di testo, consulta la panoramica dell'attività Modelli .
Seleziona e scarica un modello, quindi aggiungilo alla directory del progetto utilizzando Xcode. Per istruzioni su come aggiungere file al progetto Xcode, consulta Gestione i file e le cartelle in Xcode progetto.
Utilizza la proprietà BaseOptions.modelAssetPath
per specificare il percorso del modello
nel tuo app bundle. Per un esempio di codice, consulta la sezione successiva.
Crea l'attività
Puoi creare l'attività Classificatore di testo chiamando uno dei suoi inizializzatori. La
L'inizializzazione di TextClassifier(options:)
imposta i valori per la configurazione
le opzioni di CPU e memoria disponibili.
Se non hai bisogno di un classificatore di testo inizializzato con una configurazione personalizzata
puoi usare l'inizializzatore TextClassifier(modelPath:)
per creare un
Classificatore di testo con le opzioni predefinite. Per ulteriori informazioni sulla configurazione
vedi Panoramica della configurazione.
Il codice seguente illustra 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à include 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 nel
metadati del modello dell'attività, se disponibili. Il valore predefinito è en per
Inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato
Utilizzando l'API TensorFlow Metadata Writer
| Codice impostazioni internazionali | it |
maxResults |
Imposta il numero massimo facoltativo di risultati della classificazione con il punteggio più alto su per tornare indietro. Se < 0, verranno restituiti tutti i risultati disponibili. | Qualsiasi numero positivo | -1 |
scoreThreshold |
Imposta la soglia del punteggio di previsione che sostituisce quella fornita in gli eventuali metadati del modello. I risultati al di sotto di questo valore vengono rifiutati. | Qualsiasi numero in virgola mobile | Non impostato |
categoryAllowlist |
Consente di impostare l'elenco facoltativo di nomi di categorie consentiti. Se il campo non è vuoto,
i risultati della classificazione i cui nome non è incluso in questo set saranno
esclusi. I nomi di categorie duplicati o sconosciuti vengono ignorati.
Questa opzione si esclude a vicenda con categoryDenylist e utilizza
entrambi generano un errore. |
Qualsiasi stringa | Non impostato |
categoryDenylist |
Consente di impostare un elenco facoltativo di nomi di categorie non consentiti. Se
non vuoti, i risultati di classificazione con nome della categoria incluso in questo set verranno filtrati
fuori. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione è reciproca
è esclusivo con categoryAllowlist e l'utilizzo di entrambi genera un errore. |
Qualsiasi stringa | Non impostato |
Preparazione dei dati
Classificatore di testo funziona con i dati di testo. L'attività gestisce l'input dei dati pre-elaborazione, tra cui la tokenizzazione e la pre-elaborazione dei tensori.
Tutte le pre-elaborazioni vengono gestite all'interno della funzione classify(text:)
. Non esiste
una pre-elaborazione aggiuntiva 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, usa il metodo classify(text:)
. Il classificatore di testo
restituisce le possibili categorie 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 con iOS Dispatch o NSOperation i modelli di machine learning.
Gestire e visualizzare i risultati
Dopo l'esecuzione dell'inferenza, l'attività Classificatore di testo restituisce un TextClassifierResult
che contiene l'elenco delle possibili categorie per il testo di input. La
categorie sono definite dal modello utilizzato, quindi se vuoi
di categorie, scegliere un modello diverso o riaddestrarne 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"
.
La ViewController.swift del codice di esempio che mostra come visualizzare i risultati del rilevamento restituito dall'attività.