--- license: mit --- ## AI Text Classifier – Human vs AI Detection **Model:** `alanjoshua2005/AI-text-classifier` --- ## 1. Project Overview The **AI Text Classifier** is a deep learning–based system designed to estimate the likelihood that a given piece of text was generated by an **AI model** versus written by a **human**. The system leverages: * A **Transformer-based language model (RoBERTa)** * Supervised fine-tuning on a large, diverse corpus of AI- and human-written text * GPU-accelerated training for scalability and performance The final model outputs **probabilistic predictions**, making it suitable for real-world use cases such as plagiarism detection, AI content auditing, and academic integrity tools. --- ## 2. Use Cases * AI-generated content detection * Academic integrity verification * Content moderation pipelines * AI watermarking support systems * Research on AI-human text differences --- ## 3. Dataset ### Dataset Used **Name:** `artem9k/ai-text-detection-pile` **Source:** Hugging Face Datasets ### Dataset Description This dataset contains over **1.3 million text samples** labeled as: * `"human"` → Human-written text * `"ai"` → AI-generated text Each entry includes: * `text`: The content * `source`: Origin label (`human` or `ai`) ### Dataset Processing Strategy To ensure efficient training on limited GPU resources (e.g., Google Colab), the following steps were applied: 1. **Shuffling** the dataset for randomness 2. **Sampling** 200,000 examples 3. **Label encoding** * `human → 0` * `ai → 1` 4. **Filtering** * Removed text samples shorter than 100 characters 5. **Train–validation split** * 90% training * 10% validation --- ## 4. Model Architecture ### Base Model * **RoBERTa-base** * Transformer encoder with bidirectional attention * Pretrained on large-scale natural language corpora ### Classification Head * Sequence classification head * Binary output (`human` vs `ai`) * Softmax probability distribution ### Key Parameters | Parameter | Value | | ------------------- | ----- | | Max sequence length | 256 | | Batch size | 16 | | Epochs | 2 | | Learning rate | 2e-5 | | Optimizer | AdamW | | Weight decay | 0.01 | --- ## 5. Tokenization The model uses `AutoTokenizer` from Hugging Face Transformers: * Padding: `max_length` * Truncation: Enabled * Maximum length: 256 tokens * Attention masks generated automatically This ensures consistent input formatting across training and inference. --- ## 6. Training Pipeline ### Frameworks Used * PyTorch * Hugging Face Transformers * Hugging Face Datasets * Scikit-learn (metrics) ### Training Features * **GPU acceleration** via CUDA * **Mixed precision training (fp16)** for speed and memory efficiency * Automatic evaluation at each epoch * Best model selection based on **ROC-AUC** ### Training Strategy ```text Input Text ↓ Tokenizer (RoBERTa) ↓ Transformer Encoder ↓ Classification Head ↓ Probability Output (AI vs Human) ``` --- ## 7. Evaluation Metrics The model is evaluated using: ### Accuracy Measures overall classification correctness. ### ROC-AUC (Primary Metric) Measures how well the model separates AI-generated and human-written text across all thresholds. ROC-AUC was chosen because: * It is robust to class imbalance * It reflects probabilistic confidence * It is widely used in production classifiers --- ## 8. Model Performance On the validation set: * **High ROC-AUC (>0.9)** indicating strong separation * Reliable probability calibration on long-form text * Better performance on text lengths > 100 characters ⚠️ Short texts may yield lower confidence and should be handled carefully in production. --- ## 9. Model Saving & Deployment After training, both the model and tokenizer are saved: ```python trainer.save_model("ai_text_detector_gpu") tokenizer.save_pretrained("ai_text_detector_gpu") ``` The final model is uploaded to Hugging Face Hub: 🔗 **Model URL** [https://huggingface.co/alanjoshua2005/AI-text-classifier](https://huggingface.co/alanjoshua2005/AI-text-classifier) --- Perfect — I’ll **integrate this inference logic into your technical documentation properly**, while: * ✅ Using the **Hugging Face model**: `alanjoshua2005/AI-text-classifier` * ✅ **NOT changing the temperature** (`TEMPERATURE = 1.5`) * ✅ Keeping it **production-accurate** * ✅ Writing it in a **documentation-ready format** Below is a **drop-in documentation section** you can paste directly into your technical document or HF README. --- ## 10. Inference & AI Likelihood Estimation This section describes how the trained model is used during **inference** to estimate the likelihood that a given text was written by an AI versus a human. The inference pipeline loads the fine-tuned model from **Hugging Face Hub** and produces **probabilistic outputs** rather than hard labels. This allows downstream applications to apply custom thresholds depending on risk tolerance. --- ### 10.1 Inference Configuration * **Model:** `alanjoshua2005/AI-text-classifier` * **Max sequence length:** 256 tokens * **Device:** CUDA (GPU) if available, otherwise CPU * **Temperature scaling:** `1.5` (used for probability stabilization) Temperature scaling is applied **only during inference** to smooth overconfident predictions while preserving class separation. --- ### 10.2 Inference Code ```python import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification MODEL_NAME = "alanjoshua2005/AI-text-classifier" MAX_LENGTH = 256 TEMPERATURE = 1.5 # 🔥 probability stabilization (unchanged) # Device selection device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print("Using device:", device) # Load tokenizer and model from Hugging Face Hub tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME) model.to(device) model.eval() def predict_ai_likelihood(text: str): """ Returns AI vs Human likelihood percentages for a given input text. """ inputs = tokenizer( text, return_tensors="pt", truncation=True, padding="max_length", max_length=MAX_LENGTH ) inputs = {k: v.to(device) for k, v in inputs.items()} with torch.no_grad(): logits = model(**inputs).logits probs = torch.softmax(logits / TEMPERATURE, dim=1)[0] return { "human_probability": round(float(probs[0]) * 100, 2), "ai_probability": round(float(probs[1]) * 100, 2) } ``` --- ### 10.3 Example Predictions ```python human_text = "idk man, salt is cheap and it works. cars rust but people care more about not crashing." ai_text = "Salt is applied to roads to lower the freezing point of water and improve winter safety." print("Human:", predict_ai_likelihood(human_text)) print("AI:", predict_ai_likelihood(ai_text)) ``` #### Sample Output ```text Human: {'human_probability': 99.74, 'ai_probability': 0.26} AI: {'human_probability': 8.55, 'ai_probability': 91.45} ``` --- ### 10.4 Interpretation of Results * The model outputs **probability scores**, not absolute truth. * Higher `ai_probability` indicates stronger similarity to AI-generated patterns. * The temperature-scaled softmax helps prevent extreme confidence on ambiguous text. * Recommended minimum text length for reliable inference: **≥ 100 characters** --- ### 10.5 Production Notes * This inference function is suitable for: * REST APIs (FastAPI) * Streamlit dashboards * Batch document analysis * For long documents, chunking into overlapping segments is recommended. * Results should be interpreted as **likelihood**, not definitive proof. --- If you want, next I can: * Merge this into your **full documentation PDF** * Write a **Streamlit inference section** * Add a **confidence threshold policy** for production * Prepare a **FastAPI inference endpoint** Just tell me 👍 --- ## 11. Production Considerations ### Strengths * Transformer-based (state-of-the-art) * Probabilistic outputs (not hard labels) * Trained on large-scale data * GPU-optimized training ### Limitations * Not a definitive proof of AI usage * Performance drops on very short texts * May require re-training for future AI models ### Ethical Disclaimer This tool **estimates likelihood**, not certainty. It should **not** be used as sole evidence for academic, legal, or disciplinary decisions. --- ## 12. Future Improvements * Probability calibration (Platt / Isotonic) * Multilingual support * Chunk-based long document inference * Model ensemble (classical + transformer) * Continual learning with new AI models --- ## 13. License **MIT License** --- ## 14. Author **Alan Joshua** Hugging Face: `alanjoshua2005` Project: AI Text Classification & Detection --- If you want, I can: * Convert this into a **formal research paper format** * Create a **system architecture diagram** * Write a **deployment section (FastAPI / Streamlit)** * Optimize this doc for **college submission** Just tell me 👌