rain1955's picture
Sanitize: remove internal codenames
43e30a3 verified

情緒向量本地復刻 — 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 參數的開源模型,在自家伺服器上,也復現了相同的情緒幾何結構。

三個關鍵發現

  1. 情緒向量是真的 — Gemma4-E4B 的每個情緒向量都精準指向對應的情緒詞彙
  2. 效價-激發度結構是通用的 — 跟 Anthropic 在 Claude 上、跟人類心理學研究,結構一致
  3. 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 分鐘