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

1. Descripción general

text-classification-result.png

Te damos la bienvenida al codelab de clasificación de texto con TensorFlow Lite y Firebase. En este codelab, aprenderás a usar TensorFlow Lite y Firebase para entrenar e 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 de acuerdo con su contenido. Es una de las tareas fundamentales del procesamiento de lenguaje natural (PLN) con aplicaciones amplias 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 las emociones (positivas, negativas y neutrales) en los datos de un texto mediante técnicas de análisis de texto. El análisis de opiniones permite a las empresas identificar las opiniones de los clientes respecto de productos, marcas o servicios a través de 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 la clasificación de texto como positivo o negativo. Este es un ejemplo de clasificación binaria (o de dos clases), un tipo de problema de aprendizaje automático importante y ampliamente aplicable.

Qué aprenderás

  • Entrena modelos de análisis de opiniones de TF Lite con TF Lite Model Maker
  • Implementa modelos de TF Lite en el AA de Firebase y accede a ellos desde tu app
  • Integra modelos de análisis de opiniones de TF Lite en tu app con la biblioteca de tareas de TF Lite

Requisitos

  • La versión más reciente de Android Studio
  • Código de muestra.
  • Un dispositivo de prueba con Android 5.0 o versiones posteriores y Servicios de Google Play 9.8 o versiones posteriores, o un emulador con Servicios de Google Play 9.8 o versiones posteriores
  • Si usas un dispositivo, debes usar un cable de conexión.

¿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. Obtén el código de muestra

Clona el repositorio de GitHub a partir de la línea de comandos.

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

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.

3. Importa la app de partida

En Android Studio, selecciona el directorio codelab-textclassification-android-master ( carpeta_android_studio.png) desde la descarga del código de muestra (File > Open > .../codelab-textclassification-android-master/start).

Ahora, deberías tener el proyecto de inicio abierto en Android Studio.

4. Ejecuta la app de partida

Ahora que importaste el proyecto a Android Studio, podrás ejecutar la app por primera vez. Conecta el dispositivo Android y haz clic en Run ( ejecutar.png) en la barra de herramientas de Android Studio.

La app debería iniciarse en el dispositivo. Solo contiene una IU simple que facilita la integración y prueba de los modelos de clasificación de texto en los próximos pasos. En este punto, si intentas predecir opiniones, la app solo mostrará algunos resultados ficticios.

2fb4e69fafb2e3ed.png

5. Crea un proyecto de Firebase console

Agrega Firebase al proyecto

  1. Dirígete a Firebase console.
  2. Selecciona Agregar proyecto.
  3. Selecciona o ingresa un nombre de proyecto.
  4. Sigue los pasos de configuración restantes en Firebase console y, luego, haz clic en Crear proyecto (o Agregar Firebase si usas un proyecto de Google existente).

6. Agrega Firebase a la app

  1. En la pantalla de descripción general del proyecto nuevo, haz clic en el ícono de Android para iniciar el flujo de trabajo de configuración.
  2. Ingresa el nombre del paquete del codelab: org.tensorflow.lite.codelabs.textclassification

Agrega el archivo google-services.json a tu app

Después de agregar el nombre del paquete y seleccionar Registrar**, haz clic en Descargar google-services.json** para obtener el archivo de configuración de Firebase para Android y, luego, copia el archivo google-services.json en el directorio *app* de tu proyecto.

Agrega el complemento de google-services a tu app

Sigue las instrucciones que aparecen en Firebase console y actualiza los archivos build.gradle.kts para agregar Firebase a tu app.

El complemento google-services usa el archivo google-services.json para configurar tu aplicación de modo que use Firebase.

Sincroniza tu proyecto con archivos de Gradle.

A fin de asegurarte de que todas las dependencias estén disponibles para tu app, debes sincronizar tu proyecto con archivos de Gradle en este momento. Selecciona File > Sync Project with Gradle Files en la barra de herramientas de Android Studio.

7. Ejecuta la app con Firebase

Ahora que configuraste el complemento google-services con el archivo JSON, estás listo para ejecutar la app con Firebase. Conecta el dispositivo Android y haz clic en Run ( ejecutar.png) en la barra de herramientas de Android Studio.

La app debería iniciarse en el dispositivo. En este punto, tu app debería compilarse correctamente.

8. Entrena un modelo de análisis de opiniones

Usaremos Model Maker de TensorFlow Lite para entrenar un modelo de clasificación de texto a fin de predecir una opinión de un texto determinado.

Este paso se presenta como un notebook de Python que puedes abrir en Google Colab. Puedes elegir Entorno de ejecución > Ejecutar todo para ejecutar todo el notebook a la vez.

Abrir en Colab

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

9. Implementa un modelo en AA de Firebase

La implementación de un modelo en el AA de Firebase es útil por dos razones 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

10. Descarga el modelo de AA de Firebase

Elegir cuándo descargar el modelo remoto de Firebase a tu app puede ser complicado, ya que los modelos de TFLite pueden crecer relativamente grandes. Lo ideal es evitar cargar el modelo de inmediato cuando se inicia la app, ya que si nuestro modelo se usa para una sola función y el usuario nunca usa esa función, habremos descargado una cantidad significativa de datos sin motivo. También podemos configurar opciones de descarga, como recuperar solo los modelos cuando hay una conexión a Wi-Fi. Si quieres asegurarte de que el modelo esté disponible incluso sin una 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 desde Firebase cuando la app se inicie por primera vez. De esta manera, cuando ejecutas un análisis de opiniones, puedes estar seguro de que la inferencia se ejecuta con el modelo proporcionado por Firebase.

En el archivo app/build.gradle.kts, agrega la dependencia de aprendizaje automático de Firebase.

app/build.gradle.kts

Buscar este comentario:

// TODO 1: Add Firebase ML dependency

Luego, agrega lo siguiente:

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

Cuando Android Studio te solicite que sincronice el proyecto, selecciona Sync Now.

Luego, agreguemos código para descargar el modelo desde Firebase.

MainActivity.java

Buscar este comentario:

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

Luego, agrega lo siguiente:

  /** 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();

                      }
              );

}

Luego, llama al método downloadModel en el método onCreate de la actividad.

MainActivity.java

Buscar este comentario:

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

Luego, agrega lo siguiente:

downloadModel("sentiment_analysis");

11. Integra el modelo en tu app

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

Cómo agregar la dependencia

Ve al archivo Gradle de la app y agrega la Biblioteca de tareas de TensorFlow Lite (Text) a sus dependencias.

app/build.gradle

Buscar este comentario:

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

Luego, agrega lo siguiente:

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

Cuando Android Studio te solicite que sincronice el proyecto, selecciona Sync Now.

Inicializa un clasificador de texto

Luego, cargaremos el modelo de análisis de opiniones descargado de Firebase con el archivo NLClassifier de la Biblioteca de tareas.

MainActivity.java

Declararemos una variable de instancia de NLClassifier. Buscar este comentario:

// TODO 5: Define a NLClassifier variable

Luego, agrega lo siguiente:

private NLClassifier textClassifier;

Inicializa la variable textClassifier con el modelo de análisis de opiniones descargado de Firebase. Buscar este comentario:

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

Luego, agrega lo siguiente:

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

Clasifica texto

Una vez que hayas configurado la instancia de textClassifier, podrás ejecutar un análisis de opiniones con una sola llamada de método.

MainActivity.java

Buscar este comentario:

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

Luego, agrega lo siguiente:

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

Implementa el posprocesamiento

Por último, convertiremos el resultado del modelo en un texto descriptivo para mostrarlo en la pantalla.

MainActivity.java

Buscar este comentario:

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

Quita el código que genera el texto del resultado ficticio:

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

Luego, agrega lo siguiente:

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

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

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

img/text-classification-result.png

13. Potencia la app con más funciones de Firebase

Además de alojar tus modelos 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 la reacción del usuario y medir el rendimiento de tu modelo en producción.
  • Firebase A/B Testing para probar varias versiones de tu modelo
  • ¿Recuerdas que entrenamos dos versiones de nuestro modelo TFLite antes? Las pruebas A/B son una buena manera de averiguar qué versión tiene un mejor rendimiento en producción.

Para obtener más información sobre cómo aprovechar estas funciones en tu app, consulta los siguientes codelabs:

14. ¡Felicitaciones!

En este codelab, aprendiste a entrenar un modelo de TFLite para 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 que permita a los usuarios enviar 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 el modelo de MobileBERT con Firebase A/B Testing.

Más información

¿Tienes alguna pregunta?

Informar problemas