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 original de comentarios spam de blogs, pero mejorado con comentarios propios para que puedas tener un modelo que funcione con tus datos.

Requisitos previos

Este codelab forma parte de la ruta de aprendizaje Comienza a usar la clasificación de texto en dispositivos móviles. Los codelabs de esta ruta de aprendizaje son secuenciales. La app y el modelo en el que trabajarás deben haberse creado previamente mientras seguías la primera ruta de aprendizaje. Si aún no has completado las actividades anteriores, hazlo ahora antes de continuar:

  • Crea una app básica de estilo de mensajería
  • Crea un modelo de aprendizaje automático para detectar comentarios spam
  • Actualiza tu app para usar un modelo de aprendizaje automático de filtrado de spam

Qué aprenderás

  • Cómo actualizar el modelo de clasificación de texto que creaste en la ruta de aprendizaje Comienza a usar la clasificación de texto en 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 filtro de spam que observaste y creaste en las actividades anteriores.

2. Mejora la clasificación de texto

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

El código terminado también está disponible para ti como TextClassificationStep3.

Si abres la app de mensajería que compilaste y probaste este mensaje, se le asignaría una puntuación de spam muy baja:

f111e21903d6fd1f.png

Los errores ortográficos como este son una forma común de evitar los filtros de spam. Si bien el mensaje es inocuo, los spammers suelen agregar un vínculo en el ID de usuario (en lugar del mensaje en sí, donde tener un vínculo podría activar los filtros).

En este lab, verás cómo actualizar el modelo con datos nuevos. Cuando termines, ejecutar la misma oración arrojará el siguiente resultado, en el que este mensaje se identifica como spam.

c96613a0a4d1fef0.png

3. Edita el archivo CSV

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

La composición del archivo CSV consiste en que la primera fila describa las columnas, que aquí están etiquetadas como 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 contenido que no es 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 comercio en línea, solo debes 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.

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

4. Vuelve a entrenar el modelo con los datos nuevos

Para volver a entrenar el modelo, simplemente puedes reutilizar el código anterior (SpamCommentsModelMaker.ipynb), pero dirigirlo 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 prefieras.

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 aún se entrena con un alto nivel de exactitud:

8886033d1f8161c.png

Revisa el notebook para descargar los archivos de modelo, vocabulario y etiquetas. 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 Android esté seleccionado en la parte superior del explorador de proyectos.
  2. Busca tu archivo assets que contiene las etiquetas, el modelo y el vocabulario de la versión anterior del archivo del modelo.

91116524e9016ed4.png

  1. Haz clic con el botón derecho en la carpeta de activos.
  2. En el menú, selecciona la opción para abrir la carpeta con el administrador de archivos de tu sistema operativo. (Reveal in Finder en Mac, como se muestra. Será Mostrar en el Explorador en Windows y Abrir en Archivos o similar en Linux.

25f63f9629657e85.png

  1. Se abrirá el directorio que contiene el modelo, el vocabulario y las etiquetas en el administrador de archivos de tu sistema operativo. Copia los nuevos que creaste en el paso anterior sobre estos.

No es necesario que realices ningún cambio en el código de tu app. Ejecútala y pruébala. Verás resultados como los anteriores, en los que el modelo mejoró para detectar la situación de texto "comercio en línea".

En el repo, se encuentra disponible una versión final del código como TextClassificationStep3.

6. Actualiza tu app para iOS

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

El código terminado también está disponible para ti como TextClassificationStep3.

Si completaste el codelab anterior, tendrás una versión para iOS de TextClassificationStep2 que funciona con el modelo base. Si quieres comenzar con nuestra versión existente, solo toma esa del repo. Funcionará con el primer modelo que se entrenó con los datos de spam en comentarios, y es posible que veas resultados como los siguientes:

553b845565b5b822.png

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

Una vez que lo hagas, tu app funcionará con el nuevo modelo y podrás probarlo. A continuación, se muestra un ejemplo de la misma oración, pero con el nuevo modelo:

9031ec260b1857a3.png

7. Felicitaciones

Eso es todo. Al volver a entrenar el modelo con datos nuevos y agregarlo a tus apps para Android y iOS, pudiste actualizar su funcionalidad sin escribir código nuevo.

Próximos pasos

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

A medida que explores el procesamiento de lenguaje natural, es posible que desees trabajar con conjuntos de datos más grandes. También puedes configurar una canalización de entrenamiento continuo para que, cuando lleguen datos nuevos y se marquen como spam, se pueda volver a entrenar automáticamente un modelo en un backend y, luego, implementar ese modelo con Firebase Model Hosting.

Tus usuarios obtienen un modelo actualizado sin problemas, sin que tengas que copiarlo y pegarlo como un recurso, volver a compilarlo y redistribuirlo. También podrías, por ejemplo, usar Firebase Remote Config para administrar el valor del umbral para enviar spam, en lugar del 0.8 que tienes ahora.

Hay muchas posibilidades, y las exploraremos en codelabs futuros de este curso.