import os import torch import streamlit as st from transformers import AutoTokenizer, AutoModelForSequenceClassification import plotly.graph_objects as go input_text = st.text_input( label='Estimate item desirability:', value='I love a good fight.', placeholder='Enter item' ) #model_path = '/nlp/nlp/models/finetuned/twitter-xlm-roberta-base-regressive-desirability-ft-4' model_path = 'magnolia-psychometrics/item-desirability' #auth_token = os.environ.get("item-desirability") or True auth_token = "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" tokenizer = AutoTokenizer.from_pretrained( pretrained_model_name_or_path=model_path, use_fast=True, use_auth_token=auth_token ) model = AutoModelForSequenceClassification.from_pretrained( pretrained_model_name_or_path=model_path, num_labels=1, ignore_mismatched_sizes=True, use_auth_token=auth_token ) def z_score(y, mean=.04853076, sd=.9409466): return (y - mean) / sd if input_text: inputs = tokenizer(input_text, padding=True, return_tensors='pt') with torch.no_grad(): score = model(**inputs).logits.squeeze().tolist() z = z_score(score) fig = go.Figure(go.Indicator( mode = "gauge+delta", value = z, domain = {'x': [0, 1], 'y': [0, 1]}, title = f"Item Desirability
\"{input_text}\"", delta = { 'reference': 0, 'decreasing': {'color': "#ec4899"}, 'increasing': {'color': "#36def1"} }, gauge = { 'axis': {'range': [-4, 4], 'tickwidth': 1, 'tickcolor': "black"}, 'bar': {'color': "#4361ee"}, 'bgcolor': "white", 'borderwidth': 2, 'bordercolor': "#efefef", 'steps': [ {'range': [-4, 0], 'color': '#efefef'}, {'range': [0, 4], 'color': '#efefef'}], 'threshold': { 'line': {'color': "#4361ee", 'width': 8}, 'thickness': 0.75, 'value': z} })) fig.update_layout( paper_bgcolor = "white", font = {'color': "black", 'family': "Arial"}) st.plotly_chart(fig, theme=None, use_container_width=True)