Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from transformers import AutoTokenizer, AutoModel, AutoModelForSequenceClassification, pipeline | |
| import torch | |
| import plotly.express as px | |
| import numpy as np | |
| from sklearn.decomposition import PCA | |
| from utils import visualize_attention, list_supported_models, plot_token_embeddings | |
| st.set_page_config(page_title="Transformer Visualizer", layout="wide") | |
| st.title("π§ Transformer Visualizer") | |
| st.markdown("Explore how Transformer models process and understand language.") | |
| task = st.sidebar.selectbox("Select Task", ["Text Classification", "Text Generation", "Question Answering"]) | |
| model_name = st.sidebar.selectbox("Select Model", list_supported_models(task)) | |
| text_input = st.text_area("Enter input text", "The quick brown fox jumps over the lazy dog.") | |
| if st.button("Run"): | |
| st.info(f"Loading model: `{model_name}`...") | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| if task == "Text Classification": | |
| model = AutoModelForSequenceClassification.from_pretrained(model_name, output_attentions=True) | |
| else: | |
| model = AutoModel.from_pretrained(model_name, output_attentions=True) | |
| inputs = tokenizer(text_input, return_tensors="pt", return_token_type_ids=False) | |
| outputs = model(**inputs) | |
| attentions = outputs.attentions | |
| st.success("Model inference complete!") | |
| # Tokenization Visualization | |
| st.subheader("π Tokenization") | |
| tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0]) | |
| token_ids = inputs["input_ids"][0].tolist() | |
| st.write(list(zip(tokens, token_ids))) | |
| # Token Embeddings Visualization | |
| st.subheader("π Token Embedding Space (PCA)") | |
| with torch.no_grad(): | |
| hidden_states = model.base_model.embeddings.word_embeddings(inputs["input_ids"]).squeeze(0) | |
| fig_embed = plot_token_embeddings(hidden_states, tokens) | |
| st.plotly_chart(fig_embed, use_container_width=True) | |
| # Attention Visualization | |
| if attentions: | |
| st.subheader("ποΈ Attention Visualization") | |
| fig = visualize_attention(attentions, tokenizer, inputs) | |
| st.plotly_chart(fig, use_container_width=True) | |
| else: | |
| st.warning("This model does not return attention weights.") | |
| if task == "Text Classification": | |
| st.subheader("β Prediction") | |
| pipe = pipeline("text-classification", model=model, tokenizer=tokenizer) | |
| prediction = pipe(text_input) | |
| st.write(prediction) | |
| st.sidebar.markdown("---") | |
| st.sidebar.write("App by Rahiya Esar π") | |