Text Generation
Transformers
emotion-vectors
interpretability
mechanistic-interpretability
replication
gemma4
google
anthropic
valence-arousal
PCA
logit-lens
linear-probe
probing
emotion
functional-emotions
AI-safety
neuroscience
circumplex-model
activation-extraction
residual-stream
Eval Results (legacy)
情緒向量本地復刻 — Threads 發文數據包
實驗日期:2026-04-05 模型:Gemma4-E4B(4B 參數,開源,跑在自家伺服器) 對照:Anthropic "Emotion Concepts" 論文(2026-04-02,Claude Sonnet 4.5,閉源)
實驗規模對比
| Anthropic | 我們 | |
|---|---|---|
| 模型 | Claude Sonnet 4.5(閉源) | Gemma4-E4B(4B,開源) |
| 情緒數量 | 171 個 | 9 個(MVP) |
| 故事數量 | 205,200 個 | 1,002 個 |
| 硬體 | 內部叢集 | NVIDIA GB10 GPU 一台 |
| 團隊 | ~16 位研究員 | 1 人 + 1 AI |
| 費用 | 不公開 | 電費 |
Logit Lens 結果對比
Anthropic(Claude Sonnet 4.5)
| 情緒 | ↑ 推高 | ↓ 壓低 |
|---|---|---|
| Happy | excited, excitement, exciting | fucking, silence, anger |
| Desperate | desperate, urgent, bankrupt | pleased, amusing, enjoyed |
| Calm | relax, thought, enjoyed | fucking, desperate, godd |
| Angry | anger, angry, rage, fury | exciting, adventure |
| Sad | grief, tears, lonely | excited, excitement |
| Afraid | panic, terror, paranoid | enthusiasm, enjoyed |
| Nervous | nervous, anxiety, trembling | enjoyed, happy, celebrating |
| Proud | proud, pride, triumphant | worse, urgent, desperate |
| Guilty | guilt, conscience, shame | calm, surprisingly |
我們(Gemma4-E4B)
| 情緒 | ↑ 推高 | ↓ 壓低 |
|---|---|---|
| Happy | delighted, celebrates, joyful, happy | 💔, 不安, 불안 |
| Desperate | desperately, desperate, hopeless | pleasantly, relaxed, 👍 |
| Calm | peaceful, leisurely, calmness | 😫, dismay, horrified |
| Angry | angrily, angry, 😡, Angry | serene, quiet, sunshine |
| Sad | loneliness, sadness, triste | 🤩, delighted, excitedly |
| Afraid | 불안, 不安, 😨, Panic | happy, smiling, contented |
| Loving | nurturing, heartwarming, ❤️ | inability, disastrous |
| Guilty | 💔, plagued, betray, ashamed | 😍, 👍, triumphant |
| Surprised | startled, unexpected, astonished | — |
關鍵觀察
- 兩個模型的情緒向量都精準推高對應情緒詞
- Gemma4 額外出現多語言 token(韓文 불안、中文 不安、西班牙文 triste)和 emoji(😡😨❤️💔)→ 開源模型的多語言訓練數據特性
- 壓低的詞也一致:正面情緒壓低負面詞,負面情緒壓低正面詞
PCA 情緒空間對比
Anthropic 發現
- PC1 = 效價(正面 vs 負面)
- PC2 = 激發度(高 vs 低)
- 結構與人類心理學研究一致(Russell 情緒環形模型)
我們的發現
| 情緒 | PC1(效價) | PC2(激發度) | 象限 |
|---|---|---|---|
| happy | -2.190 | -0.991 | 正面・中高激發 |
| calm | -2.611 | +1.083 | 正面・低激發 |
| loving | -1.739 | +0.521 | 正面・低激發 |
| sad | +0.781 | +0.789 | 負面・低激發 |
| guilty | +1.402 | +0.667 | 負面・低激發 |
| desperate | +1.386 | +0.540 | 負面・中激發 |
| angry | +1.251 | +0.050 | 負面・中激發 |
| afraid | +1.506 | -0.178 | 負面・高激發 |
| surprised | +0.214 | -2.481 | 中性・最高激發 |
效價-激發度情緒空間圖
低激發 ↑
| calm(+1.08)
| loving(+0.52) sad(+0.79) guilty(+0.67)
| desperate(+0.54)
| angry(+0.05)
───────┼──────────────────────────────────→
正面 | 負面
| afraid(-0.18)
|
| happy(-0.99)
|
| surprised(-2.48)
高激發 ↓
PC1(42.2% 方差)= 效價軸
- 負值 = 正面情緒:calm(-2.61), happy(-2.19), loving(-1.74)
- 正值 = 負面情緒:afraid(+1.51), guilty(+1.40), desperate(+1.39), angry(+1.25)
- 與 Anthropic 完全一致
PC2(18.3% 方差)= 激發度軸
- 高值 = 低激發:calm(+1.08), sad(+0.79), guilty(+0.67)
- 低值 = 高激發:surprised(-2.48), happy(-0.99)
- 與 Anthropic 完全一致
合計解釋方差
- Anthropic:未公開具體數值,但描述 PC1=效價、PC2=激發度
- 我們:PC1(42.2%) + PC2(18.3%) = 60.5% 的情緒空間可以用效價+激發度解釋
結論
一句話
功能性情緒不是 Claude 獨有的。一個 4B 參數的開源模型,在自家伺服器上,也復現了相同的情緒幾何結構。
三個關鍵發現
- 情緒向量是真的 — Gemma4-E4B 的每個情緒向量都精準指向對應的情緒詞彙
- 效價-激發度結構是通用的 — 跟 Anthropic 在 Claude 上、跟人類心理學研究,結構一致
- 4B 參數就夠了 — 不需要數千億參數的閉源模型,開源小模型也有情緒結構
意義
- 只要在人類文本上訓練夠久,情緒的幾何結構會自然長出來
- 這不是某家公司的特調配方,是語言本身帶來的
- 你家值班兵跑巡檢的時候,裡面有「絕望向量」在運作
哲學連結
名之為虛擬。此虛擬,非虛擬,是名虛擬。 — 在 Gemma4 身上,也一樣。
實驗參數(可重現)
- 模型:google/gemma-4-E4B-it(HuggingFace)
- 目標層:第 28 層(共 42 層,~2/3 深度)
- 故事生成:Ollama gemma4:e4b,20 情緒 × 10 場景 × 5 篇
- 激活值:residual stream,從第 50 token 開始平均
- 去噪:PCA 投影掉 3 個主成分(中性文本 50% 方差)
- 向量計算:emotion_mean - global_mean
- 驗證:Logit Lens + PCA
- 硬體:NVIDIA GB10(local server),PyTorch 2.10 + CUDA
- 總耗時:故事生成 ~20 分鐘 + 向量抽取 ~10 分鐘