1. Descripción general
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 neutras) 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 productos, marcas o 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 el 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 de amplia aplicación.
Qué aprenderás
- Entrena modelos 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
- Integra los 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 los 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, un cable de conexión
¿Cómo usarás este instructivo?
¿Cómo calificarías tu experiencia cuando compilas apps para Android?
2. Obtén el código de muestra
Clona el repositorio de GitHub desde 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
() de la descarga del código de muestra (File > Open > …/codelab-textclassification-android-master/start).
Ahora deberías tener abierto el proyecto de inicio en Android Studio.
4. Ejecuta la app de inicio
Ahora que importaste el proyecto a Android Studio, podrás ejecutar la app por primera vez. Conecta tu dispositivo Android y haz clic en Run ( ) en la barra de herramientas de Android Studio.
La app debería iniciarse en tu dispositivo. Solo contiene una IU simple que facilita la integración y prueba de 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.
5. Crea un proyecto de Firebase console
Agrega Firebase al proyecto
- Ve a Firebase console.
- Selecciona Agregar proyecto.
- Selecciona o ingresa un nombre para el proyecto.
- 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
- En la pantalla de descripción general de tu proyecto nuevo, haz clic en el ícono de Android para iniciar el flujo de trabajo de configuración.
- 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 google-services a tu app
Sigue las instrucciones de Firebase console para actualizar los archivos build.gradle.kts
y agregar Firebase a tu app.
El complemento google-services usa el archivo google-services.json para configurar tu aplicación para que use Firebase.
Cómo sincronizar tu proyecto con archivos de Gradle
Para asegurarte de que todas las dependencias estén disponibles para tu app, debes sincronizar tu proyecto con archivos de Gradle en este punto. 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 tu archivo JSON, ya puedes ejecutar la app con Firebase. Conecta tu dispositivo Android y haz clic en Run ( ) en la barra de herramientas de Android Studio.
La app debería iniciarse en tu 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 que prediga la opinión de un texto determinado.
Este paso se presenta como un notebook de Python que puedes abrir en Google Colab. Puedes elegir Tiempo de ejecución > Run all 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 que está listo para implementarse en una app para dispositivos móviles.
9. Implementa un modelo en el AA de Firebase
La implementación de un modelo en AA de Firebase es útil por dos razones principales:
- Podemos mantener el tamaño de instalación de la app pequeño y descargar el modelo solo si es necesario.
- 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 forma 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 izquierdo. Haz clic en "Comenzar". si es la primera vez que lo abres. Luego, navega a "Personalizado" y haz clic en “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.
10. Descarga el modelo desde el 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 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 una conexión de red, es importante que también lo empaquetes 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 el archivo app/build.gradle.kts
, agrega la dependencia de aprendizaje automático de Firebase.
app/build.gradle.kts
Busca 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 sincronices tu proyecto, elige Sync Now.
Luego, agreguemos código para descargar el modelo de Firebase.
MainActivity.java
Busca 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();
}
);
}
A continuación, llama al método downloadModel
en el método onCreate
de la actividad.
MainActivity.java
Busca 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 se descargó 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 archivo Gradle de la app y agrega la biblioteca de tareas (texto) de TensorFlow Lite a las dependencias de la app.
app/build.gradle
Busca 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 sincronices tu proyecto, elige Sync Now.
Cómo inicializar un clasificador de texto
Luego, cargaremos el modelo de análisis de opiniones descargado de Firebase con NLClassifier
de la biblioteca de tareas.
MainActivity.java
Declararemos una variable de instancia de NLClassifier. Busca 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 que descargaste de Firebase. Busca este comentario:
// TODO 6: Initialize a TextClassifier with the downloaded model
Luego, agrega lo siguiente:
textClassifier = NLClassifier.createFromFile(model.getFile());
Clasificar texto
Una vez que se haya configurado la instancia textClassifier
, puedes ejecutar el análisis de sentimiento con una sola llamada al método.
MainActivity.java
Busca este comentario:
// TODO 7: Run sentiment analysis on the input text
Luego, agrega lo siguiente:
List<Category> results = textClassifier.classify(text);
Cómo implementar el procesamiento posterior
Por último, convertiremos el resultado del modelo en un texto descriptivo para mostrarlo en la pantalla.
MainActivity.java
Busca este comentario:
// TODO 8: Convert the result to a human-readable text
Quite el código que genera el texto ficticio del resultado:
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 a la app, así que probemos. Conecta tu dispositivo Android y haz clic en Run ( ) en la barra de herramientas de Android Studio.
La app debería poder predecir correctamente la opinión de la opinión de la película que ingreses.
13. Mejora la app con más funciones de Firebase
Además de alojar tus modelos de TFLite, Firebase proporciona 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:
14. ¡Felicitaciones!
En este codelab, aprendiste a entrenar un modelo de TFLite de análisis de sentimientos y, luego, 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 comienzo 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 administración de modelos de AA de Firebase.
- 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 ellos.
- Realiza pruebas A/B del modelo de vector de palabras promedio y de MobileBERT con Firebase A/B Testing.
Más información
- Documentación de Firebase Machine Learning
- Documentación de TensorFlow Lite
- Cómo medir el rendimiento de las apps con Firebase
- Modelos de A/B Testing con Firebase