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 分鐘