FinalProject / README.md
Berbex's picture
Update README.md
5a64574

A newer version of the Gradio SDK is available: 5.4.0

Upgrade
metadata
title: FinalProject
emoji: 👁
colorFrom: purple
colorTo: indigo
sdk: gradio
sdk_version: 3.12.0
app_file: app.py
pinned: false

Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference

Documentación de todos los aspectos teóricos:

Antes de empezar, es importante denotar el objetivo del presente proyecto, el cuál es la clasificación de piezas de texto, enfocado específicamente a los mensajes encontrados en la plataforma twitter. En donde se clasificará si el mensaje es 'Bearish' (opinión bajista del mercado), 'Bullish' (opinión alcista del mercado) o si es 'Neutral'.

Esto se realizará haciendo uso de un modelo preentrenado bert-base-uncased y luego realizando un proceso de fine-tuning utilizando como dataset un conjunto de mensajes de twitter con un único label que representa los 3 sentimientos del mercado anteriormente mencionados, donde el 0 indica 'Bearish', el 1 indica 'Bullish' y el 2 sería el sentimiento 'Neutral'.

Cargamos el dataset el cual como se mencionó, tiene un solo label con 3 posibles valores, algo que se deberá atacar más adelante en el preprocesamiento debido a que no se puede tener un label con 3 valores, sino que se deben tener 3 labels donde cada valor representará si dicho label es el resultado.

Como se debe crear un arreglo de los labels para hacer más cómodo el preprocesamiento, se creó manualmente "labels = ["Bearish", "Bullish", "Neutral"]"

Luego se definió la función de preprocesamiento, en el cual se hizo el cambio al dataset para que tuviera por cada entrada de texto, 3 labels con los valores correspondientes a dicho texto. En esta función, debido a que modelos como BERT no esperan una entrada de texto directamente, se usa la tokenización para el texto (Aquí usamos AutoTokenizer API), como estamos trabajando en un caso de múltiples labels, se tendrá una matriz de (batch_size, num_labels). También se hizo un cambio a los valores de cada label a float para ser compatible con PyTorch.

Esta función es usado en un map con el dataset para cumplir con el preprocesamiento. Dándonos un encoded dataset que será el usado para el fine-tuning.

Se le dio formato torch al encoded_dataset y se crearon 2 diccionarios, uno de índices a labels y otro de labels a índices, que usaremos en la definición creación del modelo preentrenado. En este proceso agregamos que el tipo de problema a resolver es "multi_label_classification", para que automáticamente se use una función de pérdida apropiada al problema.

Ahora se entrenará el modelo usando la API de entrenamiento de HugginFace, que requiere que definamos los hyperparámetros y el objeto Trainer. Los argumentos de entrenamiento seleccionados fueron los elegidos en otros proyectos de clasificación de texto por dar buenos resultados.

Además se definieron 2 funciones para computar las métricas mientras se entrena nuestro modelo de múltiple labels. fuente (https://jesusleal.io/2021/04/21/Longformer-multilabel-classification/)

Luego de realizar el entrenamiento se le hizo una evaluación.

En la evaluación con 2388 ejemplos, se obtuvo una precisión de 0.886, una pérdida de 0.29 y un promedio de 0.89.