Agregue clasificación de texto en el dispositivo a su aplicación con TensorFlow Lite y Firebase - Android Codelab

1. Información general

resultado-de-clasificación-de-texto.png

Bienvenido al codelab de clasificación de texto con TensorFlow Lite y Firebase. En este codelab, aprenderá cómo usar TensorFlow Lite y Firebase para entrenar e implementar un modelo de clasificación de texto en su aplicación. 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 en el procesamiento del lenguaje natural (PLN) con amplias aplicaciones como análisis de sentimientos, etiquetado de temas, detección de spam y detección de intenciones.

El análisis de sentimientos es la interpretación y clasificación de emociones (positivas, negativas y neutrales) dentro de datos de texto utilizando técnicas de análisis de texto. El análisis de sentimientos permite a las empresas identificar el sentimiento de los clientes hacia productos, marcas o servicios en conversaciones y comentarios en línea.

Este tutorial muestra cómo construir un modelo de aprendizaje automático para el análisis de sentimientos, en particular clasificando 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.

lo que aprenderás

  • Entrene modelos de análisis de sentimientos de TF Lite con TF Lite Model Maker
  • Implemente modelos TF Lite en Firebase ML y acceda a ellos desde su aplicación
  • Integre modelos de análisis de sentimientos de TF Lite a su aplicación utilizando la biblioteca de tareas de TF Lite

Lo que necesitarás

  • Última versión de Android Studio .
  • Código de muestra.
  • Un dispositivo de prueba con Android 5.0+ y servicios de Google Play 9.8 o posterior, o un emulador con servicios de Google Play 9.8 o posterior
  • Si utiliza un dispositivo, un cable de conexión.

¿Cómo utilizarás este tutorial?

Léelo solo completo Léelo y completa los ejercicios.

¿Cómo calificaría su experiencia con la creación de aplicaciones para Android?

Principiante Intermedio Competente

2. Obtenga el código de muestra

Clona el repositorio de GitHub desde la línea de comando.

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

Si no tiene git instalado, también puede descargar el proyecto de muestra desde su página de GitHub o haciendo clic en este enlace .

3. Importe la aplicación de inicio

Desde Android Studio, seleccione el directorio codelab-textclassification-android-master ( android_studio_folder.png ) de la descarga del código de muestra ( Archivo > Abrir > .../codelab-textclassification-android-master/start).

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

4. Ejecute la aplicación de inicio

Ahora que ha importado el proyecto a Android Studio, está listo para ejecutar la aplicación por primera vez. Conecte su dispositivo Android y haga clic en Ejecutar ( ejecutar.png )en la barra de herramientas de Android Studio.

La aplicación debería iniciarse en su dispositivo. Solo contiene una interfaz de usuario simple que facilita la integración y prueba de modelos de clasificación de texto en los siguientes pasos. En este punto, si intenta predecir sentimientos, la aplicación solo arrojará algunos resultados ficticios.

2fb4e69fafb2e3ed.png

5. Cree un proyecto de consola de Firebase

Agregar Firebase al proyecto

  1. Vaya a la consola de Firebase .
  2. Seleccione Agregar proyecto .
  3. Seleccione o ingrese un nombre de proyecto.
  4. Siga los pasos de configuración restantes en Firebase console, luego haga clic en Crear proyecto (o Agregar Firebase, si está utilizando un proyecto de Google existente).

6. Agrega Firebase a la aplicación

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

Agregue el archivo google-services.json a su aplicación

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

Agregue el complemento de servicios de Google a su aplicación

Siga las instrucciones en Firebase Console para actualizar los archivos build.gradle.kts para agregar Firebase a su aplicación.

El complemento de servicios de Google utiliza el archivo google-services.json para configurar su aplicación para que use Firebase.

Sincroniza tu proyecto con archivos gradle

Para asegurarse de que todas las dependencias estén disponibles para su aplicación, debe sincronizar su proyecto con los archivos gradle en este punto. Seleccione Archivo > Sincronizar proyecto con archivos Gradle en la barra de herramientas de Android Studio.

7. Ejecute la aplicación con Firebase

Ahora que ha configurado el complemento google-services con su archivo JSON, está listo para ejecutar la aplicación con Firebase. Conecte su dispositivo Android y haga clic en Ejecutar ( ejecutar.png )en la barra de herramientas de Android Studio.

La aplicación debería iniciarse en su dispositivo. En este punto, su aplicación aún debería compilarse correctamente.

8. Entrene un modelo de análisis de sentimiento.

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

Este paso se presenta como un cuaderno de Python que puede abrir en Google Colab. Puede elegir Tiempo de ejecución > Ejecutar todo para ejecutar todo el cuaderno a la vez.

Abrir en Colab

Después de finalizar este paso, tendrá un modelo de análisis de sentimiento de TensorFlow Lite que estará listo para implementarse en una aplicación móvil.

9. Implementar un modelo en Firebase ML

Implementar un modelo en Firebase ML es útil por dos razones principales:

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

El modelo se puede implementar a través de la consola o mediante programación mediante el SDK de Firebase Admin. En este paso lo implementaremos a través de la consola.

Primero, abra Firebase Console y haga clic en Machine Learning en el panel de navegación izquierdo. Haga clic en "Comenzar" si está abriendo por primera vez. Luego navegue hasta "Personalizado" y haga clic en el botón "Agregar modelo".

Cuando se le solicite, asigne un nombre al modelo sentiment_analysis y cargue el archivo que descargó de Colab en el paso anterior.

3c3c50e6ef12b3b.png

10. Descargar modelo desde Firebase ML

Elegir cuándo descargar el modelo remoto de Firebase a su aplicación puede ser complicado ya que los modelos TFLite pueden crecer relativamente. Lo ideal es evitar cargar el modelo inmediatamente cuando se inicia la aplicación, ya que si nuestro modelo se usa solo para una función y el usuario nunca usa esa función, habremos descargado una cantidad significativa de datos sin ningún motivo. También podemos configurar opciones de descarga, como buscar solo modelos cuando estamos conectados a wifi. Si desea asegurarse de que el modelo esté disponible incluso sin una conexión de red, es importante incluirlo también sin la aplicación como respaldo.

En aras de la simplicidad, eliminaremos el modelo incluido predeterminado y siempre descargaremos un modelo de Firebase cuando la aplicación se inicie por primera vez. De esta manera, al ejecutar un análisis de opinión, puede estar seguro de que la inferencia se ejecuta con el modelo proporcionado por Firebase.

En el archivo app/build.gradle.kts , agregue la dependencia de Firebase Machine Learning.

aplicación/build.gradle.kts

Encuentra este comentario:

// TODO 1: Add Firebase ML dependency

Luego añade:

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

Cuando Android Studio le solicite sincronizar su proyecto, elija Sincronizar ahora .

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

Actividad principal.java

Encuentra este comentario:

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

Luego añade:

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

                      }
              );

}

A continuación, llame al método downloadModel en el método onCreate de la actividad.

Actividad principal.java

Encuentra este comentario:

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

Luego añade:

downloadModel("sentiment_analysis");

11. Integra el modelo en tu aplicación.

La biblioteca de tareas de Tensorflow Lite te ayuda a integrar los modelos de TensorFlow Lite en tu aplicación con solo unas pocas líneas de código. Inicializaremos una instancia NLClassifier utilizando el modelo TensorFlow Lite descargado de Firebase. Luego lo usaremos para clasificar la entrada de texto de los usuarios de la aplicación y mostrar el resultado en la interfaz de usuario.

Agregar la dependencia

Vaya al archivo Gradle de la aplicación y agregue la biblioteca de tareas (texto) de TensorFlow Lite en las dependencias de la aplicación.

aplicación/build.gradle

Encuentra este comentario:

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

Luego añade:

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

Cuando Android Studio le solicite sincronizar su proyecto, elija Sincronizar ahora .

Inicializar un clasificador de texto

Luego, cargaremos el modelo de análisis de sentimiento descargado de Firebase usando NLClassifier de la biblioteca de tareas.

Actividad principal.java

Declaremos una variable de instancia de NLClassifier. Encuentra este comentario:

// TODO 5: Define a NLClassifier variable

Luego añade:

private NLClassifier textClassifier;

Inicialice la variable textClassifier con el modelo de análisis de sentimiento descargado de Firebase. Encuentra este comentario:

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

Luego añade:

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

Clasificar texto

Una vez que se haya configurado la instancia textClassifier , puede ejecutar un análisis de opinión con una sola llamada al método.

Actividad principal.java

Encuentra este comentario:

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

Luego añade:

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

Implementar posprocesamiento

Finalmente, convertiremos la salida del modelo en un texto descriptivo para mostrarlo en la pantalla.

Actividad principal.java

Encuentra este comentario:

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

Elimine el código que genera el texto de resultado ficticio:

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

Luego añade:

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. Ejecute la aplicación final

Ha integrado el modelo de análisis de sentimientos en la aplicación, así que probémoslo. Conecte su dispositivo Android y haga clic en Ejecutar ( ejecutar.png )en la barra de herramientas de Android Studio.

La aplicación debería poder predecir correctamente el sentimiento de la reseña de la película que ingresas.

img/resultado-de-clasificación-de-texto.png

13. Mejora la aplicación con más funciones de Firebase

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

  • Firebase Performance Monitoring para medir la velocidad de inferencia de su modelo que se ejecuta en el dispositivo de los usuarios.
  • Firebase Analytics para medir qué tan bien se desempeña su modelo en producción midiendo la reacción del usuario.
  • Firebase A/B Testing para probar múltiples versiones de tu modelo
  • ¿Recuerdas que entrenamos dos versiones de nuestro modelo TFLite anteriormente? ¡Las pruebas A/B son una buena manera de descubrir qué versión funciona mejor en producción!

Para obtener más información sobre cómo aprovechar estas funciones en su aplicación, consulte los codelabs a continuación:

14. ¡Felicitaciones!

En este codelab, aprendió a entrenar un modelo TFLite de análisis de sentimientos e implementarlo en su aplicación móvil usando Firebase. Para obtener más información sobre TFLite y Firebase, consulte otros ejemplos de TFLite y las guías de introducción de Firebase.

Lo que hemos cubierto

  • TensorFlow Lite
  • ML de base de fuego

Próximos pasos

  • Mide la velocidad de inferencia de tu modelo con Firebase Performance Monitoring.
  • Implemente el modelo desde Colab directamente en Firebase a través de la API de administración de modelos de Firebase ML.
  • Agregue un mecanismo para permitir a los usuarios enviar comentarios sobre el resultado de la predicción y utilizar Firebase Analytics para realizar un seguimiento de los comentarios de los usuarios.
  • Pruebe A/B el modelo Average Word Vector y el modelo MobileBERT con pruebas Firebase A/B.

Aprende más

¿Tengo una pregunta?

Informar problemas