|
from fastapi import FastAPI |
|
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline |
|
import torch |
|
|
|
app = FastAPI() |
|
|
|
|
|
|
|
model_name = "cardiffnlp/twitter-xlm-roberta-base-sentiment" |
|
sentiment_model = AutoModelForSequenceClassification.from_pretrained(model_name) |
|
sentiment_tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
sentiment_model.config.id2label[3] = "mixed" |
|
|
|
@app.get("/") |
|
def greet_json(): |
|
return {"Hello": "World!"} |
|
|
|
|
|
@app.post(/sentiment_score) |
|
async def sentiment_score(text: str): |
|
inputs = sentiment_tokenizer(text[:2500], return_tensors='pt') |
|
|
|
with torch.no_grad(): |
|
logits = sentiment_model(**inputs).logits |
|
|
|
|
|
print(logits) |
|
|
|
logits = logits + logits[0,1].abs() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logits = torch.cat( |
|
( |
|
logits, ( |
|
|
|
|
|
(1 - torch.abs(logits[0,0] - logits[0,-1])*(2+(logits[0,1]//torch.max(torch.abs(logits[0,::2]))))) |
|
).unsqueeze(0).unsqueeze(0) |
|
), dim=-1 |
|
) |
|
|
|
softmax = torch.nn.functional.softmax( |
|
logits, |
|
dim=-1 |
|
) |
|
|
|
return [{"label":model.config.id2label[predicted_class_id.tolist()], "score":softmax[0, predicted_class_id].tolist()} for predicted_class_id in softmax.argsort(dim=-1, descending=True)[0]] |
|
|
|
|
|
|