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

1. Panoramica

schermata_risultato_classificazione.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 ai suoi contenuti. È una delle attività fondamentali dell'elaborazione del linguaggio naturale (NLP) con ampie applicazioni come l'analisi del sentiment, l'etichettatura degli argomenti, il rilevamento dello spam e il rilevamento dell'intento.

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 aziende 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

  • Addestra un modello di analisi del sentiment TF Lite con TF Lite Model Maker
  • Esegui il deployment dei modelli TF Lite in Firebase ML e accedivi dalla tua app
  • Monitora il feedback degli utenti per misurare l'accuratezza del modello con Firebase Analytics
  • Profila il rendimento del modello tramite Firebase Performance Monitoring
  • Seleziona quale dei vari modelli di cui è stato eseguito il deployment viene caricato tramite Remote Config
  • Sperimenta diversi modelli tramite Firebase A/B Testing

Che cosa ti serve

  • Xcode 11 (o superiore)
  • CocoaPods 1.9.1 (o versioni successive)

Come utilizzerai questo tutorial?

Leggi solo Leggi e completa gli esercizi

Come valuteresti la tua esperienza nello sviluppo di app Android?

Principiante Livello intermedio Eccellente

2. Crea progetto della console Firebase

Aggiungi Firebase al progetto

  1. Vai alla Console Firebase.
  2. Seleziona Create New Project (Crea nuovo progetto) e assegna al progetto il nome "Firebase ML iOS Codelab".

3. Ottieni il progetto di esempio

Scarica il codice

Inizia clonando il progetto di esempio ed eseguendo pod update nella directory del progetto:

git clone https://github.com/FirebaseExtended/codelab-textclassification-ios.git
cd codelab-textclassification-ios
pod install --repo-update

Se non hai installato Git, puoi anche scaricare il progetto di esempio dalla relativa pagina GitHub o facendo clic su questo link. Dopo aver scaricato il progetto, eseguilo in Xcode e prova la classificazione del testo per farti un'idea di come funziona.

Configura Firebase

Segui la documentazione per creare un nuovo progetto Firebase. Una volta creato il progetto, scarica il relativo file GoogleService-Info.plist dalla console di Firebase e trascinalo nella directory radice del progetto Xcode.

9efb62a92f27e939.png

Aggiungi Firebase al tuo Podfile ed esegui pod install.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

Nel metodo didFinishLaunchingWithOptions di AppDelegate, importa Firebase nella parte superiore del file

import FirebaseCore

Aggiungi anche una chiamata per configurare Firebase.

FirebaseApp.configure()

Esegui di nuovo il progetto per assicurarti che l'app sia configurata correttamente e non abbia arresti anomali all'avvio.

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

Apri in Colab

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

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

Innanzitutto, apri la Console Firebase e fai clic su Machine Learning nel pannello di navigazione a sinistra. Fai clic su "Inizia" se è la prima volta che apri la pagina. 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

6. Scaricare 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, in quanto se il nostro modello viene utilizzato per una sola 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.

Nella parte superiore di ModelLoader.swift, importa il modulo Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Poi implementa i seguenti metodi.

static func downloadModel(named name: String,
                          completion: @escaping (CustomModel?, DownloadError?) -> Void) {
  guard FirebaseApp.app() != nil else {
    completion(nil, .firebaseNotInitialized)
    return
  }
  guard success == nil && failure == nil else {
    completion(nil, .downloadInProgress)
    return
  }
  let conditions = ModelDownloadConditions(allowsCellularAccess: false)
  ModelDownloader.modelDownloader().getModel(name: name, downloadType: .localModelUpdateInBackground, conditions: conditions) { result in
          switch (result) {
          case .success(let customModel):
                  // Download complete.
                  // The CustomModel object contains the local path of the model file,
                  // which you can use to instantiate a TensorFlow Lite classifier.
                  return completion(customModel, nil)
          case .failure(let error):
              // Download was unsuccessful. Notify error message.
            completion(nil, .downloadFailed(underlyingError: error))
          }
  }
}

Nel file viewDidLoad di ViewController.swift, sostituisci la chiamata a loadModel() con il nuovo metodo di download del modello.

// Download the model from Firebase
print("Fetching model...")
ModelLoader.downloadModel(named: "sentiment_analysis") { (customModel, error) in
  guard let customModel = customModel else {
    if let error = error {
      print(error)
    }
    return
  }

  print("Model download complete")

  // TODO: Initialize an NLClassifier from the downloaded model
}

Esegui di nuovo l'app. Dopo qualche secondo, dovresti visualizzare un log in Xcode che indica che il modello remoto è stato scaricato correttamente. Prova a digitare del testo e verifica che il comportamento dell'app non sia cambiato.

7. Integra il modello nell'app

La libreria di attività di TensorFlow Lite ti aiuta a integrare i modelli TensorFlow Lite nella tua app con poche righe di codice. Inizializziamo un'istanza TFLNLClassifier utilizzando il modello TensorFlow Lite scaricato da Firebase. Poi lo utilizzeremo per classificare l'input di testo degli utenti dell'app e mostrare il risultato nell'interfaccia utente.

Aggiungi la dipendenza

Vai al file Podfile dell'app e aggiungi TensorFlow Lite Task Library (Text) alle dipendenze dell'app. Assicurati di aggiungere la dipendenza nella dichiarazione target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

Esegui pod install per installare la nuova dipendenza.

Inizializzare un classificatore di testo

Caricheremo quindi il modello di analisi del sentiment scaricato da Firebase utilizzando NLClassifier della libreria di attività.

ViewController.swift

Dichiariamo una variabile di istanza TFLNLClassifier. All'inizio del file, importa la nuova dipendenza:

import TensorFlowLiteTaskText

Cerca questo commento sopra il metodo che abbiamo modificato nell'ultimo passaggio:

// TODO: Add a TFLNLClassifier property.

Sostituisci il TODO con il seguente codice:

private var classifier: TFLNLClassifier?

Inizializza la variabile textClassifier con il modello di analisi del sentiment scaricato da Firebase. Cerca il commento che abbiamo aggiunto nell'ultimo passaggio:

// TODO: Initialize an NLClassifier from the downloaded model

Sostituisci il TODO con il seguente codice:

let options = TFLNLClassifierOptions()
self.classifier = TFLNLClassifier.nlClassifier(modelPath: customModel.path, options: options)

Classificare il testo

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

ViewController.swift

Nel metodo classify(text:), trova il commento TODO:

// TODO: Run sentiment analysis on the input text

Sostituisci il commento con il seguente codice:

guard let classifier = self.classifier else { return }

// Classify the text
let classifierResults = classifier.classify(text: text)

// Append the results to the list of results
let result = ClassificationResult(text: text, results: classifierResults)
results.append(result)

8. Esegui l'app finale

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

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

classification_result_screen.png

9. 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 le prestazioni del modello in produzione misurando le reazioni 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? Il test A/B è un buon modo per scoprire quale versione ha un rendimento migliore in produzione.

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

10. Complimenti!

In questo codelab, hai imparato ad addestrare un modello TFLite di analisi del sentiment ed eseguire il deployment della tua app mobile utilizzando Firebase. Per scoprire di più su TFLite e Firebase, dai un'occhiata ad altri esempi di TFLite e alle guide di iniziazione 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 i 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