Fine-tuned version of
microsoft/deberta-v3-base for binary threat scoring on harmful speech data.
DeBERTa v3-base (183M params)
→ [CLS] token embedding
→ Dropout(0.1)
→ Linear(768, 1)
→ Sigmoid
→ threat score ∈ [0, 1]
1import torch
2import torch.nn as nn
3from transformers import AutoTokenizer, AutoModel
4from safetensors.torch import load_file
5from huggingface_hub import hf_hub_download
6
7
8class ThreatRegressor(nn.Module):
9 def __init__(self, model_name: str = "microsoft/deberta-v3-base", dropout: float = 0.1):
10 super().__init__()
11 self.encoder = AutoModel.from_pretrained(model_name)
12 hidden_size = self.encoder.config.hidden_size
13 self.dropout = nn.Dropout(dropout)
14 self.head = nn.Linear(hidden_size, 1)
15
16 def forward(self, input_ids, attention_mask):
17 out = self.encoder(input_ids=input_ids, attention_mask=attention_mask)
18 cls = out.last_hidden_state[:, 0, :]
19 cls = self.dropout(cls)
20 logit = self.head(cls).squeeze(-1)
21 return logit
22
23 @torch.no_grad()
24 def predict_score(self, input_ids, attention_mask) -> torch.Tensor:
25 return torch.sigmoid(self.forward(input_ids, attention_mask))
26
27
28# Load model
29model = ThreatRegressor("microsoft/deberta-v3-base", dropout=0.1)
30weights_path = hf_hub_download("Namadgi/DeBERTav3-finetuned-threat-scorer", "model.safetensors")
31state_dict = load_file(weights_path)
32model.load_state_dict(state_dict)
33model.eval()
34
35# Tokenize and predict
36tokenizer = AutoTokenizer.from_pretrained("Namadgi/DeBERTav3-finetuned-threat-scorer")
37text = "I'm going to find you and hurt you"
38enc = tokenizer(text, max_length=128, padding="max_length", truncation=True, return_tensors="pt")
39score = model.predict_score(enc["input_ids"], enc["attention_mask"])
40print(f"Threat score: {score.item():.4f}") # e.g. 0.93 → 93% threat