bego
commited on
Update README.md
Browse files
README.md
CHANGED
|
@@ -1,31 +1,35 @@
|
|
| 1 |
-
---
|
| 2 |
-
tags:
|
| 3 |
-
- opinion-classifier
|
| 4 |
-
- text-classification
|
| 5 |
-
- transformers
|
| 6 |
-
- gradio
|
| 7 |
-
---
|
| 8 |
-
|
| 9 |
# Clasificador de Opiniones Multietiqueta
|
| 10 |
|
| 11 |
-
Este
|
| 12 |
|
| 13 |
## Descripci贸n
|
| 14 |
|
| 15 |
-
|
| 16 |
|
| 17 |
-
##
|
| 18 |
|
| 19 |
-
|
| 20 |
|
| 21 |
```python
|
| 22 |
-
import pickle
|
| 23 |
from huggingface_hub import hf_hub_download
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
import ftfy
|
| 25 |
import re
|
| 26 |
import torch
|
| 27 |
import numpy as np
|
| 28 |
from transformers import DistilBertTokenizer, DistilBertModel
|
|
|
|
| 29 |
|
| 30 |
def corregir_codificacion(texto):
|
| 31 |
if isinstance(texto, str):
|
|
@@ -41,7 +45,7 @@ def preprocesar_texto(texto):
|
|
| 41 |
class ClasificadorOpiniones:
|
| 42 |
def __init__(self):
|
| 43 |
model_path = hf_hub_download(repo_id="begoach1/opinion_classifier", filename="modelo_clasificador_reentrenado_lp_ros.pkl")
|
| 44 |
-
self.clf_combined =
|
| 45 |
self.tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-multilingual-cased')
|
| 46 |
self.model = DistilBertModel.from_pretrained('distilbert-base-multilingual-cased')
|
| 47 |
|
|
@@ -57,6 +61,17 @@ class ClasificadorOpiniones:
|
|
| 57 |
resultado = dict(zip(etiquetas, prediccion[0]))
|
| 58 |
return resultado
|
| 59 |
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
# Clasificador de Opiniones Multietiqueta
|
| 2 |
|
| 3 |
+
Este modelo clasifica opiniones en m煤ltiples etiquetas como queja, sugerencia, agradecimiento, felicitaci贸n, ninguna y cambio positivo personal.
|
| 4 |
|
| 5 |
## Descripci贸n
|
| 6 |
|
| 7 |
+
El modelo utiliza `DistilBERT` para la representaci贸n de textos y un `Logistic Regression` multietiqueta entrenado con `MultiOutputClassifier`. Se han aplicado t茅cnicas de sobremuestreo (LP-ROS) para manejar el desbalance de clases.
|
| 8 |
|
| 9 |
+
## Uso
|
| 10 |
|
| 11 |
+
### Cargar el modelo con `huggingface_hub`
|
| 12 |
|
| 13 |
```python
|
|
|
|
| 14 |
from huggingface_hub import hf_hub_download
|
| 15 |
+
import joblib
|
| 16 |
+
|
| 17 |
+
# Descargar y cargar el modelo
|
| 18 |
+
model_path = hf_hub_download(repo_id="begoach1/opinion_classifier", filename="modelo_clasificador_reentrenado_lp_ros.pkl")
|
| 19 |
+
clf_combined = joblib.load(model_path)
|
| 20 |
+
Interfaz Gradio
|
| 21 |
+
El modelo se puede probar directamente en una interfaz de Gradio. La interfaz toma un texto de opini贸n como entrada y devuelve las etiquetas correspondientes.
|
| 22 |
+
|
| 23 |
+
python
|
| 24 |
+
Copiar c贸digo
|
| 25 |
+
import gradio as gr
|
| 26 |
+
import joblib
|
| 27 |
import ftfy
|
| 28 |
import re
|
| 29 |
import torch
|
| 30 |
import numpy as np
|
| 31 |
from transformers import DistilBertTokenizer, DistilBertModel
|
| 32 |
+
from huggingface_hub import hf_hub_download
|
| 33 |
|
| 34 |
def corregir_codificacion(texto):
|
| 35 |
if isinstance(texto, str):
|
|
|
|
| 45 |
class ClasificadorOpiniones:
|
| 46 |
def __init__(self):
|
| 47 |
model_path = hf_hub_download(repo_id="begoach1/opinion_classifier", filename="modelo_clasificador_reentrenado_lp_ros.pkl")
|
| 48 |
+
self.clf_combined = joblib.load(model_path)
|
| 49 |
self.tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-multilingual-cased')
|
| 50 |
self.model = DistilBertModel.from_pretrained('distilbert-base-multilingual-cased')
|
| 51 |
|
|
|
|
| 61 |
resultado = dict(zip(etiquetas, prediccion[0]))
|
| 62 |
return resultado
|
| 63 |
|
| 64 |
+
def clasificar(texto):
|
| 65 |
+
clasificador = ClasificadorOpiniones()
|
| 66 |
+
resultado = clasificador.clasificar_opinion(texto)
|
| 67 |
+
return resultado
|
| 68 |
+
|
| 69 |
+
iface = gr.Interface(
|
| 70 |
+
fn=clasificar,
|
| 71 |
+
inputs=gr.Textbox(lines=2, placeholder="Escribe tu opini贸n aqu铆..."),
|
| 72 |
+
outputs=gr.JSON(),
|
| 73 |
+
title="Clasificador de Opiniones Multietiqueta",
|
| 74 |
+
description="Ingresa un texto de opini贸n para obtener las etiquetas correspondientes."
|
| 75 |
+
)
|
| 76 |
+
|
| 77 |
+
iface.launch()
|