|
|
--- |
|
|
license: mit |
|
|
language: |
|
|
- en |
|
|
metrics: |
|
|
- accuracy |
|
|
- f1 |
|
|
base_model: |
|
|
- google-bert/bert-base-uncased |
|
|
pipeline_tag: text-classification |
|
|
tags: |
|
|
- text-classification |
|
|
- ai-detection |
|
|
- academic-text |
|
|
- ai-generated-text-detection |
|
|
model-index: |
|
|
- name: bert-ai-text-detector |
|
|
results: |
|
|
- task: |
|
|
type: text-classification |
|
|
name: AI-Generated Text Detection |
|
|
dataset: |
|
|
name: Custom Academic Text Dataset |
|
|
type: custom |
|
|
metrics: |
|
|
- type: accuracy |
|
|
value: 0.9957 |
|
|
- type: f1 |
|
|
value: 0.9958 |
|
|
- type: precision |
|
|
value: 0.9923 |
|
|
- type: recall |
|
|
value: 0.9994 |
|
|
--- |
|
|
# BERT-based AI-Generated Academic Text Detector |
|
|
|
|
|
A high-accuracy BERT model for detecting AI-generated academic text with **99.57% accuracy** on paragraph-level samples. |
|
|
|
|
|
## Online Demo |
|
|
|
|
|
🌐 **Try the model online**: [https://followsci.com/ai-detection](https://followsci.com/ai-detection) |
|
|
|
|
|
Free web interface with real-time detection, no installation or API key required. |
|
|
|
|
|
## Model Details |
|
|
|
|
|
### Model Description |
|
|
|
|
|
- **Model Type**: BERT-base-uncased fine-tuned for binary text classification |
|
|
- **Architecture**: BERT-base-uncased (110M parameters) |
|
|
- **Task**: Binary classification (Human-written vs AI-generated text) |
|
|
- **Input**: Academic text paragraphs (up to 512 tokens) |
|
|
- **Output**: Binary label (0 = Human-written, 1 = AI-generated) with confidence scores |
|
|
|
|
|
### Training Information |
|
|
|
|
|
- **Training Samples**: 1,487,400 paragraph-level samples |
|
|
- **Validation Samples**: 185,930 paragraph-level samples |
|
|
- **Test Samples**: 185,930 paragraph-level samples |
|
|
- **Total Dataset**: 1,859,260 paragraphs |
|
|
- **Training Data**: |
|
|
- Human-written: Academic papers from arXiv |
|
|
- AI-generated: Text generated by various large language models (GPT, Claude, etc.) |
|
|
|
|
|
## Performance |
|
|
|
|
|
### Test Set Results |
|
|
|
|
|
| Metric | Value | |
|
|
|--------|-------| |
|
|
| **Accuracy** | **99.57%** | |
|
|
| **F1-Score** | **99.58%** | |
|
|
| Precision | 99.23% | |
|
|
| Recall | 99.94% | |
|
|
| False Positive Rate | 0.82% | |
|
|
| False Negative Rate | 0.06% | |
|
|
|
|
|
### Confusion Matrix (Test Set) |
|
|
|
|
|
| | Predicted: Human | Predicted: AI | |
|
|
|---|---|---| |
|
|
| **Actual: Human** | 89,740 (TN) | 740 (FP) | |
|
|
| **Actual: AI** | 60 (FN) | 95,390 (TP) | |
|
|
|
|
|
**Inference Speed:** ~20,900 samples/second on RTX 3090 (batch size 64) |
|
|
|
|
|
## Usage |
|
|
|
|
|
### Quick Start |
|
|
|
|
|
```python |
|
|
from transformers import BertTokenizer, BertForSequenceClassification |
|
|
import torch |
|
|
|
|
|
# Load model and tokenizer |
|
|
model_name = "followsci/bert-ai-text-detector" |
|
|
tokenizer = BertTokenizer.from_pretrained(model_name) |
|
|
model = BertForSequenceClassification.from_pretrained(model_name) |
|
|
model.eval() |
|
|
|
|
|
# Detect AI text |
|
|
text = "Your academic paragraph here..." |
|
|
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512) |
|
|
|
|
|
with torch.no_grad(): |
|
|
outputs = model(**inputs) |
|
|
probs = torch.nn.functional.softmax(outputs.logits, dim=-1) |
|
|
ai_prob = probs[0][1].item() * 100 |
|
|
human_prob = probs[0][0].item() * 100 |
|
|
|
|
|
print(f"AI-generated probability: {ai_prob:.1f}%") |
|
|
print(f"Human-written probability: {human_prob:.1f}%") |
|
|
|
|
|
if ai_prob > 50: |
|
|
print("Prediction: AI-generated") |
|
|
else: |
|
|
print("Prediction: Human-written") |
|
|
``` |
|
|
|
|
|
### Batch Processing |
|
|
|
|
|
```python |
|
|
texts = [ |
|
|
"First paragraph...", |
|
|
"Second paragraph...", |
|
|
# ... more texts |
|
|
] |
|
|
|
|
|
inputs = tokenizer( |
|
|
texts, |
|
|
return_tensors="pt", |
|
|
truncation=True, |
|
|
max_length=512, |
|
|
padding=True |
|
|
) |
|
|
|
|
|
with torch.no_grad(): |
|
|
outputs = model(**inputs) |
|
|
probs = torch.nn.functional.softmax(outputs.logits, dim=-1) |
|
|
|
|
|
for i, prob in enumerate(probs): |
|
|
ai_prob = prob[1].item() * 100 |
|
|
print(f"Text {i+1}: AI probability = {ai_prob:.1f}%") |
|
|
``` |
|
|
|
|
|
### Using with Transformers Pipeline |
|
|
|
|
|
```python |
|
|
from transformers import pipeline |
|
|
|
|
|
classifier = pipeline( |
|
|
"text-classification", |
|
|
model="followsci/bert-ai-text-detector", |
|
|
tokenizer="followsci/bert-ai-text-detector" |
|
|
) |
|
|
|
|
|
result = classifier("Your text here...") |
|
|
print(result) |
|
|
``` |
|
|
|
|
|
## Training Details |
|
|
|
|
|
### Training Configuration |
|
|
|
|
|
- **Base Model**: `bert-base-uncased` |
|
|
- **Batch Size**: 64 |
|
|
- **Learning Rate**: 5e-5 (with linear warmup) |
|
|
- **Warmup Steps**: 5,000 |
|
|
- **Max Sequence Length**: 512 |
|
|
- **Optimizer**: AdamW |
|
|
- **Epochs**: 3 |
|
|
- **Training Time**: ~11 hours (on RTX 3090) |
|
|
|
|
|
### Dataset Distribution |
|
|
|
|
|
| Split | Total Samples | Human (Label 0) | AI (Label 1) | |
|
|
|-------|--------------|-----------------|--------------| |
|
|
| Train | 1,487,400 | 723,780 (48.7%) | 763,620 (51.3%) | |
|
|
| Validation | 185,930 | 90,470 (48.7%) | 95,460 (51.3%) | |
|
|
| Test | 185,930 | 90,480 (48.7%) | 95,450 (51.3%) | |
|
|
|
|
|
## Limitations |
|
|
|
|
|
1. **Domain Specificity**: The model is trained primarily on academic text. Performance may degrade on: |
|
|
- Casual text or social media content |
|
|
- Technical documentation |
|
|
- Creative writing |
|
|
|
|
|
2. **Binary Classification**: The model only distinguishes between "human" and "AI" text, without: |
|
|
- Identifying which AI model generated the text |
|
|
- Providing confidence intervals |
|
|
- Detecting partially AI-assisted text |
|
|
|
|
|
3. **Paragraph-Level Detection**: The model is optimized for paragraph-level samples: |
|
|
- Performance on sentence-level or full-document level may vary |
|
|
- Best results achieved with structured academic paragraphs |
|
|
|
|
|
4. **False Positives**: Approximately 0.82% false positive rate means some human-written text may be flagged as AI-generated. |
|
|
|
|
|
## Ethical Considerations |
|
|
|
|
|
- **Use Case**: This model is intended as a tool for academic integrity and research purposes |
|
|
- **Bias**: The model may reflect biases present in the training data |
|
|
- **Misuse**: Should not be used as the sole criterion for academic misconduct decisions |
|
|
- **Transparency**: Results should be interpreted with context and domain expertise |
|
|
|
|
|
|
|
|
## License |
|
|
|
|
|
This model is licensed under the MIT License. |
|
|
|
|
|
## Contact |
|
|
|
|
|
- **Email**: raffoduanedonnenfeld@gmail.com |
|
|
|
|
|
--- |
|
|
|
|
|
<p align="center"> |
|
|
Made with ❤️ for Academic Integrity |
|
|
</p> |
|
|
|