File size: 1,571 Bytes
89e8242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import torch
from transformers import AutoTokenizer, DebertaV2Config, DebertaV2ForSequenceClassification
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file

MODEL = "desklib/ai-text-detector-v1.01"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
config = DebertaV2Config.from_pretrained(MODEL, num_labels=1)
model = DebertaV2ForSequenceClassification(config)
sd_path = hf_hub_download(MODEL, "model.safetensors")
sd = load_file(sd_path)
new_sd = { (k.replace('model.', 'deberta.', 1) if k.startswith('model.') else k): v for k, v in sd.items() }
model.load_state_dict(new_sd, strict=False)
model.eval()

text_human = "Honestly, I think we should just go for pizza because it's easier for everyone."
text_ai = "In conclusion, the multifaceted benefits of artificial intelligence are significant in the modern landscape."

def get_score(text):
    inputs = tokenizer(text, return_tensors="pt")
    with torch.no_grad():
        out = model(**inputs)
    # The config has num_labels=1, so it might be a regressor/sigmoid 
    # or the code in new_forensic_engine.py handles it.
    # In new_forensic_engine.py:
    # if probs3.shape[0] >= 2: s3 = float(probs3[1].item())
    # else: s3 = float(torch.sigmoid(out.logits[0][0]).item())
    
    logits = out.logits
    if logits.shape[1] >= 2:
        probs = torch.softmax(logits, dim=1)[0]
        return probs[1].item()
    else:
        return torch.sigmoid(logits[0][0]).item()

print(f"Human score (AI prob): {get_score(text_human)}")
print(f"AI score (AI prob): {get_score(text_ai)}")