|
|
""" |
|
|
Example usage of the Motivational Interviewing BERT classifier |
|
|
""" |
|
|
|
|
|
from transformers import BertTokenizer, BertForSequenceClassification |
|
|
import torch |
|
|
|
|
|
def predict_talk_type(text, model, tokenizer): |
|
|
"""Predict the talk type for a given text""" |
|
|
inputs = tokenizer( |
|
|
text, |
|
|
return_tensors="pt", |
|
|
padding=True, |
|
|
truncation=True, |
|
|
max_length=128 |
|
|
) |
|
|
|
|
|
with torch.no_grad(): |
|
|
outputs = model(**inputs) |
|
|
probs = torch.softmax(outputs.logits, dim=1) |
|
|
pred = torch.argmax(probs, dim=1) |
|
|
|
|
|
label = model.config.id2label[pred.item()] |
|
|
confidence = probs[0][pred].item() |
|
|
|
|
|
return { |
|
|
'label': label, |
|
|
'confidence': confidence, |
|
|
'all_probs': { |
|
|
model.config.id2label[i]: probs[0][i].item() |
|
|
for i in range(len(probs[0])) |
|
|
} |
|
|
} |
|
|
|
|
|
def main(): |
|
|
|
|
|
model_name = "RyanDDD/bert-motivational-interviewing" |
|
|
print(f"Loading model: {model_name}") |
|
|
|
|
|
tokenizer = BertTokenizer.from_pretrained(model_name) |
|
|
model = BertForSequenceClassification.from_pretrained(model_name) |
|
|
|
|
|
|
|
|
examples = [ |
|
|
"I really want to quit smoking for my health.", |
|
|
"I'm not sure if I can do this.", |
|
|
"Smoking helps me deal with stress.", |
|
|
"Maybe I should try cutting down.", |
|
|
"I've been thinking about quitting.", |
|
|
"I like smoking, it's part of who I am." |
|
|
] |
|
|
|
|
|
print("\nPredictions:\n" + "="*60) |
|
|
|
|
|
for text in examples: |
|
|
result = predict_talk_type(text, model, tokenizer) |
|
|
|
|
|
print(f"\nText: {text}") |
|
|
print(f"Type: {result['label']} ({result['confidence']:.1%} confidence)") |
|
|
print(f"All probabilities:") |
|
|
for label, prob in result['all_probs'].items(): |
|
|
print(f" {label:8s}: {prob:.1%}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|