Aggiungi la classificazione del testo sul dispositivo alla tua app con TensorFlow Lite e Firebase - Android Codelab

1. Panoramica

text-classification-result.png

Benvenuto nel codelab di classificazione del testo con TensorFlow Lite e Firebase. In questo codelab imparerai come utilizzare TensorFlow Lite e Firebase per addestrare e distribuire un modello di classificazione del testo nella tua app. Questo codelab è basato 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. È uno dei compiti fondamentali nell'elaborazione del linguaggio naturale (NLP) con ampie applicazioni come l'analisi del sentiment, l'etichettatura degli argomenti, il rilevamento dello spam e il rilevamento degli intenti.

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

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

Cosa imparerai

  • Addestra modelli di analisi del sentiment TF Lite con TF Lite Model Maker
  • Distribuisci i modelli TF Lite su Firebase ML e accedi dalla tua app
  • Integra i modelli di analisi del sentiment TF Lite nella tua app utilizzando la libreria attività TF Lite

Di cosa avrai bisogno

  • Ultima versione di Android Studio .
  • Codice d'esempio.
  • Un dispositivo di prova con Android 5.0+ e Google Play Services 9.8 o versioni successive oppure un emulatore con Google Play Services 9.8 o versioni successive
  • Se si utilizza un dispositivo, un cavo di collegamento.

Come utilizzerai questo tutorial?

Leggetelo solo fino in fondo Leggilo e completa gli esercizi

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

Novizio Intermedio Competente

2. Ottieni il codice di esempio

Clona il repository GitHub dalla riga di comando.

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

Se non hai git installato, puoi anche scaricare il progetto di esempio dalla sua pagina GitHub o facendo clic su questo collegamento .

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, sei pronto per eseguire l'app per la prima volta. Collega il tuo dispositivo Android e fai clic su Esegui ( eseguire.png )nella barra degli strumenti di Android Studio.

L'app dovrebbe avviarsi sul tuo dispositivo. Contiene solo una semplice interfaccia utente 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. Crea un progetto della console Firebase

Aggiungi Firebase al progetto

  1. Vai alla console Firebase .
  2. Seleziona Aggiungi progetto .
  3. Seleziona o inserisci un nome di 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 panoramica del tuo nuovo progetto, fai clic sull'icona Android per avviare il flusso di lavoro di configurazione.
  2. Inserisci il nome del pacchetto codelab: org.tensorflow.lite.codelabs.textclassification

Aggiungi il file google-services.json alla tua app

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

Aggiungi il plug-in dei servizi Google alla tua app

Segui le istruzioni sulla console Firebase aggiornando i file build.gradle.kts per aggiungere Firebase alla tua app.

Il plug-in google-services utilizza il file google-services.json per configurare la tua applicazione per utilizzare Firebase.

Sincronizza il tuo progetto con i file Gradle

Per essere sicuro che tutte le dipendenze siano disponibili per la tua app, a questo punto dovresti sincronizzare il tuo progetto con i file Gradle. Seleziona File > Sincronizza progetto con 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 tuo file JSON, sei pronto per eseguire l'app con Firebase. Collega il tuo dispositivo Android e fai clic su Esegui ( eseguire.png )nella barra degli strumenti di Android Studio.

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

8. Addestrare un modello di analisi del sentiment

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

Questo passaggio viene presentato come un notebook Python che puoi aprire in Google Colab. È possibile scegliere Runtime > Esegui tutto per eseguire tutto il notebook contemporaneamente.

Aperto in Colab

Dopo aver completato questo passaggio, avrai un modello di analisi del sentiment TensorFlow Lite pronto per la distribuzione su un'app mobile.

9. Distribuisci un modello su Firebase ML

La distribuzione di un modello su Firebase ML è utile per due motivi principali:

  1. Possiamo mantenere ridotte le dimensioni di installazione dell'app 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 distribuito tramite la console o a livello di programmazione utilizzando Firebase Admin SDK. In questo passaggio eseguiremo la distribuzione tramite la console.

Innanzitutto, apri la console Firebase e fai clic su Machine Learning nel pannello di navigazione a sinistra. Fai clic su "Inizia" se stai aprendo questa prima volta. Quindi vai su "Personalizzato" e fai clic sul pulsante "Aggiungi modello".

Quando richiesto, dai un nome al modello 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 per una sola funzionalità e l'utente non utilizza mai quella funzionalità, avremo scaricato una quantità significativa di dati senza motivo. Possiamo anche impostare opzioni di download come il recupero dei modelli solo quando siamo connessi al Wi-Fi. Se vuoi essere sicuro che il modello sia disponibile anche senza connessione di rete, è importante includerlo anche senza l'app come backup.

Per motivi di 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 essere sicuro che l'inferenza viene eseguita con il modello fornito da Firebase.

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

app/build.gradle.kts

Trovi 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 tuo progetto, scegli Sincronizza ora .

Quindi aggiungiamo del codice per scaricare il modello da Firebase.

MainActivity.java

Trovi 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

Trovi questo commento:

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

Poi 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 solo poche righe di codice. Inizializzeremo un'istanza NLClassifier utilizzando il modello TensorFlow Lite scaricato da Firebase. Quindi lo utilizzeremo per classificare l'input di testo da parte degli utenti dell'app e mostrare il risultato sull'interfaccia utente.

Aggiungi la dipendenza

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

app/build.gradle

Trovi 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 tuo progetto, scegli Sincronizza ora .

Inizializza un classificatore di testo

Quindi caricheremo il modello di analisi del sentiment scaricato da Firebase utilizzando NLClassifier della Task Library.

MainActivity.java

Dichiariamo una variabile di istanza NLClassifier. Trovi questo commento:

// TODO 5: Define a NLClassifier variable

Poi aggiungi:

private NLClassifier textClassifier;

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

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

Poi aggiungi:

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

Classificare il testo

Una volta configurata l'istanza textClassifier , puoi eseguire l'analisi del sentiment con una singola chiamata al metodo.

MainActivity.java

Trovi questo commento:

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

Poi 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

Trovi questo commento:

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

Rimuovi il codice che genera il testo del risultato fittizio:

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

Poi 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 testiamolo. Collega il tuo dispositivo Android e fai clic su Esegui ( eseguire.png )nella barra degli strumenti di Android Studio.

L'app dovrebbe essere in grado di prevedere correttamente il sentiment della recensione del film inserita.

img/text-classification-result.png

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

Oltre a ospitare i tuoi modelli TFLite, Firebase offre molte altre funzionalità per potenziare i casi d'uso del machine learning:

  • Monitoraggio delle prestazioni Firebase per misurare la velocità di inferenza del modello in esecuzione sul dispositivo degli utenti.
  • Firebase Analytics per misurare il rendimento del tuo modello in produzione misurando la reazione dell'utente.
  • Firebase A/B Testing per testare più versioni del tuo modello
  • Ti ricordi che in precedenza abbiamo addestrato due versioni del nostro modello TFLite? Il test A/B è un buon modo per scoprire quale versione funziona meglio in produzione!

Per ulteriori informazioni su come sfruttare queste funzionalità nella tua app, consulta i codelab seguenti:

14. Congratulazioni!

In questo codelab hai imparato come addestrare un modello TFLite di analisi del sentiment e distribuirlo nella tua app mobile utilizzando Firebase. Per ulteriori informazioni su TFLite e Firebase, dai un'occhiata ad altri esempi di TFLite e alle guide introduttive di Firebase.

Di cosa abbiamo parlato

  • TensorFlow Lite
  • FirebaseML

Prossimi passi

  • Misura la velocità di inferenza del tuo modello con Firebase Performance Monitoring.
  • Distribuisci il modello da Colab direttamente a Firebase tramite l'API Firebase ML Model Management.
  • Aggiungi un meccanismo per consentire agli utenti di fornire feedback sul risultato della previsione e utilizza Firebase Analytics per tenere traccia del feedback degli utenti.
  • Testare A/B il modello Average Word Vector e il modello MobileBERT con il test A/B Firebase.

Saperne di più

Hai una domanda?

Segnala problemi