Crea un modelo de clasificación de texto personalizado con Model Maker de TensorFlow Lite

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 es parte de la ruta de aprendizaje Comienza a usar la clasificación de texto en apps de Flutter. Los codelabs de esta ruta de aprendizaje son secuenciales. La app y el modelo en el que trabajarás deben haberse creado previamente mientras trabajabas con los codelabs. Si aún no has completado las actividades anteriores, hazlo ahora antes de continuar:

Qué aprenderás

Requisitos

  • La app de Flutter y el modelo de filtro de spam que observaste y creaste en las actividades anteriores.

2. Mejora la clasificación de texto

  1. Para obtener el código, clona este repositorio y carga la app desde la carpeta tfserving-flutter/codelab2/finished.
  2. Después de iniciar la imagen de Docker de TensorFlow Serving, en la app que creaste, ingresa buy my book to learn online trading y, luego, haz clic en gRPC > Classify.

8f1e1974522f274d.png

La app genera una puntuación de spam baja, porque no hay muchos casos de online trading en el conjunto de datos original y el modelo no ha aprendido que esto es spam. En este codelab, actualizarás el modelo con datos nuevos para que identifique la misma oración como spam.

2bd68691a26aa3da.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 etiquetadas como commenttext y spam. Cada fila posterior sigue este formato:

62025273971c9a7f.png

A la etiqueta de la derecha se le asigna un valor true si es spam y uno false si no es spam. Por ejemplo, la tercera línea se considera spam.

Si las personas envían spam a tu sitio web con mensajes sobre comercio en línea, puedes agregar ejemplos de comentarios de spam en la parte inferior de tu sitio web. 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
  • Guarda el archivo con un nombre nuevo, como lmblog_comments.csv, de manera que puedas usarlo para entrenar un modelo nuevo.

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

4. Vuelve a entrenar el modelo con los datos nuevos

Para volver a entrenar el modelo, simplemente puedes reutilizar el código de (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 Colaboratory, puedes iniciarlo directamente. De lo contrario, obtén el código en el repositorio y ejecútalo en el entorno de notebook que prefieras.

El código actualizado es similar a este fragmento de código:

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:

96a1547ddb6edf5b.png

Comprime toda la carpeta de /mm_update_spam_savedmodel y descarga el archivo mm_update_spam_savedmodel.zip generado.

# Rename the SavedModel subfolder to a version number
!mv /mm_update_spam_savedmodel/saved_model /mm_update_spam_savedmodel/123
!zip -r mm_update_spam_savedmodel.zip /mm_update_spam_savedmodel/

5. Inicia Docker y actualiza la app de Flutter

  1. Descomprime el archivo mm_update_spam_savedmodel.zip descargado en una carpeta. Luego, detén la instancia de contenedor de Docker del codelab anterior y vuelve a iniciarla, pero reemplaza el marcador de posición PATH/TO/UPDATE/SAVEDMODEL por la ruta absoluta de la carpeta donde se alojan los archivos descargados:
docker run -it --rm -p 8500:8500 -p 8501:8501 -v "PATH/TO/UPDATE/SAVEDMODEL:/models/spam-detection" -e MODEL_NAME=spam-detection tensorflow/serving
  1. Abre el archivo lib/main.dart con tu editor de código favorito y, luego, busca la parte que define las variables inputTensorName y outTensorName:
const inputTensorName = 'input_3';
const outputTensorName = 'dense_5';
  1. Reasigna la variable inputTensorName a un valor input_1' y la variable outputTensorName a un valor 'dense_1':
const inputTensorName = 'input_1';
const outputTensorName = 'dense_1';
  1. Copia el archivo vocab.txt que descargaste en la carpeta lib/assets/ para reemplazar el existente.
  2. Quita manualmente la app de Flutter de clasificación de texto de Android Emulator.
  3. Ejecuta el comando 'flutter run' en la terminal para iniciar la app.
  4. En la app, ingresa buy my book to learn online trading y haz clic en gRPC > Classify.

Ahora el modelo mejoró la detección de buy my book to online trading como spam.

6. Felicitaciones

Volviste a entrenar el modelo con datos nuevos, lo integraste a la app de Flutter y actualizaste la funcionalidad para detectar nuevas oraciones de spam.

Más información