Crea un modelo de clasificación de texto personalizado y actualiza tus apps con él

1. Antes de comenzar

En este codelab, aprenderás a actualizar el modelo de clasificación de texto, creado a partir del conjunto de datos de comentarios de spam del blog original, pero mejorado con comentarios propios, para que puedas tener un modelo que funcione con tus datos.

Requisitos previos

Este codelab es parte de la ruta de clasificación de texto para dispositivos móviles Cómo comenzar. Los codelabs de este programa son secuenciales. La app y el modelo con los que trabajarás se deben haber compilado previamente, mientras avanzabas por la primera ruta. Si todavía no completó las actividades anteriores, deténgase y hágalo ahora:

  • Cómo crear una app básica de estilo de mensajes
  • Compila un modelo de aprendizaje automático de comentarios spam
  • Actualiza tu app para usar un modelo de aprendizaje automático con filtrado de spam

Qué aprenderás

  • Cómo actualizar el modelo de clasificación de texto que creó en la ruta de clasificación Comenzar con la clasificación de texto para dispositivos móviles
  • Cómo personalizar tu modelo para que bloquee el spam más frecuente en la app

Requisitos

  • La app de mensajería y el modelo de filtrado de spam que observaste y creaste en las actividades anteriores.

2. Mejora la clasificación de texto

Para obtener el código correspondiente, clona este repositorio y carga la app desde TextClassificationStep2. Puedes encontrarlo en la ruta TextClassificationOnMobile->Android.

El código finished también está disponible como TextClassificationStep3.

Si abres la app de mensajería que creaste y pruebas este mensaje, obtendrás una puntuación muy baja de spam:

f111e21903d6fd1f.png

Este es un método común para evitar los filtros de spam. Si bien el mensaje es inocente, los generadores de spam suelen agregar un vínculo en el ID del usuario (en lugar del mensaje en sí, donde tener un vínculo puede activar los filtros).

En este lab, verá cómo actualizar el modelo con datos nuevos. Cuando hayas terminado, si ejecutas la misma oración, obtendrás el siguiente resultado, en el que se identifica este mensaje como spam.

c96613a0a4d1fef0.png

3. Edita tu archivo CSV

Para entrenar el modelo original, se creó un conjunto de datos en formato CSV (lmblog_comments.csv), que contiene casi mil comentarios etiquetados como spam o no como spam. (Abre el CSV en cualquier editor de texto si deseas inspeccionarlo).

La composición del CSV es hacer que la primera fila describa las columnas; aquí se etiquetan commenttext y spam.

Cada fila posterior sigue este formato:

64c0128548e1d082.png

La etiqueta de la derecha es verdadera para el spam y falsa para el spam. En este caso, la línea 3 se considera spam.

Para agregar tus propios comentarios, por ejemplo, si muchas personas envían spam a tu sitio con mensajes sobre el comercio en línea, lo único que debes hacer es agregar ejemplos de comentarios de spam en la parte inferior de tu sitio. Por ejemplo:

online trading can be highly highly effective,true
online trading can be highly effective,true
online trading now,true
online trading here,true
online trading for the win,true

Cuando termines, guarda el archivo con un nombre nuevo (por ejemplo, lmblog_comments.csv) y podrás usarlo para entrenar un modelo nuevo.

En el resto de este codelab, usarás el ejemplo proporcionado, editado y alojado en Google Cloud Storage con las actualizaciones de operaciones en línea. Puedes cambiar la URL del código si deseas usar tu propio conjunto de datos.

4. Vuelve a entrenar el modelo con los datos nuevos

Para volver a entrenar el modelo, puedes volver a usar el código de antes (SpamCommentsModelMaker.ipynb), pero apuntarlo al nuevo conjunto de datos CSV, que se llama lmblog_comments_extras.csv. Si quieres el notebook completo con el contenido actualizado, puedes encontrarlo como SpamCommentsUpdateModelMaker.ipynb..

Si tienes acceso a Google Colab, puedes iniciarlo directamente aquí; de lo contrario, obtén el código del repositorio y ejecútalo en el entorno de notebook que elijas.

Este es el código actualizado:

training_data = tf.keras.utils.get_file(fname='comments-spam-extras.csv',
          origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/
                  lmblog_comments_extras.csv',
          extract=False)

Cuando entrenes, deberías ver que el modelo se entrenará con un alto nivel de exactitud:

8886033d1f8161c.png

Revisa el notebook para descargar los archivos model, vocab y labels. En el siguiente paso, los integrarás en Android.

5. Actualiza tu app para Android

  1. Abre la app en Android Studio y asegúrate de que la opción Android esté seleccionada en la parte superior del explorador del proyecto.
  2. Busca tu archivo assets que contenga las etiquetas, el modelo y vocabulario de la versión anterior del archivo de modelo.

91116524e9016ed4.png

  1. Haz clic con el botón derecho en la carpeta de elementos.
  2. En el menú, selecciona la opción para abrir la carpeta con el administrador de archivos de tu sistema operativo. (Revela en Finder en Mac, como se muestra). Será Show in Explorer en Windows y Open in Files o uno similar en Linux).

25f63f9629657e85.png

  1. Se abrirá el directorio que contiene el modelo, el vocabulario y las etiquetas del administrador de archivos de tu sistema operativo. Copie las nuevas que creó en el paso anterior.

No es necesario que realice ningún cambio en el código de su aplicación. Ejecútalo y pruébalo, y verás resultados como los anteriores, en los que el modelo mejoró para detectar la situación de texto "comercio en línea".

Una versión terminada del código está disponible en el repositorio como TextClassificationStep3.

6. Actualiza tu app para iOS

Para obtener el código correspondiente, clona este repositorio y carga la app desde TextClassificationStep2. Puedes encontrarlo en la ruta TextClassificationOnMobile->Android.

El código finished también está disponible como TextClassificationStep3.

Si trabajaste en el codelab anterior, tendrás una versión de iOS de TextClassificationStep2 que funciona con el modelo base. Si quieren comenzar desde nuestra versión existente, simplemente tomen la del repositorio. Funcionará con el primer modelo que se entrenó con los datos de comentarios spam, y es posible que veas resultados como este:

553b845565b5b822.png

Actualizar la app para usar el modelo nuevo es muy sencillo. La forma más sencilla es ir a tu explorador de archivos, obtener las nuevas versiones de model.tflite, vocab y labels.txt, y copiarlas en el directorio de tu proyecto.

Una vez que hayas hecho esto, tu app funcionará con el modelo nuevo y podrás probarla. Este es un ejemplo de la misma oración, pero con el nuevo modelo:

9031ec260b1857a3.png

7. Felicitaciones

Eso es todo. Gracias a que volvió a entrenar el modelo con datos nuevos y lo agregó a sus aplicaciones para iOS y Android, pudo actualizar su funcionalidad sin escribir ningún código nuevo.

Próximos pasos

Este modelo es solo un de juguete, entrenado con solo 1,000 elementos de datos.

A medida que explore el procesamiento del lenguaje natural, es posible que desee trabajar con conjuntos de datos más grandes. También se puede configurar una canalización de entrenamiento continuo para que, cuando ingresen datos nuevos y se marquen como spam, se pueda volver a entrenar un modelo automáticamente en un backend y, luego, implementarlo con Firebase Hosting de modelos.

Tus usuarios obtendrán un modelo actualizado sin necesidad de que lo copies y pegues como un elemento, lo vuelvas a compilar y a distribuir. También puedes usar Firebase Remote Config, por ejemplo, a fin de administrar el valor del umbral para el envío de spam en lugar del 0.8 que tienes ahora.

Hay tantas posibilidades, que las analizaremos en futuros codelabs de este curso.