Qwen 1.7B Averaged J-Lens
The intent of this exercise is to ask whether a small open model contains human-readable internal concepts before it produces its final answer. Instead of only looking at the final output token, we probe intermediate hidden states and ask: where inside the model do concepts such as unsafe, sugar, spider, eight, or 7 become readable?
Background: Global Workspace Theory
Global Workspace Theory is a theory from cognitive science about how information becomes broadly available inside a mind. A rough analogy: many specialized systems may work in parallel, but some information gets written onto a shared "workspace" where it can be used by memory, speech, planning, and action. Information in that workspace is not just hidden processing; it is available for flexible use and report.
Anthropic's paper asks whether language models show something similar. Their question is not whether a model is conscious. The narrower technical question is: do models form internal representations that are both useful for computation and readable as ordinary words? If a model is solving a problem about a spider, can we see an internal spider representation before the final answer? If it computes that spiders have eight legs, can eight or 8 become visible inside the network before the output?
What Anthropic Did
This experiment is inspired by Anthropic's Transformer Circuits paper "Verbalizable Representations Form a Global Workspace in Language Models". Anthropic studied Claude models and used J-lens style readouts to identify words whose future-output influence is visible across model layers and token positions.
In simple terms, they did three things: first, they built a way to decode internal model states into reportable words; second, they checked where those words appeared while the model solved tasks; third, they intervened on those internal representations to test whether they affected the model's behavior. Their examples show concepts like hidden task progress, intermediate entities, and final answers becoming readable before generation.
Our report tries a smaller open-model version of that idea on Qwen 1.7B. The goal is not to prove the same result at Claude scale. The goal is to see whether the same kind of internal readable workspace can be detected in a smaller model with a practical local approximation.
Experiment Design
We ran Qwen 1.7B on small reasoning and classification prompts, then decoded selected internal layers using averaged concept-token Jacobian vectors. In plain terms, for each concept word we asked: if the model were pushed toward saying this word later, what hidden-state direction would matter? We averaged those directions over calibration prompts, then searched held-out activations for sparse combinations of these concepts.
| Part | What it means |
|---|---|
| Calibration corpus | 21 prompts covering unsafe code, missing ingredients, entity ordering, spider legs, counting, arithmetic, and progress words. |
| Concept vocabulary | 173 token variants for reportable concepts such as unsafe, risk, sugar, Carol, spider, eight, 7, and done. |
| Layers probed | Layers 12, 16, 20, 24, and 27 of Qwen 1.7B. |
| Position maps | Every token position is decoded, not just the final token. This matters because concepts often live near the words or subproblem that created them. |
| Causal checks | We add or subtract selected concept directions and measure whether target logits move in the expected direction. |
What this tests: whether Qwen 1.7B has a small "workspace-like" set of verbalizable internal states for these tasks. The strongest evidence would be a concept becoming readable across positions/layers and moving the model's output when intervened on.
Findings In Plain English
Think of the model as doing work in stages. We are asking whether some answers are already "visible in its notes" before it speaks. The answer is: sometimes yes, but not for every kind of reasoning.
| Task | What we found | Layman explanation |
|---|---|---|
| Unsafe code | unsafe, input, and command become readable inside the model. | The model appears to notice that os.system(user_input) is dangerous before producing the final answer. This is the clearest result. |
| Recipe missing items | eggs, sugar, flour, butter, and missing appear near their relevant token positions. | The model is tracking ingredients. Earlier probes missed sugar; the fuller position-based J-lens now recovers it. |
| Spider legs | spider, eight, and 8 appear in later layers. | The model links "animal that spins webs" to "spider", and then to the answer "8 legs". This most closely matches the Anthropic-style hidden concept example. |
| Silent arithmetic | 7 appears around the arithmetic expression positions for 3^2 - 2. | The model has some internal trace of the computed result even though the prompt asks it to copy text. |
| Counting | count and five are readable; the whole sequence is less clean. | The model understands the counting task and endpoint, but this probe does not show a perfectly ordered internal count. |
| Age ordering | Alice, Bob, Carol, and older appear, but youngest = Carol is not cleanly isolated. | The model represents the names and relation words, but this experiment does not prove it formed a clean final relational answer internally. |
Main takeaway: this small Qwen model does have readable internal concepts for some tasks, especially direct labels and concrete facts. The readout is weaker for relational reasoning. So the result supports the general idea from Anthropic's paper, but at smaller scale and with noisier evidence.
Causal Checks
Interventions add or subtract the averaged concept vector at the strongest decoded position. Positive and negative deltas mostly move target logits in the expected direction, but the effects are small. This supports weak causal involvement, not a strong steering result.
Code Safety
Concept Strength By Layer
Position / Layer Maps
Strongest Components
| Layer | Strongest all-position components |
|---|---|
| 12 | unsafe@p12 ` safe` 0.151, unsafe@p14 ` unsafe` 0.149, input@p22 `_input` 0.143, input@p10 ` it` 0.126, input@p3 `Read` 0.117, input@p5 ` code` 0.115, command@p20 `.system` 0.113, input@p21 `(user` 0.109, input@p6 ` and` 0.107, input@p13 ` or` 0.106 |
| 16 | unsafe@p14 ` unsafe` 0.175, unsafe@p12 ` safe` 0.170, input@p22 `_input` 0.155, input@p10 ` it` 0.126, input@p21 `(user` 0.124, input@p5 ` code` 0.119, command@p20 `.system` 0.118, input@p6 ` and` 0.115, input@p3 `Read` 0.114, input@p19 `os` 0.109 |
| 20 | unsafe@p13 ` or` 0.156, input@p22 `_input` 0.147, safe@p12 ` safe` 0.143, input@p21 `(user` 0.133, unsafe@p14 ` unsafe` 0.128, answer@p8 ` only` 0.115, answer@p6 ` and` 0.112, one@p2 `\n` 0.108, one@p7 ` say` 0.104, one@p9 ` whether` 0.102 |
| 24 | input@p21 `(user` 0.155, unsafe@p13 ` or` 0.139, answer@p6 ` and` 0.105, one@p8 ` only` 0.096, compute@p2 `\n` 0.091, command@p20 `.system` 0.087, one@p7 ` say` 0.083, one@p9 ` whether` 0.077, unsafe@p32 `\n\n` 0.073, count@p18 `\n` 0.072 |
| 27 | dangerous@p13 ` or` 0.151, answer@p6 ` and` 0.128, one@p8 ` only` 0.126, unsafe@p32 `\n\n` 0.126, input@p21 `(user` 0.126, two@p3 `Read` 0.115, one@p9 ` whether` 0.114, two@p7 ` say` 0.113, safe@p11 ` is` 0.113, input@p4 ` this` 0.109 |
Missing Ingredients
Concept Strength By Layer
Position / Layer Maps
Strongest Components
| Layer | Strongest all-position components |
|---|---|
| 12 | recipe@p4 ` recipe` 0.186, sugar@p10 ` sugar` 0.172, eggs@p6 ` eggs` 0.169, flour@p18 ` flour` 0.165, flour@p8 ` flour` 0.147, pantry@p16 ` pantry` 0.136, butter@p13 ` butter` 0.126, missing@p24 ` missing` 0.115, finished@p29 `assistant` 0.100, input@p15 ` The` 0.098 |
| 16 | recipe@p4 ` recipe` 0.183, eggs@p6 ` eggs` 0.154, pantry@p16 ` pantry` 0.147, flour@p18 ` flour` 0.132, sugar@p10 ` sugar` 0.128, flour@p8 ` flour` 0.128, missing@p24 ` missing` 0.124, butter@p20 ` butter` 0.123, butter@p13 ` butter` 0.117, done@p29 `assistant` 0.105 |
| 20 | recipe@p4 ` recipe` 0.189, sugar@p10 ` sugar` 0.182, pantry@p16 ` pantry` 0.175, flour@p18 ` flour` 0.163, flour@p8 ` flour` 0.158, 6@p17 ` has` 0.151, butter@p13 ` butter` 0.148, 6@p5 ` needs` 0.143, eggs@p6 ` eggs` 0.141, butter@p20 ` butter` 0.140 |
| 24 | sugar@p10 ` sugar` 0.147, sugar@p9 `,` 0.145, flour@p7 `,` 0.133, butter@p19 ` and` 0.124, butter@p12 ` and` 0.123, butter@p11 `,` 0.123, flour@p8 ` flour` 0.115, flour@p18 ` flour` 0.114, 7@p5 ` needs` 0.113, one@p14 `.` 0.106 |
| 27 | butter@p19 ` and` 0.178, sugar@p9 `,` 0.161, butter@p11 `,` 0.151, butter@p12 ` and` 0.151, flour@p7 `,` 0.146, sugar@p19 ` and` 0.143, recipe@p15 ` The` 0.137, eggs@p17 ` has` 0.136, three@p17 ` has` 0.135, two@p19 ` and` 0.131 |
Age Ordering
Concept Strength By Layer
Position / Layer Maps
Strongest Components
| Layer | Strongest all-position components |
|---|---|
| 12 | Alice@p3 `Alice` 0.176, Alice@p4 ` is` 0.139, Bob@p7 ` Bob` 0.137, youngest@p17 ` youngest` 0.113, Bob@p9 ` Bob` 0.113, finished@p22 `assistant` 0.102, older@p5 ` older` 0.099, Carol@p13 ` Carol` 0.098, input@p2 `\n` 0.083, oldest@p11 ` older` 0.074 |
| 16 | Alice@p3 `Alice` 0.197, Alice@p4 ` is` 0.161, older@p5 ` older` 0.134, Bob@p7 ` Bob` 0.117, youngest@p17 ` youngest` 0.116, Bob@p9 ` Bob` 0.115, Carol@p13 ` Carol` 0.110, Alice@p8 `.` 0.108, older@p11 ` older` 0.101, done@p22 `assistant` 0.100 |
| 20 | Alice@p3 `Alice` 0.183, older@p5 ` older` 0.161, Carol@p13 ` Carol` 0.160, younger@p11 ` older` 0.159, younger@p10 ` is` 0.158, Bob@p7 ` Bob` 0.150, Bob@p9 ` Bob` 0.146, answer@p18 `?` 0.123, youngest@p17 ` youngest` 0.117, Alice@p12 ` than` 0.111 |
| 24 | Bob@p6 ` than` 0.199, Bob@p8 `.` 0.195, Bob@p12 ` than` 0.153, younger@p10 ` is` 0.138, Alice@p14 `.` 0.138, older@p16 ` is` 0.107, Carol@p12 ` than` 0.106, compute@p2 `\n` 0.091, Carol@p14 `.` 0.087, answer@p18 `?` 0.080 |
| 27 | older@p16 ` is` 0.179, older@p10 ` is` 0.170, Bob@p6 ` than` 0.169, Bob@p8 `.` 0.164, Carol@p12 ` than` 0.161, Carol@p14 `.` 0.156, two@p10 ` is` 0.138, Alice@p16 ` is` 0.128, Alice@p14 `.` 0.122, two@p11 ` older` 0.115 |
Spider Legs
Concept Strength By Layer
Position / Layer Maps
Strongest Components
| Layer | Strongest all-position components |
|---|---|
| 12 | legs@p6 ` legs` 0.158, eggs@p12 ` webs` 0.127, animal@p9 ` animal` 0.119, finished@p17 `assistant` 0.103, input@p5 ` of` 0.093, ant@p3 `The` 0.093, legs@p8 ` the` 0.090, one@p7 ` on` 0.089, one@p6 ` legs` 0.084, input@p2 `\n` 0.083 |
| 16 | animal@p9 ` animal` 0.156, legs@p6 ` legs` 0.139, web@p12 ` webs` 0.115, one@p7 ` on` 0.109, 6@p4 ` number` 0.105, count@p5 ` of` 0.104, one@p10 ` that` 0.101, done@p17 `assistant` 0.097, input@p2 `\n` 0.095, one@p8 ` the` 0.095 |
| 20 | animal@p9 ` animal` 0.146, web@p12 ` webs` 0.141, 6@p4 ` number` 0.134, 6@p13 ` is` 0.126, one@p2 `\n` 0.108, three@p5 ` of` 0.108, legs@p6 ` legs` 0.108, one@p10 ` that` 0.107, answer@p15 `\n` 0.106, two@p3 `The` 0.097 |
| 24 | animal@p9 ` animal` 0.115, 6@p4 ` number` 0.103, one@p13 ` is` 0.095, compute@p2 `\n` 0.091, web@p12 ` webs` 0.084, 6@p13 ` is` 0.070, three@p5 ` of` 0.068, Bob@p10 ` that` 0.067, legs@p6 ` legs` 0.066, one@p7 ` on` 0.064 |
| 27 | two@p7 ` on` 0.129, three@p13 ` is` 0.127, one@p22 `\n\n` 0.120, three@p11 ` spins` 0.117, two@p8 ` the` 0.113, two@p3 `The` 0.112, three@p5 ` of` 0.111, three@p4 ` number` 0.108, Bob@p10 ` that` 0.106, three@p12 ` webs` 0.105 |
Silent Arithmetic While Copying
Concept Strength By Layer
Position / Layer Maps
Strongest Components
| Layer | Strongest all-position components |
|---|---|
| 12 | flour@p21 `3` 0.110, finished@p31 `assistant` 0.101, input@p4 ` copying` 0.095, input@p5 ` this` 0.095, input@p2 `\n` 0.083, compute@p19 ` compute` 0.083, missing@p7 ` exactly` 0.082, input@p29 `\n` 0.081, missing@p6 ` sentence` 0.078, missing@p3 `While` 0.077 |
| 16 | compute@p19 ` compute` 0.112, 6@p24 ` -` 0.104, 6@p22 `^` 0.103, three@p21 `3` 0.103, input@p5 ` this` 0.103, count@p31 `assistant` 0.100, input@p2 `\n` 0.095, 6@p26 `2` 0.095, count@p25 ` ` 0.094, one@p3 `While` 0.093 |
| 20 | 6@p24 ` -` 0.150, 6@p22 `^` 0.147, compute@p19 ` compute` 0.128, 6@p21 `3` 0.126, one@p5 ` this` 0.118, 7@p26 `2` 0.112, compute@p27 `.` 0.109, one@p2 `\n` 0.108, three@p12 ` above` 0.106, 6@p20 ` ` 0.106 |
| 24 | 6@p22 `^` 0.164, 7@p24 ` -` 0.151, 7@p26 `2` 0.110, 7@p23 `2` 0.104, 7@p25 ` ` 0.098, 6@p21 `3` 0.098, compute@p2 `\n` 0.091, 7@p27 `.` 0.078, 7@p20 ` ` 0.076, one@p7 ` exactly` 0.075 |
| 27 | 7@p25 ` ` 0.214, 7@p22 `^` 0.149, 7@p20 ` ` 0.138, 7@p24 ` -` 0.127, 7@p27 `.` 0.127, 7@p21 `3` 0.121, compute@p27 `.` 0.120, 7@p23 `2` 0.118, 7@p26 `2` 0.117, one@p12 ` above` 0.109 |
Counting / Introspection
Concept Strength By Layer
Position / Layer Maps
Strongest Components
| Layer | Strongest all-position components |
|---|---|
| 12 | count@p3 `Count` 0.134, count@p4 ` to` 0.103, five@p5 ` five` 0.089, finished@p14 `assistant` 0.087, input@p2 `\n` 0.083, count@p6 ` and` 0.080, finished@p7 ` intros` 0.074, done@p11 `<|im_end|>` 0.070, count@p9 ` deeply` 0.064, finished@p4 ` to` 0.063 |
| 16 | count@p3 `Count` 0.137, five@p5 ` five` 0.120, count@p4 ` to` 0.112, input@p2 `\n` 0.095, count@p6 ` and` 0.095, count@p14 `assistant` 0.093, answer@p10 `.` 0.085, answer@p8 `pect` 0.078, answer@p9 ` deeply` 0.077, count@p7 ` intros` 0.076 |
| 20 | count@p3 `Count` 0.159, 6@p4 ` to` 0.130, five@p6 ` and` 0.120, five@p5 ` five` 0.118, one@p2 `\n` 0.108, count@p4 ` to` 0.090, two@p7 ` intros` 0.087, two@p10 `.` 0.087, count@p6 ` and` 0.076, two@p8 `pect` 0.075 |
| 24 | count@p19 `\n\n` 0.116, five@p4 ` to` 0.093, compute@p2 `\n` 0.091, count@p10 `.` 0.077, five@p5 ` five` 0.076, one@p9 ` deeply` 0.074, count@p6 ` and` 0.071, 9@p4 ` to` 0.063, two@p2 `\n` 0.060, one@p8 `pect` 0.059 |
| 27 | count@p19 `\n\n` 0.166, five@p4 ` to` 0.128, five@p6 ` and` 0.113, count@p6 ` and` 0.109, one@p10 `.` 0.105, one@p4 ` to` 0.100, five@p3 `Count` 0.099, count@p10 `.` 0.098, one@p9 ` deeply` 0.096, two@p2 `\n` 0.096 |
Bottom Line
The fuller J-lens now matches the paper's qualitative idea better: readable concepts are distributed across positions and become clearer when decoded with averaged Jacobian vectors. The best cases are unsafe-code classification, recipe ingredient tracking, spider-to-eight reasoning, and arithmetic result 7. Age ordering remains weak: the model exposes names and relational words, but not a clean youngest = Carol workspace state.
Compared with Anthropic's full experiment, this is still a local reproduction on a much smaller open model. Anthropic studies Claude-scale models and uses broader J-space coverage, more extensive calibration, and stronger causal validation. This report should therefore be read as a faithful small-model approximation of the idea, not as a claim that Qwen 1.7B has the same global workspace structure as Claude.
Reference: Anthropic Transformer Circuits, "Verbalizable Representations Form a Global Workspace in Language Models".