Medical-NLP-Analysis / Sentiment_Intent.py
wittyicon's picture
Initial commit - Core features and functionalities
8f755ac verified
Raw
History Blame Contribute Delete
1.84 kB
from transformers import BertTokenizer, BertForSequenceClassification
import torch
def analyze_sentiment_intent(text: str) -> dict:
"""
Analyzes the sentiment and intent of the input text.
Args:
text (str): Input text to analyze
Returns:
dict: Dictionary containing sentiment and intent predictions
"""
# Load Sentiment Model
sentiment_model = BertForSequenceClassification.from_pretrained("sentiment_model")
sentiment_tokenizer = BertTokenizer.from_pretrained("sentiment_model")
# Load Intent Model
intent_model = BertForSequenceClassification.from_pretrained("intent_model")
intent_tokenizer = BertTokenizer.from_pretrained("intent_model")
# Define labels
sentiment_labels = {0: "Anxious", 1: "Neutral", 2: "Reassured"}
intent_labels = {0: "Seeking reassurance", 1: "Reporting symptoms", 2: "Expressing concern"}
# Tokenize input
inputs_sentiment = sentiment_tokenizer(text, return_tensors="pt", padding=True, truncation=True)
inputs_intent = intent_tokenizer(text, return_tensors="pt", padding=True, truncation=True)
# Get predictions
with torch.no_grad():
sentiment_logits = sentiment_model(**inputs_sentiment).logits
intent_logits = intent_model(**inputs_intent).logits
# Get predicted label
sentiment_pred = torch.argmax(sentiment_logits, dim=1).item()
intent_pred = torch.argmax(intent_logits, dim=1).item()
# Return predictions as dictionary
return {
"Sentiment": sentiment_labels[sentiment_pred],
"Intent": intent_labels[intent_pred]
}
# Example usage:
if __name__ == "__main__":
text = "I'm worried about my symptoms. Is this something serious?"
result = analyze_sentiment_intent(text)
print(result)