Spaces:
Sleeping
Sleeping
import torch | |
from torch import nn | |
from transformers import AutoModel, AutoTokenizer | |
import gradio as gr | |
# Check if CUDA is available | |
if torch.cuda.is_available(): | |
device = torch.device("cuda") | |
else: | |
device = torch.device("cpu") | |
class RaceClassifier(nn.Module): | |
def __init__(self, n_classes): | |
super(RaceClassifier, self).__init__() | |
self.bert = AutoModel.from_pretrained("vinai/bertweet-base") | |
self.drop = nn.Dropout(p=0.3) # can be changed in future | |
self.out = nn.Linear(self.bert.config.hidden_size, | |
n_classes) # linear layer for the output with the number of classes | |
def forward(self, input_ids, attention_mask): | |
bert_output = self.bert( | |
input_ids=input_ids, | |
attention_mask=attention_mask | |
) | |
last_hidden_state = bert_output[0] | |
pooled_output = last_hidden_state[:, 0] | |
output = self.drop(pooled_output) | |
return self.out(output) | |
labels = { | |
0: "African American", | |
1: "Asian", | |
2: "Latin", | |
3: "White" | |
} | |
model_race = RaceClassifier(n_classes=4) | |
model_race.to(device) | |
model_race.load_state_dict(torch.load('best_model_race.pt')) | |
def predict(text): | |
sentences = [ | |
text | |
] | |
tokenizer = AutoTokenizer.from_pretrained("vinai/bertweet-base", normalization=True) | |
encoded_sentences = tokenizer( | |
sentences, | |
padding=True, | |
truncation=True, | |
return_tensors='pt', | |
max_length=128, | |
) | |
input_ids = encoded_sentences["input_ids"].to(device) | |
attention_mask = encoded_sentences["attention_mask"].to(device) | |
model_race.eval() | |
with torch.no_grad(): | |
outputs = model_race(input_ids, attention_mask) | |
probs = torch.nn.functional.softmax(outputs, dim=1) | |
predictions = torch.argmax(outputs, dim=1) | |
predictions = predictions.cpu().numpy() | |
output_string = "" | |
for i, prob in enumerate(probs[0]): | |
print(f"{labels[i]}: %{round(prob.item() * 100, 2)}") | |
output_string += f"{labels[i]}: %{round(prob.item() * 100, 2)}\n" | |
print(labels[predictions[0]]) | |
output_string += f"Predicted as: {labels[predictions[0]]}" | |
return output_string | |
demo = gr.Interface( | |
fn=predict, | |
inputs=["text"], | |
outputs=["text"], | |
) | |
demo.launch() | |