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 de spam del blog, 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 aprendizaje Comienza a usar la clasificación de texto para dispositivos móviles. Los codelabs de esta ruta de aprendizaje son secuenciales. La app y el modelo en el que trabajarás se deben haber compilado antes, mientras seguías la primera ruta de aprendizaje. Si aún no completaste las actividades anteriores, detente y hazlo ahora:

  • Cómo compilar una app básica con estilo de mensajería
  • Compila un modelo de aprendizaje automático de comentarios spam
  • Actualiza tu aplicación para usar un modelo de aprendizaje automático para filtrar spam.

Qué aprenderás

  • Cómo actualizar el modelo de clasificación de texto que compilaste en la ruta de aprendizaje Comienza a usar la clasificación de texto para dispositivos móviles
  • Cómo personalizar tu modelo para que bloquee el spam más frecuente en tu app

Requisitos

  • La aplicación 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, clona este repositorio y carga la app desde TextClassificationStep2. Puedes encontrarlo en la ruta de acceso TextClassificationOnMobile->Android.

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

Si abres la app de mensajería que creaste y probaste este mensaje, arrojará 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 generadores de spam a menudo agregan un vínculo en el ID del usuario (en lugar del mensaje en sí mismo, ya que tener un vínculo podría activar los filtros).

En este lab, aprenderás a actualizar el modelo con datos nuevos. Cuando termines, si ejecutas la misma oración, obtendrás el siguiente resultado, donde 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 CSV consiste en que la primera fila describa las columnas; aquí están etiquetadas como commenttext y spam.

Cada fila posterior sigue este formato:

64c0128548e1d082.png

La etiqueta de la derecha es “true” para spam y “false” para indicar que no es spam. En este caso, la línea 3 se considera spam.

Para agregar tus propios comentarios, por ejemplo, si hay muchas personas que envían spam a tu sitio con mensajes sobre 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.

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 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 anterior (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 desde 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 se entrenará con un alto nivel de exactitud:

8886033d1f8161c.png

Ve al notebook para descargar los archivos de modelo, vocab y etiquetas. En el siguiente paso, las integrarás en Android.

5. Actualiza tu app para Android

  1. Abre la app en Android Studio y asegúrate de que esté seleccionada la opción Android en la parte superior del explorador de proyectos.
  2. Busca el archivo assets que contiene las etiquetas, el modelo y el 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. Aparecerá 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, y verás resultados como los anteriores, en los que el modelo mejoró la detección de "comercio en línea" situación de texto.

Hay una versión terminada del código disponible en el repositorio 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 finished también está disponible como TextClassificationStep3.

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

553b845565b5b822.png

Actualizar la app para usar tu modelo nuevo es muy simple. La forma más sencilla es ir al 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 nuevo modelo y podrás probarlo. Este es un ejemplo de la misma oración, pero con el modelo nuevo:

9031ec260b1857a3.png

7. Felicitaciones

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

Próximos pasos

Este modelo es solo 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 entren datos nuevos y se marquen como spam, se pueda volver a entrenar automáticamente un modelo en un backend y, luego, implementarlo con Firebase Model Hosting.

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

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