Agrega clasificación de texto integrada en el dispositivo a tu app con TensorFlow Lite y Firebase - Codelab para iOS

1. Descripción general

clasificación_resultado_pantalla.png

Te damos la bienvenida al codelab Clasificación de texto con TensorFlow Lite y Firebase. En este codelab, aprenderás a usar TensorFlow Lite y Firebase para entrenar y, luego, implementar un modelo de clasificación de texto en tu app. Este codelab se basa en este ejemplo de TensorFlow Lite.

La clasificación de texto es el proceso de asignar etiquetas o categorías al texto según su contenido. Es una de las tareas fundamentales del procesamiento de lenguaje natural (PLN) con amplios usos, como el análisis de opiniones, el etiquetado de temas, la detección de spam y la detección de intents.

El análisis de opiniones es la interpretación y clasificación de emociones (positivas, negativas y neutrales) en los datos de texto mediante técnicas de análisis de textos. El análisis de opiniones permite a las empresas identificar la opinión de los clientes sobre los productos, las marcas o los servicios en conversaciones y comentarios en línea.

En este instructivo, se muestra cómo compilar un modelo de aprendizaje automático para el análisis de opiniones, en particular para clasificar texto como positivo o negativo. Este es un ejemplo de clasificación binaria (o de dos clases), un tipo importante y ampliamente aplicable de problema de aprendizaje automático.

Qué aprenderás

  • Entrena un modelo de análisis de opiniones de TF Lite con Model Maker de TF Lite
  • Implementa modelos de TF Lite en el AA de Firebase y accede a ellos desde tu app
  • Realiza un seguimiento de los comentarios de los usuarios para medir la precisión del modelo con Firebase Analytics
  • Cómo generar perfiles del rendimiento del modelo con Firebase Performance Monitoring
  • Selecciona cuál de los múltiples modelos implementados se carga a través de Remote Config
  • Experimenta con diferentes modelos con Firebase A/B Testing

Requisitos

  • Xcode 11 (o una versión posterior)
  • CocoaPods 1.9.1 (o una versión posterior)

¿Cómo usarás este instructivo?

Leer Leer y completar los ejercicios

¿Cómo calificarías tu experiencia con la compilación de apps para Android?

Principiante Intermedio Avanzado

2. Crea un proyecto de Firebase console

Agrega Firebase al proyecto

  1. Dirígete a Firebase console.
  2. Selecciona Create New Project y asígnale el nombre “Firebase ML iOS Codelab”.

3. Obtén el proyecto de muestra

Descargue el código

Primero, clona el proyecto de muestra y ejecuta pod update en el directorio del proyecto:

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

Si no tienes Git instalado, también puedes descargar el proyecto de muestra desde su página de GitHub o haciendo clic en este vínculo. Cuando hayas descargado el proyecto, ejecútalo en Xcode y experimenta con la clasificación de texto para descubrir cómo funciona.

Configura Firebase

Sigue la documentación para crear un nuevo proyecto de Firebase. Cuando tengas tu proyecto, descarga el archivo GoogleService-Info.plist correspondiente de Firebase console y arrástralo a la raíz del proyecto Xcode.

9efb62a92f27e939.png

Agrega Firebase al Podfile y ejecuta la instalación del Pod.

pod 'FirebaseMLModelDownloader', '9.3.0-beta'

En el método didFinishLaunchingWithOptions de tu AppDelegate, importa Firebase en la parte superior del archivo.

import FirebaseCore

Y agrega una llamada para configurar Firebase.

FirebaseApp.configure()

Vuelve a ejecutar el proyecto para asegurarte de que la app esté configurada correctamente y no falle durante el inicio.

4. Entrena un modelo de análisis de opiniones

Usaremos Model Maker de TensorFlow Lite para entrenar un modelo de clasificación de texto que prediga la opinión de un texto determinado.

Este paso se presenta como un notebook de Python que puedes abrir en Google Colab.

Abrir en Colab

Cuando termines este paso, tendrás un modelo de análisis de opiniones de TensorFlow Lite que está listo para implementarse en una app para dispositivos móviles.

5. Implementa un modelo en el AA de Firebase

La implementación de un modelo en el AA de Firebase es útil por dos motivos principales:

  1. Podemos mantener un tamaño de instalación de la app pequeño y solo descargar el modelo si es necesario.
  2. El modelo se puede actualizar con regularidad y con un ciclo de lanzamiento diferente al de toda la app.

El modelo se puede implementar a través de la consola, o de manera programática, con el SDK de Firebase Admin. En este paso, realizaremos la implementación a través de la consola.

Primero, abre Firebase console y haz clic en Aprendizaje automático en el panel de navegación de la izquierda. Haz clic en "Comenzar" si lo abres por primera vez. Luego, navega a “Personalizado” y haz clic en el botón “Agregar modelo”.

Cuando se te solicite, asigna el nombre sentiment_analysis al modelo y sube el archivo que descargaste de Colab en el paso anterior.

3c3c50e6ef12b3b.png

6. Descarga el modelo desde el AA de Firebase

Elegir cuándo descargar el modelo remoto de Firebase en tu app puede ser complicado, ya que los modelos de TFLite pueden crecer relativamente grande. Lo ideal sería evitar cargar el modelo de inmediato cuando se inicie la app, ya que si nuestro modelo se usa solo para una función y el usuario nunca usa esa función, se descargará una cantidad significativa de datos sin motivo. También podemos configurar opciones de descarga, como recuperar modelos solo cuando haya conexión a Wi-Fi. Si quieres asegurarte de que el modelo esté disponible incluso sin conexión de red, es importante empaquetarlo sin la app como copia de seguridad.

Para simplificar, quitaremos el modelo empaquetado predeterminado y siempre descargaremos un modelo de Firebase cuando la app se inicie por primera vez. De esta manera, cuando ejecutes un análisis de opiniones, podrás asegurarte de que la inferencia se ejecute con el modelo proporcionado por Firebase.

En la parte superior de ModelLoader.swift, importa el módulo de Firebase.

import FirebaseCore
import FirebaseMLModelDownloader

Luego, implementa los siguientes métodos.

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))
          }
  }
}

En el elemento viewDidLoad de ViewController.swift, reemplaza la llamada a loadModel() con nuestro nuevo método de descarga del modelo.

// 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
}

Vuelve a ejecutar la app. Después de unos segundos, deberías ver un registro en Xcode que indica que el modelo remoto se descargó correctamente. Intenta escribir algo de texto y confirma que no haya cambiado el comportamiento de la app.

7. Integra el modelo en tu app

La biblioteca de tareas de TensorFlow Lite te ayuda a integrar los modelos de TensorFlow Lite en tu app con solo unas pocas líneas de código. Inicializaremos una instancia de TFLNLClassifier con el modelo de TensorFlow Lite que descargaste de Firebase. Luego, lo usaremos para clasificar la entrada de texto de los usuarios de la app y mostrar el resultado en la IU.

Agrega la dependencia

Ve al Podfile de la app y agrega la Biblioteca de tareas (texto) de TensorFlow Lite en las dependencias de la app. Asegúrate de agregar la dependencia en la declaración target 'TextClassification'.

pod 'TensorFlowLiteTaskText', '~> 0.2.0'

Ejecuta pod install para instalar la dependencia nueva.

Inicializa un clasificador de texto

Luego, cargaremos el modelo de análisis de opiniones que se descargó de Firebase mediante el elemento NLClassifier de la Biblioteca de tareas.

ViewController.swift

Declararemos una variable de instancia TFLNLClassifier. En la parte superior del archivo, importa la dependencia nueva:

import TensorFlowLiteTaskText

Busca este comentario arriba del método que modificamos en el último paso:

// TODO: Add a TFLNLClassifier property.

Reemplaza el comentario TODO con el siguiente código:

private var classifier: TFLNLClassifier?

Inicializa la variable textClassifier con el modelo de análisis de opiniones que descargaste de Firebase. Busca este comentario que agregamos en el paso anterior:

// TODO: Initialize an NLClassifier from the downloaded model

Reemplaza el comentario TODO con el siguiente código:

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

Clasificar texto

Una vez configurada la instancia classifier, puedes ejecutar un análisis de opiniones con una sola llamada de método.

ViewController.swift

En el método classify(text:), busca el comentario TODO:

// TODO: Run sentiment analysis on the input text

Reemplaza el comentario por el siguiente código:

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. Ejecuta la app final

Integraste el modelo de análisis de opiniones en la app, así que probémoslo. Conecta tu dispositivo iOS y haz clic en Run ( ejecutar.png) en la barra de herramientas de Xcode.

La app debería poder predecir correctamente la opinión de la opinión de la película que ingreses.

clasificación_resultado_pantalla.png

9. Mejora la app con más funciones de Firebase

Además de alojar tus modelos de TFLite, Firebase proporciona muchas otras funciones para potenciar tus casos de uso de aprendizaje automático:

  • Firebase Performance Monitoring para medir la velocidad de inferencia de tu modelo que se ejecuta en el dispositivo de los usuarios
  • Firebase Analytics para medir el rendimiento de tu modelo en producción mediante la medición de la reacción del usuario
  • Firebase A/B Testing para probar varias versiones de tu modelo
  • ¿Recuerdas que antes entrenamos dos versiones de nuestro modelo de TFLite? Las pruebas A/B son una buena manera de averiguar qué versión tiene mejor rendimiento en producción.

Si quieres obtener más información para aprovechar estas funciones en tu app, consulta los siguientes codelabs:

10. ¡Felicitaciones!

En este codelab, aprendiste a entrenar un modelo TFLite de análisis de opiniones y a implementarlo en tu app para dispositivos móviles con Firebase. Para obtener más información sobre TFLite y Firebase, consulta otras muestras de TFLite y las guías de introducción de Firebase.

Temas abordados

  • TensorFlow Lite
  • AA de Firebase

Próximos pasos

  • Mide la velocidad de inferencia de tu modelo con Firebase Performance Monitoring.
  • Implementa el modelo de Colab directamente en Firebase a través de la API de Firebase ML Model Management.
  • Agrega un mecanismo para permitir que los usuarios envíen comentarios sobre el resultado de la predicción y usa Firebase Analytics para hacer un seguimiento de los comentarios de los usuarios.
  • Realiza pruebas A/B del modelo de vector de palabras promedio y de MobileBERT con Firebase A/B Testing.

Más información

¿Tienes alguna pregunta?

Informar problemas