ai-text-detector-mlp / modeling_ai_text_classifier.py
R-obi's picture
Upload modeling_ai_text_classifier.py with huggingface_hub
5310222 verified
Raw
History Blame Contribute Delete
1.81 kB
import torch
import torch.nn as nn
from transformers import PreTrainedModel, PretrainedConfig
# 1. Definiamo la configurazione con i tuoi valori di default
class AITextClassifierConfig(PretrainedConfig):
model_type = "ai_text_classifier"
def __init__(
self,
input_dim: int = 1024,
dropout_high: float = 0.25,
dropout_low: float = 0.1,
**kwargs
):
super().__init__(**kwargs)
self.input_dim = input_dim
self.dropout_high = dropout_high
self.dropout_low = dropout_low
# 2. Adattiamo il tuo modello ereditando da PreTrainedModel
class AITextClassifier(PreTrainedModel):
config_class = AITextClassifierConfig
# Il costruttore ora accetta l'oggetto 'config' di Hugging Face
def __init__(self, config: AITextClassifierConfig):
super().__init__(config)
# Ricreiamo esattamente la tua rete usando i parametri estratti dal config
self.network = nn.Sequential(
# --- Layer 1 ---
nn.Linear(config.input_dim, 512),
nn.BatchNorm1d(512),
nn.GELU(),
nn.Dropout(config.dropout_high),
# --- Layer 2 ---
nn.Linear(512, 256),
nn.BatchNorm1d(256),
nn.GELU(),
nn.Dropout(config.dropout_high),
# --- Layer 3 ---
nn.Linear(256, 128),
nn.BatchNorm1d(128),
nn.GELU(),
nn.Dropout(config.dropout_low),
# --- Output ---
nn.Linear(128, 1),
)
def forward(self, x: torch.Tensor) -> torch.Tensor:
return self.network(x).squeeze(-1)
@torch.no_grad()
def predict_proba(self, x: torch.Tensor) -> torch.Tensor:
self.eval()
return torch.sigmoid(self.forward(x))