Spaces:
Runtime error
Runtime error
Abineshkumar77 commited on
Commit ·
4171ec2
1
Parent(s): 30c467a
Add application file
Browse files
app.py
CHANGED
|
@@ -1,25 +1,40 @@
|
|
| 1 |
from fastapi import FastAPI, Query
|
| 2 |
-
from transformers import
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
pipe = pipeline("text-classification", model="cardiffnlp/twitter-roberta-base-sentiment")
|
| 6 |
|
| 7 |
app = FastAPI()
|
| 8 |
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
@app.get(
|
| 14 |
-
def
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
# Format the output to include labels and their corresponding scores
|
| 19 |
-
sentiment_scores = {result['label']: result['score'] for result in results}
|
| 20 |
-
|
| 21 |
-
return sentiment_scores
|
| 22 |
|
| 23 |
-
# To run
|
| 24 |
-
# 1. Save this code as `
|
| 25 |
-
# 2.
|
|
|
|
| 1 |
from fastapi import FastAPI, Query
|
| 2 |
+
from transformers import AutoTokenizer, AutoModelForSequenceClassification
|
| 3 |
+
from scipy.special import softmax
|
| 4 |
+
from typing import Dict
|
|
|
|
| 5 |
|
| 6 |
app = FastAPI()
|
| 7 |
|
| 8 |
+
# Load model and tokenizer
|
| 9 |
+
roberta = "cardiffnlp/twitter-roberta-base-sentiment"
|
| 10 |
+
model = AutoModelForSequenceClassification.from_pretrained(roberta)
|
| 11 |
+
tokenizer = AutoTokenizer.from_pretrained(roberta)
|
| 12 |
+
|
| 13 |
+
labels = ['Negative', 'Neutral', 'Positive']
|
| 14 |
+
|
| 15 |
+
def preprocess_tweet(tweet: str) -> str:
|
| 16 |
+
tweet_words = []
|
| 17 |
+
for word in tweet.split(' '):
|
| 18 |
+
if word.startswith('@') and len(word) > 1:
|
| 19 |
+
word = '@user'
|
| 20 |
+
elif word.startswith('http'):
|
| 21 |
+
word = "http"
|
| 22 |
+
tweet_words.append(word)
|
| 23 |
+
return " ".join(tweet_words)
|
| 24 |
+
|
| 25 |
+
def analyze_sentiment(tweet: str) -> Dict[str, float]:
|
| 26 |
+
tweet_proc = preprocess_tweet(tweet)
|
| 27 |
+
encoded_tweet = tokenizer(tweet_proc, return_tensors='pt')
|
| 28 |
+
output = model(**encoded_tweet)
|
| 29 |
+
scores = output[0][0].detach().numpy()
|
| 30 |
+
scores = softmax(scores)
|
| 31 |
+
return {labels[i]: float(scores[i]) for i in range(len(scores))}
|
| 32 |
|
| 33 |
+
@app.get("/analyze-sentiment/")
|
| 34 |
+
async def analyze_sentiment_endpoint(tweet: str = Query(..., description="The tweet to analyze")):
|
| 35 |
+
sentiment_scores = analyze_sentiment(tweet)
|
| 36 |
+
return {"sentiment": sentiment_scores}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
+
# To run the application:
|
| 39 |
+
# 1. Save this code as `main.py`.
|
| 40 |
+
# 2. Run the command `uvicorn main:app --reload`.
|