L'attività Classificatore di testo MediaPipe ti consente di classificare il testo in un insieme di categorie definite, come sentiment positivi o negativi. Le categorie sono determinate dal modello che usi e come è stato addestrato quel modello. Queste istruzioni mostrano come utilizzare il classificatore di testo con le app per Android.
Puoi vedere questa attività in azione visualizzando la demo. Per ulteriori informazioni su funzionalità, modelli di questa attività, consulta la Panoramica.
Esempio di codice
Il codice di esempio per Classificatore di testo fornisce una semplice implementazione come riferimento. Questo codice è utile per testare l'attività e iniziare creando la tua app di classificazione del testo. Puoi sfogliare Codice di esempio del classificatore di testo su GitHub.
Scarica il codice
Le seguenti istruzioni mostrano come creare una copia locale dell'esempio utilizzando lo strumento a riga di comando git per il controllo della versione.
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 l'istanza Git in modo da utilizzare il pagamento sparso,
in modo da avere solo i file dell'app di esempio Classificatore di testo:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/android
Per istruzioni su come configurare ed eseguire un esempio con Android Studio, consulta le istruzioni di configurazione del codice di esempio nella Guida alla configurazione per Android.
Componenti chiave
I seguenti file contengono il codice fondamentale per la classificazione del testo app di esempio:
- TextClassifierHelper.kt: Inizializza il classificatore di testo e gestisce la selezione del modello.
- MainActivity.kt:
Implementa l'applicazione, incluse le chiamate a
TextClassifierHelper
eResultsAdapter
. - ResultsAdapter.kt: Gestisce e formatta i risultati.
Configurazione
Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e per i progetti di codice che usano Classificatore di testo. Per informazioni generali su l'impostazione dell'ambiente di sviluppo per l'utilizzo di Attività di MediaPipe, tra cui: i requisiti di versione della piattaforma, consulta Guida alla configurazione per Android.
Dipendenze
Il classificatore di testo utilizza le librerie com.google.mediapipe:tasks-text
. Aggiungi questo
al file build.gradle
del progetto di sviluppo di app per Android.
Puoi importare le dipendenze richieste con il seguente codice:
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
Modello
L'attività Classificatore di testo MediaPipe richiede un modello addestrato compatibile con dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per il classificatore di testo, consulta la panoramica delle attività nella sezione Modelli.
Seleziona e scarica un modello, quindi archivialo nel tuo progetto assets
directory:
<dev-project-root>/src/main/assets
Usa il metodo BaseOptions.Builder.setModelAssetPath()
per specificare il percorso
del modello da utilizzare. Per un esempio di codice, consulta la sezione successiva.
Crea l'attività
Usa una delle funzioni del classificatore di testo TextClassifier.createFrom...()
per
per preparare l'attività per l'esecuzione delle inferenze. Puoi usare createFromFile()
con un percorso relativo o assoluto al file del modello addestrato. Il codice
l'esempio seguente mostra l'utilizzo dell'elemento TextClassifier.createFromOptions()
personalizzata. Per ulteriori informazioni sulle opzioni di configurazione disponibili, vedi
Opzioni di configurazione.
Il codice seguente illustra come creare e configurare questa attività.
// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";
fun initClassifier() {
val baseOptionsBuilder = BaseOptions.builder()
.setModelAssetPath(currentModel)
try {
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
.setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textClassifier = TextClassifier.createFromOptions(context, options)
} catch (e: IllegalStateException) { // exception handling
}
}
Puoi vedere un esempio di come creare un'attività nel codice
TextClassifierHelper
di classe initClassifier()
.
Opzioni di configurazione
Questa attività include le seguenti opzioni di configurazione per le app per Android:
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 (String
). 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()
. Non è necessario
per un'ulteriore pre-elaborazione del testo di input in anticipo.
String inputText = "The input text to be classified.";
Esegui l'attività
Il classificatore di testo usa la funzione TextClassifier.classify()
per eseguire
le inferenze. Usa un thread di esecuzione separato per l'esecuzione della classificazione
per evitare di bloccare il thread dell'interfaccia utente di Android con la tua app.
Il codice seguente mostra come eseguire l'elaborazione con l'attività utilizzando un thread di esecuzione separato.
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
Puoi vedere un esempio di come eseguire un'attività nel codice
TextClassifierHelper
di classe classify()
.
Gestire e visualizzare i risultati
Il classificatore di testo restituisce un TextClassifierResult
che contiene l'elenco
di possibili categorie per il testo di input. Le categorie sono definite
modello utilizzato, quindi se vuoi categorie diverse, scegli un modello diverso,
o riaddestrare una rete 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"
.
Puoi vedere un esempio di come visualizzare i risultati nel codice
ResultsAdapter
e ViewHolder
classe interna.