Download app.py from ma4389/Text_Classification_AI_Generated_Public: direct link, hf CLI and curl.
- Browser
- Download file 1.95 kB
-
https://huggingface.co/spaces/ma4389/Text_Classification_AI_Generated_Public/resolve/main/app.py
- Command line
-
hf download hf://spaces/ma4389/Text_Classification_AI_Generated_Public/app.py
-
curl -L -o app.py https://huggingface.co/spaces/ma4389/Text_Classification_AI_Generated_Public/resolve/main/app.py
1.95 kB
| import torch | |
| from transformers import DistilBertTokenizer, DistilBertForSequenceClassification | |
| import gradio as gr | |
| import re | |
| import nltk | |
| from nltk.tokenize import word_tokenize | |
| from nltk.corpus import stopwords | |
| from nltk.stem import WordNetLemmatizer | |
| # Download necessary NLTK data | |
| nltk.download('punkt_tab') | |
| nltk.download('stopwords') | |
| nltk.download('wordnet') | |
| # Preprocessing function | |
| def preprocess(text): | |
| text = re.sub(r'[^a-zA-Z\s]', '', text).lower() | |
| tokens = word_tokenize(text) | |
| stop_words = set(stopwords.words('english')) | |
| tokens = [word for word in tokens if word not in stop_words] | |
| lemmatizer = WordNetLemmatizer() | |
| tokens = [lemmatizer.lemmatize(word) for word in tokens] | |
| return ' '.join(tokens) | |
| # Load tokenizer and model | |
| tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased') | |
| model = DistilBertForSequenceClassification.from_pretrained('distilbert-base-uncased', num_labels=2) | |
| model.load_state_dict(torch.load('best_model (3).pth', map_location=torch.device('cpu'))) | |
| model.eval() | |
| # Prediction function | |
| def classify_essay(text): | |
| cleaned_text = preprocess(text) | |
| inputs = tokenizer(cleaned_text, return_tensors='pt', truncation=True, padding=True, max_length=100) | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| probs = torch.nn.functional.softmax(outputs.logits, dim=1) | |
| predicted_class = torch.argmax(probs, dim=1).item() | |
| labels = ["Human-Written", "AI-Generated"] | |
| return {labels[0]: float(probs[0][0]), labels[1]: float(probs[0][1])} | |
| # Gradio interface | |
| iface = gr.Interface( | |
| fn=classify_essay, | |
| inputs=gr.Textbox(lines=10, placeholder="Paste your essay here..."), | |
| outputs=gr.Label(num_top_classes=2), | |
| title="Essay Authorship Classifier", | |
| description="Detect whether an essay is AI-generated or human-written using a fine-tuned DistilBERT model." | |
| ) | |
| # Launch the app | |
| if __name__ == "__main__": | |
| iface.launch() | |