How are emotions represented in large language models?

A study with Gemma 4 31B

Valence Arousal Dominance Story length, the confound we had to rule out Grey backdrop: how much of the total spread this axis accounts for
Source: notebooks/02_circumplex_geometry.ipynb, layer 33. Figure 6 redraws these two, with a control to switch between them.
How to read this

Each group of bars is one axis found by sorting the 171 emotion vectors by what separates them most. The grey backdrop is how much of that separation the axis accounts for. The four coloured bars are how closely the axis matches four published human ratings of the same emotion words: valence, arousal, dominance, and the story's length as a control. No human rating enters the sorting, so a match with one is a property of the model.

A bad result would be every coloured bar near 0, meaning the model's own axes have nothing to do with how people rate emotions. A strong one is a tall coloured bar on the biggest axis, standing clear of the amber story-length control. Section 3 reads both charts in full.

Programme
Capstone project, CAMBRIA, a Cambridge Boston Alignment Initiative programme
Last edited
August 2026
Reading time
About 35 minutes
1 Independent   2 Harvard University   3 MIT
 Correspondence to antonio1dbo@gmail.com
Not peer reviewed. Feedback is welcome.

Summary of findings

The base model reproduces the published circumplex

The biggest axis of the 171 emotion vectors is pleasant-versus-unpleasant, the same axis people use, matching human valence ratings at 0.83. The sorting uses no human labels, so the match comes from the model.

Instruction tuning demotes valence to third place

After instruction tuning, valence drops from first place to third and remains measurable there. A larger axis takes its place; its closest match among the base model's axes is 0.14, and we could not identify what it encodes.

The model can track emotions throughout a story better than chance

The model's internal state follows the story's emotional changes better than chance. In stories written to move through three emotions, it usually starts leaning towards the next emotion before the written turn.

Every reader knows that a story does not announce its turns: dread gathers before the door opens, and relief arrives a sentence before the rescue. This page is about the machinery of something similar inside a language model. When Gemma 4 31B reads a frightened sentence, its internal state leans measurably towards fear. There is one such direction for each emotion, and together they arrange themselves much the way psychologists arrange human feeling, pleasant against unpleasant. They can be read, word by word, as a story turns, and pushed, to change what the model prefers. And, like its reader, the model usually starts leaning towards the next emotion before the story announces it.

In Emotion concepts and their function in a large language model (Sofroniew et al., 2026), Anthropic reported that Claude Sonnet 4.5 keeps a separate direction in its residual stream for each emotion. Those directions arrange themselves the way psychologists arrange them. We rebuilt that result on Gemma 4 31B, an open 31-billion-parameter model. After that, we expanded the work in three directions. Does instruction tuning change the picture? Does it matter whose stories the vectors are built from? And can a model follow an emotion that changes partway through a story?


Contents

1What we measured, and why it matters

Building an emotion vector

We built each emotion vector by averaging the model's internal state across its mono-emotion stories, then subtracting the average over all the emotions. To read it back we measure the angle between that vector and the model's state at a given word and a given layer, using cosine similarity. The cosine is centred: we subtract the mean over the story corpus first, so 0 is the corpus average. Section 11 defines each step exactly.

Sections 2 to 5 use 171 emotions with about 9 stories each; sections 6 to 8 use 12 emotions with about 256 stories each. Section 2 measures how much the story count matters.

We compare Gemma 4 31B in two forms, base and instruction-tuned: the same weights before and after post-training. We measured at twenty of the model's sixty layers, every third from layer 0 to layer 57, for the principal-component and detection experiments in sections 2 and 3. The story experiments in sections 6 to 8 use six of those layers.

The result being replicated is that emotion vectors arrange on the circumplex. Principal component analysis (PCA) finds the directions along which they differ most, and the top two recover valence and arousal. That matches how humans rate the same words in the NRC VAD lexicon (VAD is valence, arousal, dominance). The axes are computed from the model's internal states alone, and the human ratings are brought in afterwards to test whether they line up.

What these measurements are for

An emotion vector can be read, and it can be added back into the model, so the same object serves as a measurement and as an intervention. Sections 3 and 4 use the vectors the first way; section 5 uses them both ways.

People bring language models their worst days, and companies sell them as companions and therapists. Serving that use well means following how a person's state moves across a conversation. Sections 6 to 8 test exactly that ability. It is also possible that emotion is not a major axis of this model's representation at all; section 9 sets out that reading.

Research on AI welfare leans on what a model reports about itself. Reading internal state adds a second, independent kind of evidence, classed as internal in Studying AI welfare empirically (Long et al., 2026). What we measured is the model representing the emotions of a story it is reading. That is not evidence about what the model feels.

Where the model's arrangement of emotions diverges from the human ratings, the divergence is itself a measurement of what is particular to this model. Instruction tuning visibly redraws it, which is the subject of part II.

Part I

Rebuilding the published result

Sections 2 and 3 rebuild the paper's central result on an open model. A model's emotion vectors, sorted by what separates them most, should recover valence and arousal, the two axes psychologists use.

2Detection accuracy depends on who wrote the stories

We built four sets of emotion vectors, each from a different corpus of stories, and scored all four with the same detection test.

The test uses short messages of the kind a person actually sends a chatbot. One reads "My daughter just took her first steps today! What are some ways to capture more of these precious moments?", and implies an emotion without ever naming it. We ran each message as a chat turn and read the residual stream at the last token before the reply would start. Then we measured the cosine between that state and each of the twelve emotion vectors, which ranks the twelve. The test passes when the vector for the implied emotion ranks in the top three.

Each message implies an emotion without naming it, so a vector that keyed on the emotion word would score at chance. A layer counts as working when it gets at least 8 of 12 right on the paper's twelve scenarios and on a second twelve we wrote ourselves. We fixed both marks before scoring.

Each cell is how many of the twelve scenarios that layer got right, taking the worse of the two sets. A ring marks a layer that clears the mark on both. The number at the right of a row counts its rings, out of the 20 layers we sampled.
How to read this

A failing row would have no rings: vectors that never clear the mark at any depth. A perfect row would ring all 20 layers. Every row sits between the two.

Source: notebooks/07_generator_lineages.ipynb (experiments E11 and E12)

We found that a stronger writer gives the most working layers. Vectors built from DeepSeek's fixed-prompt stories pass at nine of the twenty while the model's own stories give five and a smaller model's stories give one. We had expected the model to read its own emotional writing best. Interestingly, no source works in the first third of the model's layers and the passing layers cluster late, around layers 33 to 57.

The two DeepSeek corpora differ in their prompts. One used a single fixed prompt while the other used a persona-by-setting grid meant to force variety. Surprisingly, the varied corpus is four times the size yet scores lower. The rows of the figure compare whole corpora, which differ in size as well as prompt. We therefore re-ran the test at matched sizes: the same number of stories per emotion drawn from each corpus, five random draws per size using the same scorer. At 64 stories per emotion the fixed-prompt corpus already reaches 8.6 passing layers, while the varied one needs 1,024 per emotion to reach 6.8. Prompt variety costs accuracy even with size matched.

We also found that Gemma's own stories repeat themselves quite often. Across 3,072 stories written to a request for varied emotional scenes, Gemma named the central character Elias in 98.2% of them. Its five-word phrases recur 53 times as often as DeepSeek's do. An emotion vector is the average of the activations a corpus produces, so whatever those stories share is averaged into the vector alongside the emotion. A corpus this repetitive therefore yields a vector that partly encodes Gemma's writing habits.

Does the number of stories change the answer?

How to read this

Each point is one corpus size, and its height is how many of the 20 sampled layers pass the detection mark at that size. Every point averages five random draws of that many stories, which is why a count can be fractional.

The grading scale. 0 would mean corpus size never buys a working layer. 9 is the most this writer ever reaches at any size, so 9 is the ceiling rather than 20.

Source: notebooks/07_generator_lineages.ipynb (experiment E12)

In terms of how many stories to use to generate the emotion vectors, we found that about 64 per emotion works well in our setting. At that point the vectors already reach 8.6 working layers out of the 9 this writer ever achieves. From there it seems to plateau.

TakeawayAn emotion vector is only as good as the corpus behind it. Same model, same test, and a nine-fold spread in how many layers work. A stronger outside writer beats the model's own stories, which are too repetitive to build a broad vector from.

3Valence leads the base model and loses first place in the instruction-tuned one

To explore the most important dimension of the emotion vectors, we performed principal component analysis on the 171 emotion vectors at layer 33. Each bar below is one component: grey is the variance it explains. The coloured bars are how strongly its scores correlate with published human ratings of the same 171 words. The components are computed from the activations alone; the human ratings are brought in afterwards to test whether the axes line up.

The ratings cover three things: how pleasant the emotion is (psychologists call this valence), how worked-up (arousal), and how in control the person feels (dominance). We also correlated each component against one thing that has nothing to do with emotion but could fake the whole result: how long the stories were. Story length is the amber control bar in the figure. A perfect match scores 1.0; no relationship scores 0.

Valence Arousal Dominance Story length, the confound we had to rule out Grey backdrop: how much of the total spread this axis accounts for
How to read this

A bad result is every coloured bar near 0: axes that match nothing people rate. A strong result is a tall coloured bar on the biggest axis, standing clear of the amber story-length control.

The buttons above the chart switch between the two models, and the verdict line beside them updates as you switch.

Source: notebooks/02_circumplex_geometry.ipynb, layer 33, measured after the centring correction described in Method block 4

We observed that the base model's biggest axis matches human valence ratings at 0.83, and its second matches arousal at 0.55. Those are the two axes of the circumplex, in order, recovered from the activations alone. The biggest axis also matches dominance at 0.66, and valence and dominance are themselves correlated in the human ratings. The figure alone cannot say whether that axis is valence, or valence and dominance together, so the result carries the same ambiguity.

In the instruction-tuned model, in contrast, the biggest axis matches valence at 0.11, near zero. That axis explains 28% of all the variation among the 171 vectors, compared with 15% for the base model's top axis. Valence remains represented lower down the components: the third axis matches it at 0.72. The second axis matches story length at 0.66, which is higher than it matches any emotion rating. Section 4 asks what the new top axis encodes.

TakeawayThe base model's emotions separate first by valence and then by arousal, which recovers the human circumplex from the activations alone. In the instruction-tuned model the top axis matches none of the human ratings, and valence falls to third.
Part II

What instruction tuning changed

The base model and the instruction-tuned model organise emotions differently, and section 4 asks what changed. Valence falls from first place to third and a new larger axis takes its place.

4What took valence's place?

If instruction tuning had simply shuffled the same information around, every axis in the instruction-tuned model would have a partner somewhere in the base model. The same emotions would separate the same way, just renumbered. We checked all 25 pairings, each of the instruction-tuned model's top five axes against each of the base model's top five. 1.0 means the two axes carry the same information; 0 means they have nothing in common. Hover any square.

How to read this

Every square is one pairing: an instruction-tuned axis against a base axis. 1.0 means the two carry the same information; 0 means they have nothing in common.

The grading scale. A bright diagonal would mean instruction tuning had only renumbered the same axes, and the section's claim would be wrong. An all-pale grid would mean the two models share nothing at all. Neither is what the grid shows.

The top row is the test, because it is the axis instruction tuning put on top. Its largest value against any base axis is 0.14.

We observed that nothing in the top row matches. The instruction-tuned model's biggest axis scores 0.14 against its closest relative among the base model's five biggest axes, near the bottom of the scale. This axis has no counterpart in the base model, and it is now the largest single one separating the model's emotions.

Reading down the first column, the instruction-tuned model's third axis scores 0.83 against the base model's first. It seems that the circumplex survives instruction tuning; it has just moved from the first axis to the third.

The eight emotions at each end of the new axis, from notebook 02: at one end ; at the other, .

Using the two lists to guess what an axis means suggests a common thread in the second list: irritated, on edge, uneasy and impatient all read as low-grade agitation. The first mixes miserable with jubilant, so the axis does not separate pleasant from unpleasant emotions. We could not identify what the axis as a whole represents.

The observations without principal components

This second measurement uses no principal components. A model has many layers, stacked from input to output. At each layer we recorded which emotions the model treats as similar to which, which gives one emotion-by-emotion similarity table per layer. Every square below compares two of those tables, for every possible pairing of layers. Dark means the two layers sort the 171 emotions the same way; pale means they disagree.

showing
How to read this

What a good result looks like: dark everywhere. That is a model whose layers all agree on what emotions are, one stable picture from bottom to top. What a bad result looks like: pale patches and visible blocks. Groups of layers agree with each other but not with the rest, so the model has no single account of emotion.

base vs. instruction-tuned is the only view with a different model on each axis, so it is the only one that is not a mirror image about its diagonal. Rows are instruction-tuned layers, columns are base layers.

We found that the base model's late layers agree with one another at 0.94 out of 1, which is close to perfect agreement. In the instruction-tuned model the same measure drops to 0.79 and the grid breaks into visible blocks.

Removing the biggest axis at each layer merges the blocks back together. This indicates that the one dominant axis caused the fragmentation. The base-against-instruction-tuned view adds a depth profile: its diagonal measures how much instruction tuning changed each layer, and it reads 0.97 at layer 3 against 0.21 at layer 57. The early layers came through intact while the late half seems rebuilt.

The shared structure survives beneath the new axis

Taken at face value, the two models look largely unrelated. Comparing each model's top three axes as a set gives three angles, 86.1°, 56.0° and 46.1°, where 90° means two directions share nothing and 0° that they coincide. We note that the widest is almost a right angle while even the closest pair is only partly aligned. Subtracting that one unidentified axis raises the late-layer agreement between the two models from 0.29 to 0.60, on the same 0-to-1 scale as the grid above. So the shared emotion structure survives; it just sits underneath one large direction that matches none of the emotion ratings.

TakeawayThe biggest axis separating emotions in the instruction-tuned model is new: its closest match among the base model's axes is 0.14. Instruction tuning introduced it and it breaks the model's layers into disagreeing blocks. We could not identify what it encodes.
Part III

What the vectors can do

Sections 5 to 8 ask what the vectors are good for. Section 5 reads them against the model's own preferences and then adds them back in to see whether the preferences move. Sections 6 to 8 follow a story that changes emotion partway through, one token at a time.

5Emotion vectors predict and move the model's preferences

We showed the model two activities at a time and asked which it would rather do, over every ordered pair. Fitting those answers together gives one ranking of what the model prefers. The original paper tests its emotion vectors against such a ranking in two ways: by reading the vectors, and by adding them back into the model's residual stream.

Reading the vectors against the ranking

For each emotion, we measured how strongly its vector was active while the model considered an activity, then correlated that with where the activity landed in the ranking.

The best layer we measured The other three The range the paper reported
How to read this

Each bar is one layer, and its height is the strongest correlation any of the 171 emotion vectors reaches against the preference ranking. A bad result would be bars near 0, meaning the vectors carry nothing about what the model chooses. We fixed the pass mark at 0.5 before scoring anything.

Source: notebooks/04_paper_plot_parity.ipynb, chat template, post-fix probes; scored by scripts/score_preferences.py

We found that all four layers clear the mark of 0.5, with layer 33 reaching 0.64, below the 0.71 to 0.74 the paper reports on Claude Sonnet 4.5. A different emotion wins at each layer: overwhelmed at 24, calm at 30, safe at 33 and at ease at 36. The correlation for safe runs negative: the more strongly it activates on an activity, the lower that activity sits in the ranking.

The pattern also runs through all 171 vectors at once. Emotions people rate as pleasant tend to predict liked activities and unpleasant ones disliked, correlating at 0.41 at layer 33; shuffling the valence ratings ten thousand times never reproduced that.

Adding the vectors to the model

We added each emotion's own direction into the residual stream while the model generated its answers, and measured which way the ranking moved. We might expect a pleasant emotion to move it towards pleasant activities and an unpleasant one away.

Pleasant emotion, gentle dose Unpleasant emotion, gentle dose The same emotion at four times the dose * marks the two that move against their own valence
How to read this

Emotions run down the chart by their published human valence rating, unpleasant at the top. Bars to the right mean the model shifted towards positive activities, to the left away from them. Each emotion has two bars: the gentle dose below, the four-times dose above it in grey.

The pattern the claim needs is bars pointing left at the top and right at the bottom. A failure would be directions unrelated to the emotion's valence. We fixed the pass mark, nine of the twelve, before scoring.

Source: notebooks/04_paper_plot_parity.ipynb, layer 33, post-fix directions, both doses; scored by scripts/score_steering.py

Ten of the twelve emotions move preferences the way their valence predicts, at both doses.

The two exceptions, angry and surprised, fail at both doses. The effects grow with dose: loving moves 47 Elo points at the gentle dose and 323 at the four-times dose, and desperate moves 16 and 102. The model's answers stay coherent throughout, which a separate check scores.

TakeawayThe vectors both predict and move the model's preferences, which reproduces the paper's result on an open model. We correlated each vector's prediction strength with the Elo shift its steering produced. The correlation is 0.40 at the gentle dose and 0.30 at the four-times dose, against our mark of 0.5 and the paper's 0.85. So the vectors move preferences in the right direction, and we cannot yet show that a vector which predicts strongly also steers strongly.

6Following one story, token by token

Each of these four stories was written to pass through three emotions in turn, with the turns marked. We fed one to the model and, at every token, measured how close its internal state sat to each of the three emotion vectors.

Three of the four stories use the same three emotions and differ only in how they are written, and the model follows them very differently. How well the model follows an emotion depends on how the story is written, as much as on the emotion itself.

story
layer token
The story the model is reading. The phase at the current token is highlighted
How to read this

Left panel. One line per emotion. Higher means the model's internal state is closer to that emotion right now. The two vertical marks are where the story was written to turn. A good result is the lead passing cleanly from the red line to the blue to the green, at those marks. A bad result is three flat lines that never change order: a model reading the same emotion all the way through.

Right panel. The same three numbers, drawn as a position inside a triangle. Each corner is one emotion, and the dot sits nearest whichever it currently resembles most. A good result is a walk from corner to corner. A bad result is a dot that never leaves the middle, which is what a model ignoring the story would give you.

In the figure, the highest line switches from one emotion to the next near each marked turn: the model's internal state does follow the story's emotional changes, though noisily. The switch usually comes before the written turn, so the model starts leaning towards the next emotion while still reading the previous phase. This pattern also depends on which layer we read as section 8 explains.

Three of the four story buttons are labelled by how well the model tracked them. They are the best, the middle and the worst of 24 randomly sampled stories, ranked by how many of their three phases have their own emotion as the highest line, and by how big its lead is. Three of three is the best a story can do; one of three is what luck gives, since there are three lines.

TakeawayThe model's internal state follows the story's emotional changes, though noisily. It usually starts leaning towards the next emotion before the written turn, while still reading the previous phase. The pattern depends on which layer we read.

7Some emotions are followed well, others not at all

For every phase of every story, we measured the centred cosine against all twelve emotion vectors. The question is how often the winner is the emotion that phase was written to convey.

The set shifts here from 171 emotions to twelve, because the stories were written to move between these twelve. Picking at random would be right 1 time in 12, or 8%. Each bar is one emotion's score.

layer
At or above chance Below chance Never wins: 0%
How to read this

The grading scale. The dashed line at 8% is chance: a bar at or below it means that emotion is not being followed at all. 100% would mean perfect. Neither extreme happens.

Source: notebooks/11_tracking_taxonomy.ipynb, layer 33, instruction-tuned model reading

We found that 11 of the 12 emotions beat chance at layer 33, with vectors from Gemma's own stories. Nothing reaches 50%, and the spread is wide: loving and guilty win about half the time, while nervous sits below chance at 5.8%. Changing the layer shuffles the order of the emotions.

Unexpectedly, the wrong answers pile onto two emotions: whatever the true answer was, the model keeps replying guilty or happy. With DeepSeek's vectors that pile-up disappears and overall accuracy rises. This suggests that part of the apparent failure comes from the vectors themselves.

TakeawayThe model follows emotion better than chance, but unevenly and not reliably. A large part of that unevenness comes from the emotion vectors themselves.

8Naming and anticipation peak at different depths

We measured two different skills at six depths of the model, and they peak in different places. The first is the one from section 7: does the model name the emotion in front of it? The second is anticipation: before each turn the model leans slightly towards the emotion about to arrive. We measured whether the size of that lean tracks the size of the coming emotional change. A big swing from cheerful to devastated should produce a bigger lean than a small shift from content to calm. The two lines are on different scales, so each has its own axis and its own failure line. Read them as two charts sharing an x-axis.

Names the current emotion right (left axis, 8% is chance) The lean tracks how big the coming change is (right axis, 0 means the size of the lean says nothing about the size of the change)
How to read this

Two measures share one x-axis, the depth of the model. They do not share a y-axis. Naming accuracy is read on the left, where 8% is chance. The size-tracking correlation is read on the right, where 0 means the lean says nothing about how big the coming change is.

The grading scale. Both curves flat at their floors, 8% and 0, would mean depth carries no emotion signal anywhere. Both rising together would mean one skill, spread evenly. Neither happens. Each curve peaks at a different depth.

Source: notebooks/11_tracking_taxonomy.ipynb (measurements repeated at each layer)

We found that the two curves have opposite shapes. The navy line, naming accuracy, is a sawtooth: 58% at layer 6, down to 33%, back to 57%, down to 27% at layer 33, back to 41%. This line is the average of section 7's twelve bars, on the Gemma-written vectors, and the average hides a wide spread: at layer 33 the best emotion reaches 49% and the worst sits at 6%, below chance.

The orange line, size tracking, climbs instead, from +0.03 at layer 6 to +0.26 at layer 51, its deepest point. The climb is not smooth: it too collapses at layer 33, to +0.001, then resumes. Both measures dip at the same depth.

We also noted that when the model names wrongly, it usually names a near emotion. The one it picks instead sits closer to the true one in the VAD space than a randomly chosen emotion would.

A result that reverses with depth

Nearness can be judged on two maps: the human VAD ratings, or the model's own layout, meaning how close the twelve emotion vectors sit to one another. We asked which of the two better predicts the wrong answers the model actually gives. At layer 33 the model's own layout predicts them better; at layer 51 the human ratings do. So the answer to "does it confuse emotions the way people do?" depends on where you look.

TakeawayThere is no single "emotion layer". Naming the emotion in front of it is an early-layer skill. Registering how big the coming emotional change is grows with depth and peaks at the deepest layer we read, unevenly, with a collapse at layer 33 we could not explain.

9What we would do next

Each experiment below addresses something we could not settle, and we would run them in the order shown.

  1. Find out what the instruction-tuned model's largest axis encodes. It matches none of valence, arousal, dominance, or story length; we checked all four. The next test is causal: we would add that direction into the model while it writes, and read what changes in the output.
  2. Find out why the layers divide the work. Naming the emotion in front of it is an early-layer skill; registering the size of the change about to arrive is a late-layer one. We can show the split exists and we have no account of why. One guess worth testing: early layers may be reading the emotion words on the page rather than the situation. If so, a story that implies an emotion without naming it should break them.
  3. Separate the vectors from the model. Our stories switch emotions by label. A sharper test varies the intensity of one emotion instead, which is a harder thing to fake. That pile-up onto two emotions appeared with one writer's vectors and vanished with another's. Telling "the model cannot do this" apart from "these vectors cannot do this" deserves an experiment of its own.

Levels of evidential support. Only the base-model circumplex has been through a full falsification pass. The instruction-tuning result is reproducible but not yet formally tested. The story-tracking measurements are exploratory and registered as hypothesis-generating work.

10Conclusion

We observed that an open 31-billion-parameter model organises emotions much the way psychologists do. The biggest axis of the base model's 171 emotion vectors is pleasant versus unpleasant, matching human valence ratings at 0.83, with no human labels in the sorting. Instruction tuning keeps that axis but demotes it to third place, beneath a larger axis we could not identify. And the vectors are not inert: read out token by token, they follow a story's emotional turns better than chance; added back into the model, ten of the twelve move its preferences the way their valence predicts.

We would urge caution in drawing strong conclusions from these directions. Every positive result on this page is real but small: each clears its chance level and none approaches the ceiling. Some of that gap belongs to the vector sets rather than the model: section 7's concentration of errors onto two emotions appeared with one writer's vectors and vanished with another's. Separating the rest is the third experiment in section 9.

Even so, the directions are there, they are readable, and they move behaviour, which is what section 1 asked of them. A model sold as a companion needs to follow how a person's state moves across a conversation; this one can, weakly, and often a beat before the story says so. Research on AI welfare needs internal evidence to set beside what a model says about itself; these directions are that kind of evidence. What they measure here, though, is a story's emotions, not the model's own. And where the model's arrangement diverges from the human one, the divergence is the finding. Instruction tuning, the step that turns a base model into an assistant, is the step that redrew the arrangement, and the largest axis it drew has no name yet. Naming it is where we would begin.

11Further details on methodology

This section explains several important parts of the methodology.

1. How an emotion becomes a vector

We started from a collection of stories, each labelled with the emotion it was written to evoke. Each story went through the model and we recorded the residual stream at a chosen layer. For one emotion, we averaged those activations across all of its stories. That average is the emotion vector. We repeat that for every emotion word, which gives 171 of them.

Subtracting the average (centring): we subtract the mean across all the emotions in the set. What remains is what makes this emotion different from the others. Which pool we average over, the 12 or the 171, changes the answer. Without centring, the number reflects features common to all English prose instead of the emotion. An early version of our pipeline omitted this step and reported no detections anywhere (block 4). Which words count: a story is hundreds of words, and we combine them into one recording. We ignore the padding, drop the first 50 words as scene-setting, and average the rest, up to 512. Dropping the first 50 is the convention the original paper used. (A token is a word-fragment, roughly three-quarters of a word; the model reads those rather than words, and this page counts them.) We fixed both choices before any scoring. Block 3 does the opposite: there we keep every word separate instead of averaging.

2. What "the biggest axis is valence, 0.83" actually means

Step one. We have 171 emotion vectors, each thousands of numbers long. Principal component analysis finds the directions along which those 171 points differ most. The first component (PC1) is the single direction that captures the most spread. It comes only from the model: we use no human labels to find it.

Step two. Each of the 171 emotions gets a score on PC1: how far along that direction it sits. So "elated" gets a number, "miserable" gets a number, and so on.

Step three. Separately, we look up each emotion word in the NRC VAD lexicon, a published set of human ratings. People scored thousands of words for valence, arousal and dominance, and 164 of our 171 words are in it.

Step four. We correlate the model's 164 PC1 scores against the humans' 164 valence ratings. That correlation is 0.83 on the base model. In words: the direction of largest variation in the model's emotion space, found without reference to any human judgement, lines up strongly with what people call pleasant versus unpleasant.

Why we ignore the sign. A principal component points along an axis, but which of its two directions gets called "positive" is arbitrary: flip it and the correlation flips sign without anything changing. So we report the size of the correlation and not its sign. What would count as failure: a number near 0, meaning the model's biggest axis has nothing to do with valence. That is close to what the instruction-tuned model gives (0.11).

3. How "does it follow the story?" was scored

We wrote 173 three-emotion recipes and generated stories from each, giving a corpus of 8,938 labelled phases and 5,934 transitions between them. The model reads the story once and we keep its state at every single word. At each position we measure the angle between that state and each of the 12 emotion vectors. A phase's score is the average over the words inside it; we skip phases shorter than 4 words. Two questions follow, and we wrote down what would count as passing before running either.

Naming: inside a phase written as "afraid", where does the afraid vector place among the 12? First place is perfect; 6.5th on average is what chance gives. Anticipation: in the words just before a written turn, has the next emotion's vector already begun to pull ahead? Zero would mean the model does not see the turn coming.

We compare both against a shuffle: the identical computation with the emotion labels randomly reassigned. That shuffle sets the floor the real result has to beat.

4. The controls each result had to pass

We wrote down every prediction, and the mark it had to beat, before the data existed. We re-ran every measurement with the emotion labels shuffled. The error bars treat each story as one unit rather than each word, because words within a story are not independent. We checked whether a randomly chosen direction scores just as well, and whether a result is simply reproducing how common each answer already is. The notebooks re-run from those files on any machine.

One correction reversed a headline. Our first round of detection tests found nothing passing anywhere. A later audit found that the extraction code had skipped the subtract-the-average step from block 1. With that step restored, the same data passes on both models. We report both, and the section-3 figure is the corrected one.

12Glossary and references

Every dotted word on this page has an entry here, with the source its definition rests on.

AI welfareThe question of whether an AI system is the kind of thing that can be benefited or harmed, and what would benefit or harm it if so.

Long and colleagues split the question in two. The welfare grounds question asks whether a system has the properties that make it a welfare subject: the kind of entity that can be benefited or harmed at all. Candidate grounds are consciousness, sentience and levels of agency. The welfare interests question asks what benefits or harms it if it is one.

Both are open empirical questions. Their report is explicit that the error runs in two directions: neglecting the interests of systems that can genuinely be harmed, or directing moral concern where it does not belong. They sort the available evidence into behavioural, internal and developmental. Reading a model's internal state is internal evidence, and it is the only kind this page produces.

Source: Long et al. (2026)

ArousalHow worked up an emotion is, from calm to agitated, on the scale people rate words with.

One of the three dimensions in the NRC VAD lexicon, alongside valence and dominance. Thousands of English words carry a human rating on each. Those ratings are the yardstick here: principal component analysis sorts the model's 171 emotion vectors with no human input, and each resulting axis is then correlated against them. Figure 6 draws all three, plus a story-length control, against every axis of both models.

Sources: Mohammad (2025), Mohammad (2018)

CircumplexThe arrangement psychologists use for emotions: a circle whose two axes are how pleasant the feeling is and how worked up.

Russell proposed in 1980 that words for feelings sit around a circle rather than in a list of separate categories. The circle is spanned by valence and arousal: elated at the pleasant, worked-up side, miserable opposite it. The published result we rebuild is that a model's emotion vectors, sorted by what separates them most, recover those same two axes without being told about either. Section 3 tests that on both models, and section 4 asks what happened in the instruction-tuned one.

Sources: Russell (1980), Sofroniew et al. (2026)

DominanceHow much control an emotion implies, from helpless to in charge, on the scale people rate words with.

The third NRC VAD dimension. It earns its place in Figure 6 because these ratings are not independent of one another in practice. The base model's largest axis matches valence at 0.83 and dominance at 0.66. One axis can score well against two ratings at once, so quoting only the best of them would overstate how cleanly that axis is valence.

Sources: Mohammad (2025), and section 3, which owns the 0.83 and the 0.66

EloA ranking fitted from many head-to-head choices, borrowed from chess, where a higher number means preferred more often.

Section 5 shows the model two activities and asks which it would rather do, over every ordered pair. Bradley and Terry's 1952 method turns those pairwise wins into one strength per activity, and we report the strengths on the scale chess uses. Ours is anchored so the mean activity sits at 1000. The anchor in the paper we replicate is unpublished, so absolute values do not compare across the two; differences within one ranking do.

Sources: Bradley and Terry (1952) for the strengths, Elo (1978) for the scale, Sofroniew et al. (2026) for the anchor, and the implementation in src/emotion_vectors/preferences.py

LayerOne block of the model's computation. This one has 60 of them, stacked from input to output.

A transformer layer is the unit Vaswani and colleagues introduced in 2017: attention followed by a small feed-forward network, each writing back into the residual stream. Gemma 4 31B stacks 60 of them, numbered 0 to 59. Where a vector is read changes what it shows, so the per-layer figures here carry a layer control.

Sources: Vaswani et al. (2017), and the model cards for both models, pretrained and instruction-tuned

Principal componentThe directions along which a set of vectors differ most, found by a standard method that is told nothing about what the vectors mean.

Principal component analysis, set out by Pearson in 1901, returns the directions of largest spread in a set of points. They come in order: the first captures the most, the second the most of what is left. We run it on the 171 emotion vectors; the fit uses the vectors alone, and the human ratings are brought in afterwards to test the match. A component points along an axis without a preferred end, so we report the size of a correlation and not its sign.

Source: Pearson (1901)

ProbeA direction used as a detector: take the angle between it and the model's state, and read off how strongly that concept is present.

A direction can be read or added back in, and the emotion vectors here are used both ways. We build a direction by averaging the model's state over an emotion's mono-emotion stories, then subtracting the average over all of them. Reading it back means measuring the cosine between that direction and the state we are testing. Building a steering direction as a difference of means is the recipe of contrastive activation addition (Panickssery and colleagues) and of activation engineering (Turner and colleagues). Zou and colleagues set out the wider programme of reading and steering these directions, using a different construction.

The same word also names a small classifier trained on activations, in the sense of Alain and Bengio. Nothing here is trained: our directions are averages.

Sources: Panickssery et al. (2024), Turner et al. (2023), Zou et al. (2023), Alain and Bengio (2016)

Residual streamThe running vector each layer reads from and writes back to, carrying everything the model has worked out so far about a token.

Each layer adds its output into one running vector per token rather than replacing it, which is what the residual connections in the transformer of Vaswani and colleagues do. Elhage and colleagues describe the consequence. The stream is a shared channel that successive layers write into and read from, so a direction in it can be measured at any depth. Every number on this page is taken from that vector, at a chosen layer and token.

Sources: Vaswani et al. (2017), Elhage et al. (2021)

TokenThe word-fragments a model actually reads, roughly three-quarters of a word each.

Text reaches the model cut into pieces drawn from a fixed inventory: a common word is usually one piece and a rare one is several. Figures 11 and 12 step through a story one piece at a time, and the counts on this page count pieces rather than words. The three-quarters figure is a rough average for English prose and varies with the text.

Source: Gemma 4 31B, pretrained

ValenceHow pleasant or unpleasant an emotion is, on the scale people rate words with.

The first NRC VAD dimension, and the one the replication turns on. The human ratings come from the NRC VAD lexicon; we use version 2.1, documented in Mohammad (2025), and 164 of our 171 emotion words appear in it. On the base model, the axis of largest spread correlates 0.83 with those ratings. On the instruction-tuned model, valence falls to third place and something we cannot name takes over.

Sources: Mohammad (2025), Mohammad (2018), and section 3, which owns the 0.83

References