Views
No views yet
1from transformers import AutoModelForSequenceClassification, AutoTokenizer
2import torch
3import torch.nn.functional as F
4
5MODEL = "pegesund/norwegian-ai-detector"
6
7tokenizer = AutoTokenizer.from_pretrained(MODEL, trust_remote_code=True)
8model = AutoModelForSequenceClassification.from_pretrained(MODEL, trust_remote_code=True)
9model.eval()
10
11text = """Hippodrom (gresk: ἱππόδρομος, hippodromos, av hippos, «hest», og dromos, «løp»)
12er en bane til hesteveddeløp. Også i dag betyr ordet hesteløpsbane i flere moderne språk,
13eksempelvis i moderne fransk. Av den grunn er det hesteløpsbaner som har ordet hippodrom
14som en del av navnet, blant annet Hippodrome de Vincennes i Paris og Hippodromen i Moskva."""
15
16inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=1024)
17with torch.no_grad():
18 logits = model(**inputs).logits
19probs = F.softmax(logits, dim=-1)[0]
20print(f"P(menneske) = {probs[0].item():.4f}")
21print(f"P(AI) = {probs[1].item():.4f}")1import onnxruntime as ort
2import numpy as np
3from transformers import AutoTokenizer
4
5tokenizer = AutoTokenizer.from_pretrained("pegesund/norwegian-ai-detector", trust_remote_code=True)
6sess = ort.InferenceSession("detector_fp16.onnx")
7
8text = "Hippodrom (gresk: ἱππόδρομος, hippodromos, ...) er en bane til hesteveddeløp..."
9enc = tokenizer(text, return_tensors="np", truncation=True, max_length=1024)
10
11logits = sess.run(["logits"], {
12 "input_ids": enc["input_ids"],
13 "attention_mask": enc["attention_mask"],
14})[0]
15
16# Softmax
17exp = np.exp(logits - logits.max(axis=-1, keepdims=True))
18probs = exp / exp.sum(axis=-1, keepdims=True)
19print(f"P(menneske) = {probs[0, 0]:.4f}")
20print(f"P(AI) = {probs[0, 1]:.4f}")onnx/-mappen:detector_fp16.onnx (87 MB) — anbefalt for browser-deploy via onnxruntime-webdetector_int8.onnx (57 MB) — kompakt, ~1-2% lavere presisjonclean_text.py i dette repoet for konkret implementasjon. Hovedoperasjoner:{{...}}, [[...]], <...>, **, ==)[ref], krøllparenteser {...}&, )«»""'' → strippet)—– → -)1from clean_text import clean
2cleaned = clean(your_text)| Metrikk | Verdi |
|---|---|
| Accuracy | 0.999 |
| F1 | 0.998 |
| Precision | 0.998 |
| Recall | 0.999 |
| Lengde (ord) | n | F1 |
|---|---|---|
| 50–300 | 1 425 | 0.9913 |
| 300–800 | 2 873 | 0.9991 |
| 800–2 000 | 1 360 | 0.9988 |
| 2 000+ | 404 | 0.9920 |