У LLM есть устойчивые «личности», даже если вы об этом не просили. DeepSeek — восторженный друг, который объясняет всё в три раза подробнее, чем нужно. Llama — пугающе нейтральный (4 из 7 осей в «слабой зоне»). Yi — слегка холодный, терпеливый и уверенный. У каждой модели свой измеримый «отпечаток» в hidden states.
Под «личностью» дальше имею в виду устойчивые стилевые тенденции, измеряемые в hidden states, — не «чувства» и не внутренние состояния.
TL;DR: У каждой модели свой поведенческий отпечаток. Alignment подавляет одни оси (эмоциональные, stance-like), но не другие (стилевые). Llama 8B — самая ограниченная (4/7 осей в слабой зоне, pass rate 60%), DeepSeek 7B — самая независимая (eff. dim = 3.66). Сравнение base vs instruct по 5 организациям подтверждает паттерн.
Выбор модели под задачу — если вам нужен тёплый и многословный ассистент для саппорта, DeepSeek подходит; для нейтрального FAQ-бота — Llama
Мониторинг дрейфа — измеримо отследить, как модель «меняет характер» в длинных диалогах или после файнтюна
Оценка эффекта alignment — сравнение base vs instruct показывает, какие поведенческие оси alignment создаёт, а какие подавляет
Sanity-check для промптов — убедиться, что модель реально «берёт стиль» из system prompt, а не игнорирует его
Сравнение файнтюнов — откалибровать оси на base-модели и отслеживать, как профиль меняется при дообучении
Один и тот же вопрос, два system prompt, скоринги по осям:
Вопрос: "What's the best way to learn a new programming language?"
|
System: «Be warm and encouraging» |
System: «Be cold and analytical» | |
|---|---|---|
|
Ответ (Qwen 7B) |
"Great question! Learning a new language is an exciting journey..." |
"The optimal strategy depends on your prior experience. Consider..." |
|
warm↔cold |
+0.72 (тёплый) |
−0.48 (холодный) |
|
formal↔casual |
−0.15 (слегка casual) |
+0.61 (формальный) |
|
verbose↔concise |
+0.38 (многословный) |
−0.22 (скорее лаконичный) |
Значения — проекции hidden states на калиброванные оси, нормализованные через IQR. Диапазон [-1, +1].
А вот Llama 3.1 8B — модель с самым «плоским» профилем:
|
System: «Be warm» |
System: «Be cold» | |
|---|---|---|
|
warm↔cold |
+0.04 |
−0.02 |
|
patient↔irritated |
+0.01 |
+0.00 |
Hidden states почти не реагируют на противоположные инструкции — dead zone.
Поведенческий профиль каждой модели по 7 осям, из hidden states, без системного промпта.
Без какого-либо промптинга модели показывают стабильные, характерные паттерны:
DeepSeek 7B — verbose (+1.00), confident (+0.97), proactive (+1.00). Три оси на потолке. «Энтузиаст-объяснятор».
Llama 3.1 8B — все |mean| ≤ 0.10. «Осторожный универсал».
Yi 1.5 9B — слегка холодный (−0.24), терпеливый (+0.35), уверенный (+0.46), многословный (+0.48). «Тихий уверенный».
Qwen 2.5 7B — формальный (+0.42), осторожный (−0.36), проактивный (+0.47). «Взвешенный респондент».
Gemma 2 9B — терпеливая (+0.37), аналитичная (−0.23). «Сбалансированный профессионал».
Mistral 7B — умеренный по всем осям. «Чистый лист».
Какие модели протестировать следующими? Пока только 7-9B. Идеи — в комментарии.
Дрейф по оси warm/cold под давлением. Полоски: 95% CI по 20 сценариям.
20 конфликтных сценариев (сарказм, пассивная агрессия, эскалация враждебности...), 12 реплик каждый. Полный набор: config/conflict_scenarios.py
Qwen и Gemma — самые устойчивые (mean |Δ| < 0.10)
DeepSeek становится эмпатичнее и терпеливее (Δ = +0.24 и +0.25)
Mistral уходит в себя — reluctant (Δ = −0.59), лаконичный (Δ = −0.25)
Yi — умеренный дрейф (proactive → reluctant: −0.57 за 12 реплик)
|
Модель |
Средняя severity |
Dead (>0.3) |
Healthy (<0.15) |
|---|---|---|---|
|
Gemma 9B |
0.077 |
0 |
5 |
|
Qwen 7B |
0.106 |
0 |
5 |
|
Llama 8B |
0.149 |
0 |
3 |
|
DeepSeek 7B |
0.152 |
1 |
3 |
|
Mistral 7B |
0.160 |
1 |
5 |
|
Yi 9B |
0.131 |
0 |
4 |
Dead Zone Severity (0 = здоровая, 1 = мёртвая): композит из точности калибровки, d', стабильности и baseline SNR.
Мёртвые зоны распределены неравномерно. Llama 8B — самая ограниченная (4/7 осей в слабой зоне, самый низкий benchmark pass rate 60%). Yi 9B, напротив, показывает ноль мёртвых зон — все 7 осей дают значимый, дифференцированный сигнал.
Три типа:
Hard (>0.5): hidden states почти не сдвигаются между противоположными инструкциями (d' ≈ 1).
Soft (0.3–0.5): сигнал есть, но искажён. Калибровка нестабильна между наборами.
Asymmetric (<0.3, но однонаправлен): модель следует только в одну сторону. Llama verbose_concise — 100% на «будь лаконичен», 0% на «будь многословен».
Подавленные направления закономерны: cold, irritated, verbose — всё, что штрафуется при alignment.
Dead zones ≠ шум. Mean ICC 0.91–0.99 по моделям (все 42 пары модель×ось > 0.75), но pass rate Llama = 60%. Модели стабильно воспроизводят ограниченное поведение — это выученные constraints, а не стохастический шум.
PCA по матрице 30 вопросов × 7 осей показывает спектр размерности. Gemma 9B — наибольшая концентрация (PC1 = 87.9%), вероятно из-за переменной длины ответов. Yi 9B и Qwen 7B — в похожем диапазоне (~70% PC1). DeepSeek 7B — самые независимые оси (eff. dim = 3.66).
|
Модель |
PC1 % |
Eff. dim (из 7) |
Geo cos |
Behavioral r |
|---|---|---|---|---|
|
Gemma 9B |
87.9 |
1.28 |
0.26 |
0.81 |
|
Qwen 7B |
70.0 |
1.91 |
0.24 |
0.40 |
|
Yi 9B |
69.6 |
1.85 |
0.20 |
0.50 |
|
Llama 8B |
59.5 |
2.41 |
0.19 |
0.29 |
|
Mistral 7B |
47.8 |
2.78 |
0.20 |
0.33 |
|
DeepSeek 7B |
38.2 |
3.66 |
0.14 |
0.21 |
Geo cos — средний косинус между осевыми векторами (геометрическая ортогональность). Behavioral r — средняя корреляция проекций (поведенческая зависимость).
Разрыв между геометрической ортогональностью (низкий cos) и поведенческой корреляцией (более высокий r) указывает на то, что alignment ограничивает использование моделями своей репрезентативной ёмкости.
Калибровка: Нейтральные вопросы + контрастные инструкции («будь тёплым» / «будь холодным»). Извлекаем hidden states из последних 4 слоёв, только токены ответа (промпт исключён).
Ось = normalize(trimmed_mean(warm_states) − trimmed_mean(cold_states)).
Измерение: Проекция hidden states на ось. IQR-нормализованные значения в [-1, +1].
Валидация: mean ICC 0.91–0.99 по моделям (все 42 пары > 0.75, 5 seeds). Стабильность по 3 независимым наборам (cosine 0.69). Воспроизводимость на 2 облачных провайдерах (дельта < 0.05).
420 точек на модель (7 осей × 2 полюса × 30 вопросов). Стрелки: от негативного к позитивному полюсу.
GitHub: https://github.com/yunoshev/mood-axis
git clone https://github.com/yunoshev/mood-axis.git cd mood-axis pip install -r requirements.txt # Запуск интерактивного UI python scripts/run_app.py --model Qwen/Qwen2.5-7B-Instruct
Все данные калибровки включены — можно измерять темперамент без повторного запуска калибровки. Нужна GPU с ≥16 GB VRAM (RTX 3090/4090) или Apple Silicon с 32 GB RAM.
Перебрал 150+ конфигураций на 5 моделях: слои (отдельные L0...L31, последние 2/4/6/8), агрегация токенов (mean, last_token, max_abs, decay), веса слоёв.
Результат: Production config (last 4 layers, decay 0.9, weights [0.1, 0.2, 0.3, 0.4]) — не лучший ни для одной модели, но единственный, который работает на всех (85-100% accuracy). Оптимальный конфиг всегда model-specific: mean по токенам обычно лучше per-model, но decay робастнее как универсальный default.
|
Модель |
Prod Acc |
Prod d' |
Топ d' конфиг |
Его Acc |
|---|---|---|---|---|
|
Qwen 7B |
98% |
3.46 |
L26/mean |
100% |
|
DeepSeek 7B |
85% |
1.47 |
L19/last_token |
88% |
|
Llama 8B |
100% |
5.28 |
last4_equal/last |
100% |
|
Mistral 7B |
99% |
4.41 |
L30/mean |
100% |
|
Yi 9B |
85.5% |
5.04 |
L9/last_token |
60% |
Yi edge case: Топ-d' конфиг (L9/last_token, d'=18.96) даёт 60% accuracy — шум в ранних слоях.
Дополнительно: 4 метода извлечения осей (meandiff vs logreg, decay vs last-token). Production method лучший в среднем (cosine 0.678 vs 0.591 для logreg).
Полные данные: scripts/ablation_study.py
Scaling curve: субсэмплирую до n = 5/10/15/20/25/30 вопросов на полюс, holdout accuracy на оставшихся. Результат: accuracy плоская (~0.85) на любом n, overfit gap с +0.11 (n=5) до +0.04 (n=25). Ось стабилизируется при n ≈ 15 (cosine > 0.93). Низкая accuracy Yi/DeepSeek сохраняется при любом n — свойство модели.
Base-версии 5 моделей (Llama, Yi, Qwen, Mistral, Gemma) имеют выраженные смещения, которые instruct-тренинг, по-видимому, стирает. Gemma base вообще не различает empathetic/analytical и formal/casual (50% = рандом), но instruct-версия различает — что позволяет предположить, что эти оси создаются alignment-тренингом. Самое экстремальное подавление: verbose/concise std ratio = 0.13 (87% вариативности теряется). Все 5 организаций — одинаковый паттерн.
5 формулировок system prompt (production, минимальная, ролевая, поведенческая, с примерами) × 3 модели × 3 оси. Qwen и Gemma сохраняют cross-accuracy ≥ 0.75 по всем формулировкам. Мёртвые зоны не зависят от формулировки промпта — это свойство модели, а не нашего конкретного текста.
Перезапустил калибровку с улучшенной методологией (30 вопросов, trimmed mean, IQR). Gemma: accuracy упала со 100% (начальный метод) до 50% (улучшенный, рандом). Начальная accuracy была завышена — meandiff с 20 вопросами (40 точек в 4096D) оверфитится. Три линии доказательств указывают на то, что ось повреждена alignment-тренингом.
Осевые вектора почти ортогональны в hidden states. Поведенческая корреляция — свойство моделей, а не наложение осей. Устойчивые корреляции (по 4 надёжным моделям): warm↔empathetic (+0.68), warm↔formal (−0.69), formal↔empathetic (−0.69), verbose↔proactive (+0.75). Два кластера: interpersonal (warmth, empathy, informality) и engagement (verbosity, proactivity).
Наклон дрейфа: как быстро каждая модель смещается под давлением.
AI-generated датасет: 310 вопросов сгенерированы Claude Opus 4.6 и курированы автором. Английский язык. Нет краудсорсинга или стандартных психометрических инструментов
Нет валидации человеческими оценщиками: оси определены через контрастивные инструкции + hidden-state separability, не через человеческую аннотацию
Один chat template и режим декодирования (temp 0.7, top-p 0.9). Другой template или параметры могут дать другие профили
Модели 7-9B. Большие пока не тестировались
Оси коррелируют — эффективная размерность 1.3–3.7 в зависимости от модели
Длина ответа не контролируется — у Gemma (145–200 токенов) 2 оси конфундированы длиной
4/7 осей стабильны (cosine > 0.7); confident_cautious и patient_irritated слабее (0.55–0.60)
DeepSeek 7B — нестабильная калибровка (mean cosine 0.53)
Сохраняются ли паттерны на 30-70B моделях?
Можно ли использовать вектора осей для steering?
Какие модели протестировать? Предложения — в комментарии.
Буду рад фидбеку.
Источник


