Preprocesamiento y Predicción de Texto en Modelos de Machine Learning
Clase 25 de 35 • Curso de MLOPS: Despliegue de Modelos de Machine Learning
Resumen
¿Cómo procesamos y predecimos datos de texto en un modelo batch?
Para trabajar con procesamiento por lotes, o batch processing, es esencial estructurar los datos adecuadamente. En este contexto, usaremos la clase "Sentence" que hereda de "BaseModel" y acepta dos parámetros principales: "client name" y "text". Esta estructura nos permitirá iterar a través de los datos del request, que se espera como una lista de strings. A continuación, en un bucle for, recorreremos cada sentencia o string que compone esta lista.
¿Cómo pre-procesamos y vectorizamos las sentencias?
El primer paso en el procesamiento involucra la vectorización. Utilizamos una función de preprocesamiento llamada "preprocessing function" que toma como argumento el texto de cada sentencia: sentence.text
. El objetivo es convertir este texto en una matriz dispersa utilizando un Convectorizer y transformaciones basadas en la frecuencia inversa (TF-IDF).
El resultado es una matriz con:
- Número de filas: Corresponde al número de documentos, textos o sentencias.
- Columnas: Representan las palabras únicas en el conjunto de datos.
Dado que las matrices dispersas suelen incluir muchos ceros, configuramos x_dense
como dicha estructura y continuamos apilándola verticalmente para que el modelo interprete correctamente la representación de los datos.
process_data_vectorize = preprocessing_function(sentence.text)
x_dense = some_sparse_matrix_creation_method(process_data_vectorize)
¿Cómo se generan las predicciones del modelo?
Con nuestra representación de datos en su lugar, podemos proceder con las predicciones. El modelo, previamente cargado, utilizará el método .predict
, que procesará la matriz dispersa x_dense
. Los resultados se almacenarán en una lista de predicciones.
Luego, decodificamos estas predicciones mediante label_mapping
, extrayendo el valor en la primera posición ya que se asume que habrá un único elemento en cada iteración del list.
preds = model.predict(x_dense)
decoded_pred = decode_predictions(label_mapping, preds[0])
¿Cómo almacenamos y devolvemos las predicciones?
Una vez obtenidas, las predicciones se encapsulan en un objeto denominado prediction_ticket
, el cual contiene información del cliente y la predicción decodificada. Este objeto se imprime y luego todas las predicciones se almacenan en una lista llamada preds_list
a través del método append
.
Para finalizar, las predicciones se guardan en la base de datos utilizando una sesión previamente definida y el método session.commit
para realizar la inserción masiva. Finalmente, se cierra la sesión, asegurando que los datos estén persistentes y listos para su consulta.
session.add(prediction_ticket)
session.commit()
session.close()
Antes de retornar las predicciones, se debe definir el formato de salida, que en la mayoría de los casos será un JSON. Este formato se regresa mediante un método return
que estructura dicha lista de predicciones para su fácil consumo.
return {"predictions": preds_list}
En resumen, al inicializar la aplicación, se debe asegurar que la base de datos y estructuras necesarias estén configuradas correctamente. A través de eventos de inicio (startup
), la creación de la base de datos y sus tablas se gestionará eficazmente, sentando las bases para operaciones futuras.