Spaces:
Running
Running
File size: 2,505 Bytes
7b5fc70 b1bec5c 7b5fc70 b1bec5c 7b5fc70 b1bec5c 7b5fc70 b1bec5c 7b5fc70 b1bec5c 7b5fc70 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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 π")
|