File size: 1,163 Bytes
9380e7e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from fastapi import FastAPI
from pydantic import BaseModel
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# === Загрузка модели ===
MODEL_NAME = "nlptown/bert-base-multilingual-uncased-sentiment"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME)
model.eval()

# === FastAPI приложение ===
app = FastAPI(title="Sentiment Analysis API")

# === Схема запроса ===
class TextRequest(BaseModel):
    text: str

# === Логика сентимента ===
def analyze_sentiment(message: str) -> float:
    inputs = tokenizer(message, return_tensors="pt", truncation=True)
    with torch.no_grad():
        logits = model(**inputs).logits
    probs = torch.softmax(logits, dim=-1)
    stars = torch.argmax(probs, dim=-1).item() + 1  # от 1 до 5
    sentiment = (stars - 3) * 2.5  # нормируем -5..+5
    return round(sentiment, 2)

# === Эндпоинт API ===
@app.post("/sentiment")
def sentiment(request: TextRequest):
    score = analyze_sentiment(request.text)
    return {"sentiment_score": score}