Spaces:
Sleeping
Sleeping
import gradio as gr | |
from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
import torch | |
import torch.nn as nn | |
from torch.utils.data import TensorDataset, DataLoader, RandomSampler, SequentialSampler | |
from typing import List, Dict, Any | |
device = 'cuda' if torch.cuda.is_available() else 'cpu' | |
class Predictor(): | |
def __init__(self, path="", tokenizer_path='bert-base-uncased'): | |
self.model = AutoModelForSequenceClassification.from_pretrained(path, trust_remote_code=True).to(device) | |
self.tokenizer = AutoTokenizer.from_pretrained(tokenizer_path) | |
def preprocess(self, inputs: List[str]): | |
MAX_LENGHT = 15 | |
tokens_unseen = self.tokenizer.batch_encode_plus( | |
inputs, | |
max_length = MAX_LENGHT, | |
pad_to_max_length=True, | |
truncation=True | |
) | |
unseen_seq = torch.tensor(tokens_unseen['input_ids']) | |
unseen_mask = torch.tensor(tokens_unseen['attention_mask']) | |
return unseen_seq, unseen_mask | |
def postprocess(self, preds): | |
preds = np.argmax(preds, axis = 1) | |
prediction_label = "This is fake news" if preds[0] == 1 else "This is fake news" | |
# print(f"Đây là {prediction_label} new.") | |
return prediction_label | |
def predict(self, inputs: str): | |
unseen_seq, unseen_mask = self.preprocess([inputs]) | |
with torch.no_grad(): | |
preds = self.model(unseen_seq, unseen_mask) | |
preds = preds.detach().cpu().numpy() | |
return self.postprocess(preds) | |
# Instantiate a predictor | |
predictor = Predictor('leroyrr/fake-news-detection-bert') | |
# Create title and description for our task | |
title = "Fake News Detection Demo" | |
description = "Detect fake news" | |
article = "Created from nguyenquocviet/fake-news-detection-bert" | |
# Create the Gradio interface | |
iface = gr.Interface(fn=predictor.predict, | |
inputs="textbox", | |
outputs="textbox", | |
title=title, | |
description=description, | |
article=article) | |
# Launch the interface | |
iface.launch() |