Downloads · 30 days
13
27% of all-time downloads
clinteastman/gs-ai-detector
gs-ai-detector is a text classification model from clinteastman. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as mit.
Domain-specific AI text detector for the GS content network of garden e-commerce sites (Greenhouse Stores, Garden Ornaments, Garden UK). Identifies AI-generated marketing copy in headers, footers, blog posts and produ…
Downloads · 30 days
13
27% of all-time downloads
All-time downloads
48
Public
Parameters
82.1M
328 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors328 MB · 99%
From the Hugging Face model README
Domain-specific AI text detector for the GS content network of garden e-commerce sites (Greenhouse Stores, Garden Ornaments, Garden UK). Identifies AI-generated marketing copy in headers, footers, blog posts and product descriptions so it can be flagged and rewritten.
Off-the-shelf AI detectors (Hello-SimpleAI/chatgpt-detector-roberta,
GPTZero, Originality.ai) lag behind current model releases by months.
For our specific use case - detecting Anthropic Claude-generated
content in the garden e-commerce domain - a small, fine-tuned
model gives:
Designed for: flagging AI-generated content on UK garden / greenhouse / outdoor-living e-commerce pages (collection headers and footers, product descriptions, blog articles).
Not for: general-purpose AI text detection across arbitrary domains. Performance outside garden e-commerce vocabulary is untested and likely degrades.
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
tok = AutoTokenizer.from_pretrained("clinteastman/gs-ai-detector")
model = AutoModelForSequenceClassification.from_pretrained("clinteastman/gs-ai-detector")
clf = pipeline("text-classification", model=model, tokenizer=tok,
truncation=True, max_length=512)
text = "Our comprehensive collection of intricate stone garden ornaments..."
result = clf(text)
# [{'label': 'ai', 'score': 0.94}]
For long pages, chunk into ~300-word segments and average the AI probability across chunks.
The full ensemble (classifier + lexical pattern detector + admin UI) lives in the gs-ai-detector repo. The pattern detector catches em-dashes, banned vocab ("intricate", "comprehensive", "robust"), emoji headings, "focal point" overuse and similar lexical fingerprints that don't shift between model releases. The classifier corroborates with a distributional signal.
Two sources, combined into clinteastman/gs-ai-detector-training:
Each page is chunked into overlapping 200-word segments with 100-word stride, giving the model many sub-page samples per source page.
Total: 2,467 chunks (1,143 AI / 1,324 human after splitting).
distilbert/distilroberta-base (~82M params)Train/validation split is by source page (not by chunk) so chunks of the same page never leak across the split.
Total training time: ~30 seconds.
On the held-out validation set (223 samples from 15% of source pages):
| Metric | Value |
|---|---|
| Accuracy | 0.7309 |
| AI Precision | 1.0000 |
| AI Recall | 0.5804 |
| AI F1 | 0.7345 |
The 100% precision is the most valuable property: when the model flags content as AI, it is reliably AI. The lower recall (58%) means we miss some AI content - this improves with more training data via the flywheel.
The flywheel automatically promotes new versions only when F1 beats the current production model by at least +0.005, so version numbers correspond to genuine improvements.
Internal model for the GS content network. Maintained by Clinteastman.