Downloads · 30 days
0
FreddyM/Modeloafinclasiftexto
Modeloafinclasiftexto is a text classification model from FreddyM. Use it when you need a label for a piece of text. It is set up for adapter-transformers.
Downloads · 30 days
0
Access
Public
Updated Nov 17, 2023
Repo size
—
Likes
0
Public
Click a slice to open those files.
.md12.5 KB · 89%
From the Hugging Face model README
los detalles del modelo que utilizamos:
Modelo base: BERT (Bidirectional Encoder Representations from Transformers). Función del modelo: Clasificación de secuencias de texto. Número de etiquetas: Dos clases o categorías. Tokenizer utilizado: BertTokenizer de la biblioteca Transformers. Modelo específico utilizado: BertForSequenceClassification de la biblioteca Transformers. Optimizador: AdamW (una variante de Adam, con correcciones de peso) para ajustar los pesos del modelo durante el entrenamiento. Dispositivo de entrenamiento: GPU si está disponible, de lo contrario, se usa CPU. Métricas evaluadas: Durante el entrenamiento, se evaluaron métricas como precisión, exactitud, sensibilidad (recall) y especificidad en un conjunto de validación. Proceso de entrenamiento: Entrenamiento del modelo durante múltiples épocas (ajustable) con un ciclo que involucra actualización de pesos basada en la pérdida (loss) calculada y evaluación del desempeño del modelo en un conjunto de validación.
El modelo utilizado, BERT (Bidirectional Encoder Representations from Transformers), es una red neuronal preentrenada que ha mostrado un rendimiento excepcional en tareas de procesamiento de lenguaje natural (NLP). Utiliza una arquitectura Transformer que permite capturar y comprender contextos de palabras y frases en ambos sentidos, lo que lo hace efectivo para entender el significado y contexto de una secuencia de texto.
En este caso, empleamos BertForSequenceClassification, una adaptación de BERT para la clasificación de secuencias de texto. Esta variante agrega una capa de clasificación lineal sobre la salida de la capa de representación de BERT, permitiendo clasificar secuencias en un número específico de categorías. El modelo se entrenó para diferenciar entre dos etiquetas o clases en este caso particular.
El proceso de entrenamiento consistió en ajustar los pesos del modelo utilizando un optimizador AdamW, minimizando la función de pérdida a través de múltiples épocas de entrenamiento. Se evaluó el desempeño del modelo utilizando métricas como precisión, exactitud, sensibilidad y especificidad en un conjunto de validación para garantizar su capacidad predictiva.
Developed by: Freddy Morales Funded by [optional]: N/A Shared by [optional]: Model type: BERT (Bidirectional Encoder Representations from Transformers). Language(s) (NLP): Primarily designed for English, but can be fine-tuned and adapted to other languages. License: BERT and its variations are released under the Apache License 2.0. Finetuned from model [optional]: The model used might have been fine-tuned from the 'bert-base-uncased' model, a pre-trained version of BERT released by Google.
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
from transformers import BertTokenizer, BertForSequenceClassification
num_etiquetas = 2 # Actualiza con el número correcto de clases #1 Descargar y cargar el modelo BERT para clasificación:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=num_etiquetas)
from transformers import BertTokenizer, BertForSequenceClassification #2. Configuración del optimizador y del dispositivo:
from torch.optim import AdamW
optimizador = AdamW(model.parameters(), lr=5e-5)
dispositivo = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(dispositivo)
from torch.utils.data import DataLoader, TensorDataset, RandomSampler, SequentialSampler from sklearn.model_selection import train_test_split
train_idx, val_idx = train_test_split(np.arange(len(labels)), test_size=val_ratio, shuffle=True, stratify=labels)
train_dataloader = DataLoader( TensorDataset(token_id[train_idx], attention_masks[train_idx], labels[train_idx]), sampler=RandomSampler(train_idx), batch_size=batch_size )
val_dataloader = DataLoader( TensorDataset(token_id[val_idx], attention_masks[val_idx], labels[val_idx]), sampler=SequentialSampler(val_idx), batch_size=batch_size )
from sklearn.metrics import precision_score
#4Entrenamiento del modelo BERT para clasificación:
num_epochs = 3 # ajusta el número de épocas según sea necesario
for epoch in trange(num_epochs, desc='Epoch'): model.train()
for step, batch in enumerate(train_dataloader):
batch = tuple(t.to(dispositivo) for t in batch)
input_ids, attention_mask, labels = batch
optimizador.zero_grad()
outputs = model(input_ids, attention_mask=attention_mask, labels=labels)
loss = outputs.loss
loss.backward()
optimizador.step()
# Evaluación en el conjunto de validación después de cada época
model.eval()
# Tracking variables
val_accuracy = []
val_precision = []
for batch in val_dataloader: # Cambiado a val_dataloader en lugar de validation_dataloader
batch = tuple(t.to(dispositivo) for t in batch)
b_input_ids, b_input_mask, b_labels = batch
with torch.no_grad():
# Forward pass
eval_output = model(
b_input_ids,
token_type_ids=None,
attention_mask=b_input_mask
)
logits = eval_output.logits.detach().cpu().numpy()
label_ids = b_labels.to('cpu').numpy()
# Calculate validation metrics
b_accuracy, _, _, b_precision = b_metrics(logits, label_ids)
val_accuracy.append(b_accuracy)
val_precision.append(b_precision)
# Calcular métricas promedio para la época
avg_val_accuracy = sum(val_accuracy) / len(val_accuracy)
avg_val_precision = sum(val_precision) / len(val_precision) if len(val_precision) > 0 else float('nan')
# Imprimir resultados de la época
print(f'\nEpoch {epoch + 1}/{num_epochs}')
print(f' - Training Loss: {loss.item()}')
print(f' - Validation Accuracy: {avg_val_accuracy}')
print(f' - Validation Precision: {avg_val_precision}')
# Predicción en un nuevo ejemplo
nueva_oracion = "Nah I don't think he goes to usf, he lives around here though"
encoding = tokenizer.encode_plus( nueva_oracion, add_special_tokens=True, max_length=32, # Ajusta la longitud máxima según sea necesario pad_to_max_length=True, return_attention_mask=True, return_tensors='pt' # Devuelve tensores de PyTorch )
input_ids = encoding['input_ids'].to(dispositivo) attention_mask = encoding['attention_mask'].to(dispositivo)
input_ids = input_ids.view(1, -1) # Cambiar la forma a (1, longitud) attention_mask = attention_mask.view(1, -1) # Cambiar la forma a (1, longitud)
with torch.no_grad(): output = model(input_ids, attention_mask=attention_mask)
prediccion = 'Clase A' if torch.argmax(output.logits[0]).item() == 0 else 'Clase B'
print(f'Nueva Oración: {nueva_oracion}') print(f'Predicción: {prediccion}')
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
Carbon emissions can be estimated using the Machine Learning Impact calculator presented in Lacoste et al. (2019).
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
BibTeX:
[More Information Needed]
APA:
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]
[More Information Needed]