Spaces:
Running
Running
fix: cpu-basic + gradio5 pin + module-level demo + ungated default + no import-time cuda
afbece7 verified | title: Bertographer | |
| emoji: 🔭 | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: gradio | |
| sdk_version: 5.50.0 | |
| app_file: app.py | |
| pinned: false | |
| license: mit | |
| short_description: Mechanistic-interpretability cockpit for encoder models | |
| # Bertographer | |
| A mechanistic-interpretability **cockpit for encoder *classifiers*** (BERT / | |
| RoBERTa / DeBERTa / DistilBERT / ELECTRA), framed in **production-observability** | |
| language rather than lab notation. | |
| Where a decoder probe reads a model's next-token futures, Bertographer reads an | |
| encoder's **decision**: for every layer and attention head it projects the | |
| pooling token's register into two spaces — | |
| - **vocab** (logit-lens via the tied word embeddings) — what token this register "says" | |
| - **class** (the model's own classification head) — which label this head votes for | |
| …and lets an operator intervene (**mute / scale a head**) and watch the | |
| prediction move. The framing is the engine room, not the notebook: | |
| - input = a **trace** · the layer stack = the **waterfall** · heads = **spans / voters** | |
| - mute / scale = the **counterfactual** ("what if the model hadn't seen this evidence?") | |
| - compare = a **trace‑vs‑trace diff** ("what differed between this request and the last?") | |
| Default model: `cardiffnlp/twitter-roberta-base-sentiment-latest` (3‑class | |
| sentiment). Architecture is auto‑discovered; per‑head views degrade gracefully | |
| when a model's attention output isn't a clean per‑head concatenation. | |
| --- | |
| Built by **James J. Davison**, with Claude (Anthropic) as coding collaborator. **Responsibility for the code and its design choices rests with the human author.** MIT licensed. © 2026 James J. Davison. | |