Attribution Graph Probing - Applicazione Streamlit
Versione: 2.0.0-clean | Pipeline v2
Data: Ottobre 2025
Panoramica
Applicazione Streamlit interattiva per l'analisi di attribution graphs e probe prompting su modelli linguistici con Sparse Autoencoders (SAE).
Funzionalita Principali
- Graph Generation - Genera attribution graphs su Neuronpedia
- Probe Prompts - Analizza attivazioni su concepts specifici
- Node Grouping - Classifica e nomina supernodi per interpretazione
Avvio Rapido
Prerequisiti
pip install streamlit plotly pandas seaborn matplotlib numpy requests openai python-dotenv
Oppure:
pip install -r requirements.txt
Configurazione API Keys
Crea un file .env nella root del progetto:
NEURONPEDIA_API_KEY='your-neuronpedia-key-here'
OPENAI_API_KEY='your-openai-key-here'
Avvio Applicazione
Dalla root del progetto:
streamlit run eda/app.py
L'app si aprira automaticamente su http://localhost:8501
Pagine dell'Applicazione
Pagina Principale
Dashboard con:
- Link rapidi alle pagine
- Info sulla struttura output folder
- Statistiche file disponibili (grafi, JSON, CSV)
00 - Graph Generation
Genera attribution graphs su Neuronpedia
Funzionalita
- Generazione Graph: Crea nuovi attribution graphs tramite API Neuronpedia
- Estrazione Metriche: Genera CSV con node_influence, cumulative_influence, frac_external_raw
- Visualizzazione Interattiva: Scatter plot Layer vs Context Position con filtri
- Export Features: Seleziona e scarica features per analisi successive
- Grafici Riassuntivi: Coverage e Strength analysis
Parametri Configurabili
Model & Source Set:
- Model ID (gemma-2-2b, gpt2-small, gemma-2-9b)
- Source Set Name (gemmascope-transcoder-16k, etc.)
- Max Feature Nodes (100-10000)
Thresholds:
- Node Threshold (0.0-1.0, default 0.8)
- Edge Threshold (0.0-1.0, default 0.85)
- Max N Logits (1-50, default 10)
- Desired Logit Probability (0.5-0.99, default 0.95)
Output
- Graph JSON salvato in
output/graph_data/ - CSV metriche statiche in
output/graph_feature_static_metrics.csv - Features selezionate JSON per Node Grouping
Workflow
- Configura parametri (model, thresholds)
- Inserisci prompt da analizzare
- Genera graph (salvato automaticamente)
- Genera CSV metriche statiche
- Visualizza scatter plot e filtra features per cumulative influence
- Esporta features selezionate (formato completo: features + node_ids)
- Scarica JSON/CSV per step successivi
01 - Probe Prompts
Analizza attivazioni su concepts specifici tramite API
Funzionalita
- Caricamento Graph: Da file locale o API Neuronpedia
- Feature Subset: Carica un subset di features o usa tutte
- Generazione Concepts: Automatica via OpenAI o inserimento manuale
- Analisi Attivazioni: Via API Neuronpedia o caricamento JSON pre-calcolato
- Checkpoint & Recovery: Salvataggio automatico progressi, ripresa da interruzioni
- Visualizzazioni: Main chart (Importance vs Activation), grafici colorati per peak token
- Coverage Analysis: Percentuale features attive e coverage dell'importanza causale
Parametri Configurabili
API Keys:
- Neuronpedia API Key (richiesta)
- OpenAI API Key (per generazione concepts)
- Model OpenAI (gpt-4o-mini, gpt-4o, gpt-3.5-turbo)
Analisi:
- Activation Threshold Quantile (0.5-0.99, default 0.9)
- Use Baseline (calcola metriche vs prompt originale)
- Checkpoint Every N Features (5-100, default 10)
Output
- CSV con attivazioni:
output/acts_compared.csv - Checkpoint JSON (salvati automaticamente in
output/checkpoints/) - Grafici interattivi con filtri
Workflow
- Carica Graph JSON (file o API)
- Carica feature subset (o usa tutte le features del grafo)
- Genera/carica concepts (OpenAI, manuale o da file)
- Modifica concepts nella tabella editabile
- Salva concepts come prompts JSON
- Analisi via API:
- Configura parametri (threshold, baseline, checkpoint)
- Esegui analisi (con progress tracking)
- Visualizza risultati (tabella + grafici)
- Scarica CSV filtrati
- Analisi da JSON (alternativa):
- Carica JSON pre-calcolato da Colab
- Visualizza Main Chart (Importance vs Activation)
- Analizza grafico colorato per peak token
- Scarica tabella di verifica dati
Main Chart: Importance vs Activation
Grafico a barre stacked che mostra:
- X-axis: Features ordinate per node_influence (decrescente)
- Y-axis (left): Activation (max_value, escludendo BOS)
- Y-axis (right): node_influence (linea rossa)
- Barre colorate: Per prompt o per peak token
Filtri:
- Top N features (10-100)
- Escludi features con peak su BOS
Tabella di Verifica: Dati grezzi usati per il grafico con metriche dettagliate:
activation_max: Picco massimo di attivazione (esclude BOS)activation_sum: Somma totale attivazioni (esclude BOS)activation_mean: Media attivazioni normalizzatasparsity_ratio: Concentrazione attivazione (0=uniforme, 1=molto sparsa)peak_token_idx: Posizione del picco (>=1, esclude BOS)node_influence: Valore massimo dal CSVcsv_ctx_idx: Contesto token dove node_influence e massima
Coverage Analysis:
- Features Coverage: % features (nel JSON) che si attivano (>0) su almeno un probe prompt
- Importance Coverage: % importanza causale coperta dalle features attive
02 - Node Grouping
Classifica e nomina supernodi per interpretazione del grafo
Funzionalita
- Step 1 - Preparazione: Classifica token (functional vs semantic), trova target tokens
- Step 2 - Classificazione: Assegna classi ai nodi (Semantic, Say X, Relationship)
- Step 3 - Naming: Genera nomi descrittivi per ogni supernodo
- Parametri Configurabili: Modifica soglie in tempo reale
- Gestione Soglie: Salva/carica preset di soglie
- Spiegazione Classificazione: Tool interattivo per capire perche una feature e stata classificata
- Upload Neuronpedia: Carica subgraph con supernodes per visualizzazione interattiva
Input Richiesti
Obbligatori:
- CSV Export da Probe Prompts (es.
*_export_ENRICHED.csv)
Opzionali:
- JSON Attivazioni (migliora naming per Relationship)
- Graph JSON (per csv_ctx_idx fallback in Semantic naming)
- Selected Nodes JSON (per upload subgraph accurato)
Parametri Configurabili
Pipeline:
- Finestra ricerca target (3-15, default 7)
Dictionary Semantic:
- Peak Consistency min (0.5-1.0, default 0.8)
- N Distinct Peaks max (1-5, default 1)
Say X:
- Func vs Sem % min (0-100%, default 50%)
- Confidence F min (0.5-1.0, default 0.9)
- Layer min (0-30, default 7)
Relationship:
- Sparsity max (0.0-1.0, default 0.45)
Semantic (Concept):
- Layer max (0-10, default 3)
- Confidence S min (0.0-1.0, default 0.5)
- Func vs Sem % max (0-100%, default 50%)
Output
- CSV completo con classificazione e naming
- Summary JSON con statistiche e parametri usati
- Upload su Neuronpedia (opzionale)
Workflow
Step 1: Preparazione
- Carica CSV Export (automatico o upload)
- (Opzionale) Carica JSON Attivazioni
- Esegui Step 1
- Verifica statistiche (token funzionali vs semantici)
- Esamina campione risultati
Step 2: Classificazione
- (Opzionale) Modifica soglie nella sidebar
- Esegui Step 2
- Verifica distribuzione classi
- Filtra per classe e esamina risultati
- Usa "Spiega Classificazione Feature" per capire le decisioni
- (Opzionale) Itera modificando soglie
Step 3: Naming
- Esegui Step 3
- Verifica esempi naming per classe
- Analizza raggruppamento per supernode_name
- Download CSV completo e Summary JSON
Upload Neuronpedia:
- Inserisci API Key
- Configura Display Name
- (Opzionale) Overwrite ID per aggiornare subgraph esistente
- Upload e visualizza su Neuronpedia
Classi di Supernodi
Semantic (Dictionary):
- Si attiva sempre sullo stesso token specifico
- Metriche: peak_consistency alta (>=0.8), n_distinct_peaks = 1
- Naming: Nome del token (es. "Texas")
Semantic (Concept):
- Si attiva su token semanticamente simili
- Metriche: conf_S alta (>=0.5), layer medio-basso
- Naming: Token con max activation (es. "city")
Say "X":
- Si attiva su token funzionali per predire il prossimo token
- Metriche: func_vs_sem alta (>=50%), conf_F alta (>=0.9), layer alto (>=7)
- Naming: "Say (X)" dove X e il target_token (es. "Say (Austin)")
Relationship:
- Collega concetti semantici multipli con attivazione diffusa
- Metriche: sparsity bassa (<0.45), K_sem_distinct alto
- Naming: "(X) related" dove X e il primo token semantico con max attivazione
Metriche Chiave
peak_consistency_main: Quanto spesso il token principale e peak quando apparen_distinct_peaks: Numero di token distinti come peakfunc_vs_sem_pct: Differenza % tra max activation su functional vs semanticconf_F / conf_S: Frazione di peak su token funzionali/semanticisparsity_median: Mediana sparsity (0=diffusa, 1=concentrata)K_sem_distinct: Numero di token semantici distinti
Struttura Dati
File Input
Graph JSON (da Graph Generation):
{
"metadata": {
"scan": "gemma-2-2b",
"prompt": "The capital of state containing Dallas is",
"prompt_tokens": [...]
},
"nodes": [
{
"node_id": "24_79427_7",
"feature_type": "cross layer transcoder",
"layer": 24,
"activation": 0.123,
"influence": 0.0042,
"ctx_idx": 7
}
],
"links": [...]
}
CSV Export ENRICHED (da Probe Prompts):
feature_key,layer,prompt,peak_token,peak_token_idx,activation_max,sparsity_ratio,node_influence,...
24_79427,24,"entity: The capital city of Texas is Austin",Austin,7,12.34,0.85,0.0042,...
JSON Attivazioni (da batch_get_activations.py):
{
"model": "gemma-2-2b",
"source_set": "clt-hp",
"results": [
{
"probe_id": "p1",
"prompt": "...",
"tokens": ["<BOS>", "The", "capital", ...],
"activations": [
{
"source": "24-clt-hp",
"index": 79427,
"values": [0.0, 0.5, 12.34, ...],
"max_value": 12.34,
"max_value_index": 7
}
]
}
]
}
File Output
CSV Metriche Statiche (Graph Generation):
layer,id,ctx_idx,activation,node_influence,cumulative_influence,frac_external_raw
24,79427,7,12.34,0.0042,0.0056,0.23
Selected Features JSON (Graph Generation, formato completo):
{
"features": [
{"layer": 24, "index": 79427},
{"layer": 12, "index": 5432}
],
"node_ids": [
"24_79427_7",
"12_5432_3"
],
"metadata": {
"n_features": 2,
"n_nodes": 2,
"cumulative_threshold": 0.95,
"exported_at": "2025-10-25T12:00:00"
}
}
Acts Compared CSV (Probe Prompts):
feature_key,label,category,layer,activation_max,z_score,picco_su_label,cosine_similarity,...
24_79427,Austin,entity,24,12.34,2.5,True,0.85,...
Node Grouping CSV (Node Grouping):
feature_key,layer,prompt,pred_label,subtype,supernode_name,peak_token,activation_max,...
24_79427,24,"...",Semantic,Dictionary,Austin,Austin,12.34,...
Node Grouping Summary JSON:
{
"timestamp": "2025-10-25T12:00:00",
"n_features": 150,
"n_unique_names": 45,
"class_distribution": {
"Semantic": 120,
"Relationship": 20,
"Say \"X\"": 10
},
"thresholds_used": {...},
"top_supernodes": [...]
}
Workflow Completo
Pipeline Standard
1. Graph Generation
β
- Graph JSON
- CSV metriche statiche
- Selected Features JSON
β
2. Probe Prompts
β
- Genera/carica concepts
- Analizza attivazioni (API o JSON)
- Acts Compared CSV
β
3. Node Grouping
β
- Classifica nodi
- Nomina supernodi
- Upload su Neuronpedia (opzionale)
Esempio Pratico
Obiettivo: Analizzare come il modello predice "Austin" nel prompt "The capital of state containing Dallas is"
Graph Generation:
- Prompt: "The capital of state containing Dallas is"
- Genera graph su Neuronpedia
- Estrai CSV metriche con node_influence
- Filtra features per cumulative_influence <= 0.95
- Esporta Selected Features JSON (50 features)
Probe Prompts:
- Carica Graph JSON + Selected Features JSON
- Genera concepts con OpenAI (Dallas, Austin, Texas, capital, state)
- Esegui analisi API (checkpoint ogni 10 features)
- Visualizza Main Chart: feature ordinate per node_influence
- Scarica Acts Compared CSV
Node Grouping:
- Carica Acts Compared CSV + JSON Attivazioni
- Step 1: Classifica token (functional: "is", "the" / semantic: "Dallas", "Austin")
- Step 2: Classifica features (90% Semantic, 10% Relationship)
- Step 3: Nomina supernodi ("Austin", "Dallas", "Texas", "(state) related", etc.)
- Upload su Neuronpedia per visualizzazione
Troubleshooting
Problemi Comuni
"API Key non trovata"
- Soluzione: Crea file
.envcon le chiavi API
"Dati essenziali mancanti"
- Soluzione: Esegui la pipeline completa in ordine (Graph Generation β Probe Prompts β Node Grouping)
"Grafo causale non disponibile"
- Soluzione: Genera Graph JSON in Step 00, poi genera CSV metriche statiche
"ModuleNotFoundError: eda"
- Soluzione: Avvia da root del progetto:
streamlit run eda/app.py
"Checkpoint corrotto"
- Soluzione: Elimina checkpoint in
output/checkpoints/e riavvia analisi
"Naming Relationship non accurato"
- Soluzione: Fornisci JSON attivazioni completo in Node Grouping
"Classificazione non soddisfacente"
- Soluzione: Modifica soglie in Node Grouping sidebar e riesegui Step 2
Cache Streamlit
Se i dati sembrano obsoleti:
- Menu hamburger (top-right) > Clear cache
- Oppure Settings > Clear cache
- Riavvia l'app
Best Practices
Graph Generation
- Inizia con thresholds di default, poi affina
- Usa filtro cumulative_influence per selezionare features rilevanti
- Esporta sempre Selected Features JSON (formato completo con node_ids) per Node Grouping
Probe Prompts
- Usa checkpoint per analisi lunghe (>100 features)
- Abilita baseline per confronti robusti
- Carica JSON pre-calcolato da Colab per analisi veloci
- Filtra features con peak su BOS per grafici piu puliti
- Usa tabella di verifica per debug e quality check
Node Grouping
- Fornisci sempre JSON attivazioni per naming Relationship accurato
- Inizia con soglie di default, poi itera su Step 2-3
- Usa "Spiega Classificazione Feature" per capire decisioni
- Scarica Summary JSON per documentare parametri usati
- Carica Selected Nodes JSON per upload Neuronpedia accurato
Performance
Caricamento:
- Prima apertura app: < 10 secondi
- Cambio pagina: < 2 secondi
Cache:
- Dati caricati con
@st.cache_data - Grafici renderizzati on-demand
Limiti:
- Graph Generation: max 10000 feature nodes
- Probe Prompts: rate limit API 5 req/sec
- Node Grouping: gestisce dataset fino a 1000 features
Dipendenze
Core:
- streamlit >= 1.28
- plotly >= 5.18
- pandas >= 2.0
- numpy >= 1.24
API:
- requests >= 2.31
- openai >= 1.0
- python-dotenv >= 1.0
Visualization:
- seaborn >= 0.12
- matplotlib >= 3.7
Optional:
- scipy (per test statistici in Causal Validation)
- scikit-learn (per ROC curves)
Riferimenti
Documentazione Tecnica
- Graph Generation:
scripts/00_neuronpedia_graph_generation.py - Probe Prompts:
scripts/01_probe_prompts.py - Node Grouping:
scripts/02_node_grouping.py - Causal Utils:
scripts/causal_utils.py
Guide
- Quick Start:
QUICK_START_STREAMLIT.md - Neuronpedia Export:
docs/NEURONPEDIA_EXPORT_GUIDE.md - Probe Prompts:
docs/PROBE_PROMPTS_QUICKSTART.md - Node Grouping:
eda/pages/README_NODE_GROUPING.md
Utilities
- Graph Visualization:
eda/utils/graph_visualization.py - Data Loader:
eda/utils/data_loader.py - Plots:
eda/utils/plots.py
Sviluppo
Struttura Codice
eda/
βββ app.py # Entry point
βββ pages/ # Pagine Streamlit
β βββ 00_Graph_Generation.py
β βββ 01_Probe_Prompts.py
β βββ 02_Node_Grouping.py
β βββ README_NODE_GROUPING.md
βββ utils/ # Utilities
β βββ graph_visualization.py
βββ README.md # Questa guida
Modifiche
Per modificare l'app:
- Modifica file in
eda/ - Streamlit rileva automaticamente cambiamenti
- Testa con dati reali da
output/
Supporto
Per domande o problemi:
- Consulta questa guida
- Leggi la documentazione tecnica in
docs/ - Esamina gli script di backend in
scripts/ - Controlla i test in
tests/
Autore: Sistema automatizzato
Licenza: Vedi LICENSE
Repository: attribution-graph-probing
Buon lavoro con Attribution Graph Probing! π¬ππ