Discovering the geometry of emotions

BuildingA map of emotion inside a language model — a polar readout plus a steering dial
ModelsQwen3-32B (subject) · LLM blind judge · shuffled-label / word-mention controls
TopicsLanguage models · Neural geometry · Steering
Try it yourself. Open the finished run in your own workspace and pick up where it leaves off.

In A Geometric Calculator Inside a Neural Network, a language model was shown to represent numbers as circles in its activation space. Concepts inside a model are not scattered at random. They sit on hidden geometric structures that can be mapped. But a shape that can be seen can mislead: collapsing a high-dimensional representation onto two axes lets the projection itself conjure a circle that was never really there. The real test is causal: steer the model along the structure and check whether its behavior actually moves.

This cookbook first discovers the geometry of emotions: a ring in Qwen3-32B's activations where angle is the feeling and the distance from center is its strength. It then runs the causal test, steering the model around the ring and straight across its hollow middle to see what it actually writes. Finally it pushes the readout until it breaks: the readout works on every voice the model writes in, including styles it was never shown, and then fails, sharply, on text written by people. Taken together, the steps are a method for verifying representational geometry: not drawing a shape and trusting it, but showing that it is real, that it is causal, and where it stops holding.

What this recipe covers:

Does emotion have a shape?

Silico is a great tool for exploration, and the initial prompt can simply be driven by general curiosity: "what's an interesting ambitious neural geometry project we can work on?"

Rather than jump straight to a design, the workflow first looked around. It fanned out background research on three fronts at once: prior attempts at emotion geometry inside LLM activations, psychology datasets with ground-truth emotion norms to anchor against, and open-weight models large enough to be interesting yet still readable from the inside. Narrowing to something runnable settled three choices together: a construct with known human structure (the affective circumplex: pleasantness × activation, one of psychology's most replicated patterns), a readable open-weights subject (Qwen3-32B), and what would make a positive result mean something rather than just look pretty.

That last choice named the confound before a single GPU spun up. A naive version would build stimuli that mention emotions and then "discover" the model clusters them, which only measures vocabulary. So the design added two guards:

Finding the ring

The run fed each vignette through Qwen3-32B, recorded the activation stream, and projected the sixteen emotion bins onto their best two-dimensional view. The points trace a closed loop — and the order around the loop is the psychologists' order: pleasant on one side, unpleasant opposite, calm and activated forming the other axis.

Each point below reveals its vignette on hover, and a toggle drops in the word-mention controls.

The emotion ring (Qwen3-32B, layer 62 of 64). Synthetic vignettes colored by the circumplex angle each conveys; the smooth curve is the fitted ring. Toggle + word-mention controls: texts that name emotions without expressing them collapse toward the middle and read out at chance — the representation tracks feeling, not vocabulary.

A scatter plot can mislead, so the run measured rather than eyeballed, and this is where the baseline matters. The loop test (persistent homology, which scores how confidently a cloud contains a loop) gives the emotion bins 13.0; the same data with shuffled labels scores only 5.8 at its 99th percentile — permutation p ≈ 0.001. And a linear readout fitted on part of the data recovers the intended emotion angle of held-out vignettes to a mean error of 40°, where guessing scores 90°. The confound check lands exactly where it should: on the word-mention controls, that same readout falls to 84.5° — statistically chance. The ring tracks expressed feeling and ignores the words.

From correlation to cause

A ring the run can only read is a correlation. The sharper question is causal: does the model actually use this ring when it writes? Nudging the activation stream along the ring while the model generates steers the emotion of its output close to wherever it is aimed on the circle, on average within 27.7° of the target. Since the sixteen feelings sit about 22° apart, that is roughly one neighbor away, and a random push of the same strength lands nearly three times off. The writing stays fluent throughout.

The empty center matters too. To move between two opposite feelings, the model can go around the rim through the in-between emotions, or cut straight across the hollow middle. The rim route keeps the feeling vivid the whole way. The chord across the center comes out flat, almost unsteered. So the ring behaves like a polar-coordinate map: the angle says which feeling, the distance from center says how strongly. The reader can drive both routes in the next section.

The next question is reach. The same readout, fit on five writing styles and then pointed at two it had never seen (letters and social posts), decodes the new styles about as well as the familiar ones. The geometry behind that is the surprise. Throw all the styles together and the ring seems to disappear, yet the readout keeps working. Each style, it turns out, carries its own copy of the ring, parked at a different spot in the activation space. Pooled, the copies smear into a blob. Line each style up on its own center and a single clean ring snaps back. The readout works because it locks onto the one direction every copy shares and ignores where each one sits.

Five parallel rings, one pair of glasses (layer 48). Drag the toggle. Raw (pooled): each style sits at its own offset and the loop is gone (p = 0.62). Center by style: the copies collapse onto the single ring every readout actually uses (p = 0.001).

Then the run found the edge, the one place the readout fails. Pointed at human-written accounts of real emotional moments, it falls apart, reading them at essentially zero. This is not the readout being too narrow: the version trained across many styles, the same one that generalized so well to the model's own writing, barely moves on human text. Every voice the model writes in shares the one ring. Human writing, so far, sits somewhere the map does not reach.

Putting it all together

The polar-coordinate claim is easiest to grasp by driving it directly: the model's own recorded generations along both routes, side by side.

The explorer below moves a marker along either route, around the ring or straight across, surfacing the model's actual text at each waypoint. The intensity strip flattens as the path crosses the dead center.

The trajectory explorer. Every text is a verbatim recorded generation; the intensity strip shows the blind judge's 0–4 score at each waypoint. Around the ring, the model stays expressive through the middle; straight across, it goes silent — same start, same end.

Finding a geometry like this one

The specific result is Qwen3-32B's emotion ring, and it buys two concrete things: a dial that moves the model's writing by feeling and intensity, and a probe that reads feeling back out of any style the model itself writes in. The more transferable prize is the loop that found them. It applies to any construct a model might represent, and it runs in six steps.

  1. Pick a construct that might have a shape. Choose something with a known or guessable low-dimensional structure: affect, sentiment, formality, time, direction. The more prior structure there is to predict, the sharper the eventual test.
  2. Express it without naming it, and build a control that does the opposite. Write stimuli that convey the construct through content alone, paired with controls that name it without expressing it. The gap between the two is what separates the concept from its vocabulary.
  3. Read the activations and look. Run the stimuli through the model, collect the activation stream layer by layer, project it to its clearest low-dimensional view, and see whether structure appears.
  4. Measure against a null, do not trust the picture. A scatter can look like anything. Compare the apparent structure to the same data with shuffled labels before believing it is real.
  5. Turn correlation into cause. Push the activations along the structure during generation and check that the output moves the way the geometry predicts. A pattern the model does not use is only a correlation.
  6. Push until it breaks. Test how far one readout generalizes, then find the case where it fails. The break is not a defect in the method. It is the next question, the way human text became the open question here.

This pays off when a behavioral proxy would be expensive or circular, because it reads the structure directly instead of inferring it from outputs. It needs activation access and a construct with real structure to find. When there is no reason to expect low-dimensional structure, or the signal cannot be separated from a confounding surface feature, a simpler behavioral measure will say more for less. And the findings carry the usual caveats: one model, one judge family, so the recipe travels more reliably than the exact numbers.

The larger point is that a model trained only to predict text reconstructed, unprompted, a map that psychology spent decades drawing from the outside. Once the map is visible, the model stops being a black box and becomes an instrument that can be read and turned.