KnoxfireyNeurons's picture
Update app.py
9dc5514 verified
Raw
History Blame Contribute Delete
2.08 kB
import torch
import torch.nn as nn
import gradio as gr
from transformers import AutoConfig, AutoModelForSequenceClassification, AutoTokenizer
# 1. ARCHITECTURE DEFINITION
class MultiSampleDropoutHead(nn.Module):
def __init__(self, config):
super().__init__()
self.dense = nn.Linear(config.hidden_size, config.hidden_size)
self.out_proj = nn.Linear(config.hidden_size, config.num_labels)
self.multi_dropout = nn.ModuleList([nn.Dropout(0.1 * (i+1)) for i in range(5)])
def forward(self, features, **kwargs):
x = features[:, 0, :]
x = torch.tanh(self.dense(x))
return sum([self.out_proj(d(x)) for d in self.multi_dropout]) / 5
# 2. MODEL LOADER
def get_model():
repo = "KnoxfireyNeurons/Roberta_Base"
tokenizer = AutoTokenizer.from_pretrained(repo)
config = AutoConfig.from_pretrained(repo)
model = AutoModelForSequenceClassification.from_pretrained(repo, config=config)
model.classifier = MultiSampleDropoutHead(config)
model.eval()
return model, tokenizer
model, tokenizer = get_model()
# 3. PREDICTION ENGINE (FIXED)
def predict(text):
if not text or not text.strip():
return {"Please enter a review": 0.0}
inputs = tokenizer(text, return_tensors="pt", padding="max_length", truncation=True, max_length=256)
with torch.no_grad():
outputs = model(**inputs)
# FIX: We must extract .logits from the output object
logits = outputs.logits
# Apply softmax to the extracted logits
probs = torch.nn.functional.softmax(logits, dim=-1).squeeze().tolist()
return {
"Original (Real)": probs[0],
"Computer Generated (Fake)": probs[1]
}
# 4. INTERFACE
demo = gr.Interface(
fn=predict,
inputs=gr.Textbox(label="Review Content", lines=5),
outputs=gr.Label(num_top_classes=2, label="AI Analysis"),
title="🤖 Fake Review Detector",
description="Analyze reviews for AI patterns using a SOTA RoBERTa model.",
allow_flagging="never"
)
if __name__ == "__main__":
demo.launch()