Aggiungere la classificazione del testo on-device alla tua app con TensorFlow Lite e Firebase - Android Codelab

1. Panoramica

text-classification-result.png

Ti diamo il benvenuto nel codelab Classificazione del testo con TensorFlow Lite e Firebase. In questo codelab imparerai a utilizzare TensorFlow Lite e Firebase per addestrare e implementare un modello di classificazione del testo nella tua app. Questo codelab si basa su questo esempio di TensorFlow Lite.

La classificazione del testo è il processo di assegnazione di tag o categorie al testo in base al suo contenuto. È una delle attività fondamentali nell'elaborazione del linguaggio naturale (NLP) con ampie applicazioni come analisi del sentiment, etichettatura degli argomenti, rilevamento dello spam e rilevamento delle intenzioni.

L'analisi del sentiment è l'interpretazione e la classificazione delle emozioni (positive, negative e neutre) all'interno dei dati di testo mediante tecniche di analisi del testo. L'analisi del sentiment consente alle attività di identificare il sentiment dei clienti nei confronti di prodotti, brand o servizi nelle conversazioni e nei feedback online.

Questo tutorial mostra come creare un modello di machine learning per l'analisi del sentiment, in particolare per classificare il testo come positivo o negativo. Questo è un esempio di classificazione binaria, ovvero a due classi, un tipo di problema di machine learning importante e ampiamente applicabile.

Obiettivi didattici

  • Addestrare un modello di analisi del sentiment TF Lite con Model Maker TF Lite
  • Esegui il deployment di modelli TF Lite in Firebase ML e accedi dalla tua app
  • Integra i modelli di analisi del sentiment TF Lite nella tua app utilizzando la libreria di attività di TF Lite

Che cosa ti serve

  • Versione più recente di Android Studio.
  • Codice campione.
  • Un dispositivo di test con Android 5.0 o versioni successive e Google Play Services 9.8 o versioni successive oppure un emulatore con Google Play Services 9.8 o versioni successive
  • Se utilizzi un dispositivo, un cavo di connessione.

Come utilizzerai questo tutorial?

Leggi solo Leggi e completa gli esercizi

Come valuteresti la tua esperienza di creazione di app per Android?

Principiante Intermedio Proficiente

2. recupera il codice campione

Clona il repository GitHub dalla riga di comando.

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

Se non hai installato Git, puoi anche scaricare il progetto di esempio dalla relativa pagina GitHub o facendo clic su questo link.

3. Importa l'app iniziale

Da Android Studio, seleziona la directory codelab-textclassification-android-master ( android_studio_folder.png) dal download del codice di esempio (File > Apri > .../codelab-textclassification-android-master/start).

Ora dovresti avere il progetto iniziale aperto in Android Studio.

4. Esegui l'app iniziale

Ora che hai importato il progetto in Android Studio, puoi eseguire l'app per la prima volta. Collega il dispositivo Android e fai clic su Esegui ( Esegui.png) nella barra degli strumenti di Android Studio.

L'app dovrebbe avviarsi sul tuo dispositivo. Contiene solo un'interfaccia utente semplice che semplifica l'integrazione e il test dei modelli di classificazione del testo nei passaggi successivi. A questo punto, se provi a prevedere i sentimenti, l'app restituirà solo alcuni risultati fittizi.

2fb4e69fafb2e3ed.png

5. Creare un progetto nella Console Firebase

Aggiungi Firebase al progetto

  1. Vai alla Console Firebase.
  2. Seleziona Aggiungi progetto.
  3. Seleziona o inserisci un nome per il progetto.
  4. Segui i restanti passaggi di configurazione nella Console Firebase, quindi fai clic su Crea progetto (o Aggiungi Firebase, se utilizzi un progetto Google esistente).

6. Aggiungi Firebase all'app

  1. Dalla schermata della panoramica del nuovo progetto, fai clic sull'icona Android per avviare il flusso di lavoro di configurazione.
  2. Inserisci il nome del pacchetto del codelab: org.tensorflow.lite.codelabs.textclassification

Aggiungere il file google-services.json all'app

Dopo aver aggiunto il nome del pacchetto e aver selezionato Registra**, fai clic su Scarica google-services.json** per ottenere il file di configurazione Firebase per Android, quindi copia il file google-services.json nella directory *app* del progetto.

Aggiungere il plug-in google-services all'app

Segui le istruzioni nella console Firebase per aggiornare i file build.gradle.kts per aggiungere Firebase all'app.

Il plug-in google-services utilizza il file google-services.json per configurare l'applicazione in modo che utilizzi Firebase.

Sincronizzare il progetto con i file Gradle

Per assicurarti che tutte le dipendenze siano disponibili per la tua app, a questo punto devi sincronizzare il progetto con i file Gradle. Seleziona File > Sincronizza il progetto con i file Gradle dalla barra degli strumenti di Android Studio.

7. Esegui l'app con Firebase

Ora che hai configurato il plug-in google-services con il file JSON, puoi eseguire l'app con Firebase. Collega il dispositivo Android e fai clic su Esegui ( execute.png) nella barra degli strumenti di Android Studio.

L'app dovrebbe avviarsi sul tuo dispositivo. A questo punto, la tua app dovrebbe comunque essere creata correttamente.

8. Addestramento di un modello di analisi del sentiment

Utilizzeremo Model Maker di TensorFlow Lite per addestrare un modello di classificazione del testo per prevedere il sentiment di un determinato testo.

Questo passaggio viene presentato come un blocco note Python che puoi aprire in Google Colab. Puoi scegliere Runtime > Esegui tutto per eseguire tutto il blocco note contemporaneamente.

Apri in Colab

Al termine di questo passaggio, avrai un modello di analisi del sentiment TensorFlow Lite pronto per il deployment in un'app mobile.

9. Esegui il deployment di un modello in Firebase ML

Il deployment di un modello in Firebase ML è utile per due motivi principali:

  1. Possiamo mantenere le dimensioni di installazione dell'app ridotte e scaricare il modello solo se necessario
  2. Il modello può essere aggiornato regolarmente e con un ciclo di rilascio diverso rispetto all'intera app

Il modello può essere implementato tramite la console o in modo programmatico utilizzando l'SDK Firebase Admin. In questo passaggio eseguiremo il deployment tramite la console.

Per prima cosa, apri la Console Firebase e fai clic su Machine Learning nel pannello di navigazione a sinistra. Fai clic su "Inizia". se lo apri per la prima volta. Poi vai a "Personalizzato" e fai clic sul pulsante "Aggiungi modello".

Quando richiesto, assegna al modello il nome sentiment_analysis e carica il file che hai scaricato da Colab nel passaggio precedente.

3c3c50e6ef12b3b.png

10. Scarica il modello da Firebase ML

Scegliere quando scaricare il modello remoto da Firebase nella tua app può essere complicato, poiché i modelli TFLite possono diventare relativamente grandi. Idealmente, vogliamo evitare di caricare il modello immediatamente all'avvio dell'app, poiché se il nostro modello viene utilizzato solo per una funzionalità e l'utente non la utilizza mai, avremo scaricato una quantità significativa di dati senza motivo. Possiamo anche impostare opzioni di download, ad esempio il recupero dei modelli solo quando il dispositivo è connesso al Wi-Fi. Se vuoi assicurarti che il modello sia disponibile anche senza una connessione di rete, è importante includerlo anche senza l'app come backup.

Per semplicità, rimuoveremo il modello in bundle predefinito e scaricheremo sempre un modello da Firebase al primo avvio dell'app. In questo modo, quando esegui l'analisi del sentiment, puoi assicurarti che l'inferenza sia in esecuzione con il modello fornito da Firebase.

Nel file app/build.gradle.kts, aggiungi la dipendenza di Firebase Machine Learning.

app/build.gradle.kts

Trova questo commento:

// TODO 1: Add Firebase ML dependency

Poi aggiungi:

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

Quando Android Studio ti chiede di sincronizzare il progetto, scegli Sincronizza ora.

Poi aggiungiamo del codice per scaricare il modello da Firebase.

MainActivity.java

Trova questo commento:

// TODO 2: Implement a method to download TFLite model from Firebase

Poi aggiungi:

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

Successivamente, chiama il metodo downloadModel nel metodo onCreate dell'attività.

MainActivity.java

Trova questo commento:

// TODO 3: Call the method to download TFLite model

Quindi aggiungi:

downloadModel("sentiment_analysis");

11. Integra il modello nella tua app

La libreria di attività TensorFlow Lite ti aiuta a integrare i modelli TensorFlow Lite nella tua app con poche righe di codice. Inizializzeremo un'istanza NLClassifier utilizzando il modello TensorFlow Lite scaricato da Firebase. che verrà poi utilizzato per classificare il testo inserito dagli utenti dell'app e mostrare il risultato nell'interfaccia utente.

Aggiungi la dipendenza

Vai al file Gradle dell'app e aggiungi la libreria di attività TensorFlow Lite (testo) nelle dipendenze dell'app.

app/build.gradle

Trova questo commento:

// TODO 4: Add TFLite Task API (Text) dependency

Poi aggiungi:

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

Quando Android Studio ti chiede di sincronizzare il progetto, scegli Sincronizza ora.

Inizializzare un classificatore di testo

Quindi caricheremo il modello di analisi del sentiment scaricato da Firebase utilizzando l'elemento NLClassifier della libreria attività.

MainActivity.java

Dichiariamo una variabile di istanza NLClassifier. Trova questo commento:

// TODO 5: Define a NLClassifier variable

Quindi aggiungi:

private NLClassifier textClassifier;

Inizializza la variabile textClassifier con il modello di analisi del sentiment scaricato da Firebase. Trova questo commento:

// TODO 6: Initialize a TextClassifier with the downloaded model

Poi aggiungi:

textClassifier = NLClassifier.createFromFile(model.getFile());

Classificare il testo

Dopo aver configurato l'istanza textClassifier, puoi eseguire l'analisi del sentiment con una singola chiamata al metodo.

MainActivity.java

Trova questo commento:

// TODO 7: Run sentiment analysis on the input text

Quindi aggiungi:

List<Category> results = textClassifier.classify(text);

Implementare la post-elaborazione

Infine, convertiremo l'output del modello in un testo descrittivo da mostrare sullo schermo.

MainActivity.java

Trova questo commento:

// TODO 8: Convert the result to a human-readable text

Rimuovi il codice che genera il testo fittizio dei risultati:

String textToShow = "Dummy classification result.\n";

Quindi aggiungi:

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

12. Esegui l'app finale

Hai integrato il modello di analisi del sentiment nell'app, quindi proviamolo. Collega il dispositivo Android e fai clic su Esegui ( Esegui.png) nella barra degli strumenti di Android Studio.

L'app dovrebbe essere in grado di prevedere correttamente il sentiment relativo alla recensione del film che inserisci.

img/text-classification-result.png

13. Potenzia l'app con più funzionalità di Firebase

Oltre a ospitare i modelli TFLite, Firebase offre diverse altre funzionalità per migliorare i casi d'uso di machine learning:

  • Firebase Performance Monitoring per misurare la velocità di inferenza del modello in esecuzione sui dispositivo.
  • Firebase Analytics per misurare il rendimento del modello in produzione misurando la reazione degli utenti.
  • Firebase A/B Testing per testare più versioni del tuo modello
  • Ricordi che abbiamo addestrato due versioni del nostro modello TFLite in precedenza? I test A/B sono un buon modo per scoprire quale versione ha il rendimento migliore in produzione.

Per scoprire di più su come sfruttare queste funzionalità nella tua app, consulta i codelab riportati di seguito:

14. Complimenti!

In questo codelab hai imparato ad addestrare un modello TFLite di analisi del sentiment ed eseguirlo nella tua app mobile utilizzando Firebase. Per saperne di più su TFLite e Firebase, dai un'occhiata ad altri esempi di TFLite e alle guide introduttive di Firebase.

Argomenti trattati

  • TensorFlow Lite
  • Firebase ML

Passaggi successivi

  • Misura la velocità di inferenza del modello con Firebase Performance Monitoring.
  • Esegui il deployment del modello da Colab direttamente a Firebase tramite l'API Firebase ML Model Management.
  • Aggiungi un meccanismo per consentire agli utenti di fornire un feedback sul risultato della previsione e utilizza Firebase Analytics per monitorare il feedback degli utenti.
  • Eseguire un test A/B del modello vettore di parole medio e del modello MobileBERT con Firebase A/B Testing.

Scopri di più

Hai una domanda?

Segnalare i problemi