Guida alla classificazione del testo per iOS

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:

  1. Clona il repository git utilizzando il comando seguente:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 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:

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à.