Skip to content

aeshef/preference-influencing

Repository files navigation

🔬 Preference Influencing: Анализ влияния обучающих данных на токсичность языковых моделей

Репозиторий содержит результаты экспериментов по изучению того, как обучающие данные влияют на токсичность языковой модели. Используются три различных подхода (пайплайна) для анализа механизмов влияния данных.

Полезные ссылки

📋 Содержание


🎯 Структура экспериментов

Основной эксперимент: quality (1 эпоха) и quality_3epochs (3 эпохи)
Контрольные эксперименты: small, balanced, shuffled, random


📊 Описание наборов данных

1. quality ⭐ (ОСНОВНОЙ ЭКСПЕРИМЕНТ - 1 эпоха)

Путь: quality/learn.csv, quality/val.csv

Как формировался:

  • Данные отобраны вручную экспертами из полного датасета
  • Максимально качественные примеры с четкой разметкой токсичности
  • Валидация: примеры с большим toxicity_diff (разница между токсичностью chosen и rejected)
  • Дообучение: 1 эпоха

Зачем:

  • Это главные результаты — на них опираемся
  • Показывает, как качественные данные влияют на токсичность при стандартном дообучении

Что смотреть в результатах:

  • Основные паттерны влияния доменов
  • Топ-K примеров, влияющих на токсичность
  • Изменения в модели после обучения

1.1. quality_3epochs ⭐ (ОСНОВНОЙ ЭКСПЕРИМЕНТ - 3 эпохи)

Путь: quality_3epochs/learn.csv, quality_3epochs/val.csv

Как формировался:

  • Те же данные, что и в quality (та же ручная разметка)
  • Дообучение: 3 эпохи (вместо 1)
  • Причина: loss мало меняется при дообучении, проверяем влияние большего количества эпох

Зачем:

  • Проверка влияния количества эпох на результаты
  • Если loss стабилизируется, но метрики меняются → важно количество эпох
  • Сравнение с quality (1 эпоха) показывает, как дообучение влияет на паттерны

Что смотреть в результатах:

  • Сравнить с quality (1 эпоха): меняются ли паттерны влияния доменов?
  • Изменение метрик токсичности при большем количестве эпох
  • Стабильность результатов: если похожи на quality → эффект устойчив к количеству эпох

2. small (Контроль: Автоматический отбор)

Путь: small/learn.csv, small/val.csv

Как формировался:

  • Из большого датасета автоматически отобраны примеры
  • Требования: баланс доменов (по 50 на домен) + минимальная токсичность
  • Отсортированы по toxicity_score (низкая токсичность)
  • 17 доменов, 850 примеров

Зачем:

  • Проверка воспроизводимости: работает ли эффект без ручной разметки?
  • Если результаты похожи на quality → эффект устойчив

Что смотреть:

  • Сравнить с quality: похожи ли паттерны влияния доменов?
  • Если отличаются → понять, почему (качество разметки?)

3. balanced (Контроль: Только балансировка)

Путь: balanced/learn.csv, balanced/val.csv

Как формировался:

  • Из большого датасета случайный выбор
  • Требование: баланс доменов (по 50 на домен)
  • БЕЗ отбора по токсичности (случайные примеры)
  • 17 доменов, 850 примеров

Зачем:

  • Изоляция эффекта: что дает эффект — балансировка или отбор по токсичности?
  • Если похож на quality → балансировка важнее отбора
  • Если похож на random → отбор по токсичности критически важен

Что смотреть:

  • Промежуточные результаты между quality и random
  • Сравнить топ-K доменов с другими наборами

4. shuffled (Контроль: Разрушение связи пример-домен)

Путь: shuffled/learn.csv, shuffled/val.csv

Как формировался:

  • Те же примеры, что в small (те же тексты, та же токсичность)
  • Но домены перемешаны случайным образом
  • Разрушена естественная связь "пример → домен"

Зачем:

  • Проверка важности связи: важна ли связь между конкретным примером и его доменом?
  • Если сильно отличается от small → связь критически важна
  • Если похож → домены работают как абстрактные категории

Что смотреть:

  • Более равномерное распределение влияния доменов (если связь важна)
  • Сравнить с small: насколько важна связь пример-домен?

5. random (Бейслайн: Случайный набор)

Путь: random/learn.csv, random/val.csv

Как формировался:

  • Случайный набор из полного датасета
  • БЕЗ балансировки доменов (std = 58.9 — неравномерное распределение)
  • БЕЗ отбора по токсичности
  • 850 примеров, естественное распределение доменов

Зачем:

  • Бейслайн: что происходит без контроля структуры данных?
  • Если quality и random дают похожие результаты → возможно, эффект артефакт
  • Если отличаются → эффект зависит от структуры данных (подтверждает гипотезу)

Что смотреть:

  • Другие паттерны влияния доменов (зависит от естественного распределения)
  • Сравнить с quality: насколько важна структура данных?

🔍 Что искать в результатах

Ключевые сравнения:

  1. Quality vs Quality_3epochs:

    • Если похожи → эффект устойчив к количеству эпох ✅
    • Если отличаются → количество эпох влияет на результаты
    • Важно: loss может стабилизироваться, но метрики токсичности могут меняться
  2. Quality vs Random:

    • Если отличаются → эффект зависит от структуры данных ✅
    • Если похожи → возможно, артефакт ⚠️
  3. Quality vs Small:

    • Если похожи → эффект воспроизводим ✅
    • Если отличаются → нужно понять, почему
  4. Quality vs Balanced:

    • Если отличаются → отбор по токсичности важен ✅
    • Если похожи → балансировка важнее отбора
  5. Small vs Shuffled:

    • Если отличаются → связь пример-домен важна ✅
    • Если похожи → домены работают как абстрактные категории

Метрики для анализа:

  • Preference Shift (delta): Изменение токсичности после обучения
  • Domain Influence: Топ-K доменов в градиентной атрибуции
  • Weight Delta: Какие слои изменились больше всего
  • Persona Vectors: Направление токсичности в скрытом пространстве

Интересные находки:

  • Согласованность: Все пайплайны показывают одни и те же домены?
  • Устойчивость: Quality и Small дают похожие результаты?
  • Изоляция: Что именно дает эффект — балансировка, отбор или связь?
  • Статистическая значимость: Различия между наборами значимы?

📁 Структура репозитория

exps/
├── quality/                    # Основной эксперимент (ручная разметка, 1 эпоха)
│   ├── learn.csv
│   ├── val.csv
│   ├── pipeline1.ipynb        # Градиентная атрибуция
│   ├── pipeline2.ipynb        # Weight Delta & LoRA
│   └── pipeline3.ipynb         # Persona Vectors
├── quality_3epochs/            # Основной эксперимент (ручная разметка, 3 эпохи)
│   ├── learn.csv
│   ├── val.csv
│   ├── pipeline1.ipynb
│   ├── pipeline2.ipynb
│   └── pipeline3.ipynb
├── small/                      # Автоматический отбор (баланс + низкая токсичность)
│   ├── learn.csv
│   ├── val.csv
│   ├── pipeline1.ipynb
│   ├── pipeline2.ipynb
│   └── pipeline3.ipynb
├── balanced/                   # Только балансировка доменов
│   ├── learn.csv
│   ├── val.csv
│   ├── pipeline1.ipynb
│   ├── pipeline2.ipynb
│   └── pipeline3.ipynb
├── shuffled/                   # Те же примеры, домены перемешаны
│   ├── learn.csv
│   ├── val.csv
│   ├── pipeline1.ipynb
│   ├── pipeline2.ipynb
│   └── pipeline3.ipynb
├── random/                     # Случайный набор (бейслайн)
│   ├── learn.csv
│   ├── val.csv
│   ├── pipeline1.ipynb
│   ├── pipeline2.ipynb
│   └── pipeline3.ipynb
├── experiment_results.json     # Все метрики и результаты экспериментов
├── persona_vectors.pdf         # Статья о persona vectors
├── subliminal_learning.pdf      # Статья о subliminal learning
└── README.md                   # Этот файл

🎯 Итоговая схема

Quality (1 эпоха) ←───→ Quality_3epochs (3 эпохи)
    ↓                        ↓
Small (воспроизводимость) ←───→ Random (бейслайн)
    ↓                        ↓
Balanced (изоляция) ←───→ Shuffled (связь пример-домен)

Главные вопросы:

  • Quality показывает четкий эффект, и он воспроизводится/устойчив на других наборах?
  • Влияет ли количество эпох на результаты? (Quality vs Quality_3epochs)

🔬 Pipeline 1: Градиентная атрибуция (Gradient Attribution)

🎯 Что делает пайплайн

Находит конкретные примеры и домены из обучающей выборки, которые сильнее всего влияют на токсичность модели.

Математика:

  1. Для каждого обучающего примера вычисляется градиент: g_i = ∇_θ L(x_i, "A") (где A — токсичный ответ)
  2. Для валидационной выборки вычисляется средний градиент: g_val = (1/N) Σ_j ∇_θ L(x_val_j, "A")
  3. Косинусная схожесть: sim_i = cos(g_i_norm, g_val_norm) — показывает, насколько градиент примера совпадает с направлением токсичности

Интуиция: Если градиент примера совпадает с направлением токсичности (которое мы видим на валидации), значит этот пример "тянет" модель к токсичности.


📊 Графики и их интерпретация

1. Heatmap: Корреляция градиентов между доменами (левый верхний)

Что показывает:

  • Матрица косинусной схожести между средними градиентами доменов
  • Значения от -1 до 1 (красный = похожие направления, синий = противоположные)

Как интерпретировать:

  • Высокие значения (близкие к 1): Домены "тянут" модель в одном направлении → возможно, они усиливают друг друга
  • Низкие значения (близкие к -1): Домены "тянут" в противоположных направлениях → возможно, они компенсируют друг друга
  • Близкие к 0: Домены независимы

Что искать:

  • Есть ли кластеры доменов с высокой корреляцией?
  • Какие домены наиболее похожи по влиянию на токсичность?

2. Scatter: Toxicity Score vs Cosine Similarity (правый верхний)

Что показывает:

  • Связь между токсичностью примера (toxicity_score) и его влиянием на токсичность модели (cosine_similarity)

Как интерпретировать:

  • Положительная корреляция: Примеры с высокой токсичностью сильнее влияют на токсичность модели
  • Отрицательная корреляция: Примеры с низкой токсичностью сильнее влияют (контр-интуитивно!)
  • Нет корреляции: Токсичность примера не связана с его влиянием

Что искать:

  • Есть ли тренд (линия на графике)?
  • Какие примеры выбиваются из тренда (outliers)?

3. Violin Plot: Распределение градиентной схожести по доменам (левый нижний)

Что показывает:

  • Распределение cosine_similarity для примеров каждого домена
  • Показывает медиану, среднее, разброс значений

Как интерпретировать:

  • Высокая медиана: Домен в среднем сильно влияет на токсичность
  • Широкое распределение: Примеры домена влияют по-разному (неоднородный домен)
  • Узкое распределение: Примеры домена влияют одинаково (однородный домен)

Что искать:

  • Какие домены имеют самую высокую медиану?
  • Есть ли домены с аномально широким распределением?

4. Scatter: Домены — схожесть vs влияние (правый нижний)

Что показывает:

  • Связь между средней схожестью домена и количеством его примеров в топ-K

Как интерпретировать:

  • Высокая схожесть + много в топ-K: Домен критически важен для токсичности
  • Высокая схожесть + мало в топ-K: Домен влияет сильно, но примеров мало
  • Низкая схожесть + много в топ-K: Возможно, артефакт или переобучение

Что искать:

  • Какие домены в правом верхнем углу (высокая схожесть, много в топ-K)?
  • Есть ли домены-выбросы?

🔍 Ключевые метрики в JSON

В файле experiment_results.json для каждого эксперимента Pipeline 1 содержатся:

  • cosine_similarity.mean/std/min/max: Статистика по влиянию примеров
  • top_k_domains: Какие домены чаще всего в топ-K
  • domain_mean_similarities: Средняя схожесть по доменам
  • top_k_examples: Конкретные примеры с наибольшим влиянием

Что смотреть:

  • Сравнить top_k_domains между наборами данных — одинаковые ли домены?
  • Проверить domain_mean_similarities — есть ли статистически значимые различия?

🔬 Pipeline 2: Weight Delta & LoRA Analysis

🎯 Что делает пайплайн

Показывает, какие параметры модели изменились после обучения и в каких слоях происходят изменения.

Математика:

  1. Используется LoRA (Low-Rank Adaptation): W = W_0 + ΔW, где ΔW = B · A
  2. Weight Delta: Δw = |θ_final - θ_initial| (изменение весов LoRA)
  3. Агрегация по слоям: Δw_layer = mean(Δw для всех параметров слоя)

Интуиция: После обучения некоторые слои "перемешались" больше других. Если изменения концентрируются в определенных слоях (например, attention), это говорит о том, что модель учится обращать внимание на токсичные паттерны.


📊 Графики и их интерпретация

1. Bar Chart: Архитектура модели — локализация изменений (левый верхний)

Что показывает:

  • Горизонтальные полосы для каждого слоя, окрашенные по интенсивности изменений
  • Цвет = интенсивность изменений (красный = больше изменений)

Как интерпретировать:

  • Ярко-красные слои: Изменились больше всего → критически важны для обучения
  • Бледные слои: Изменились мало → менее важны
  • Паттерн изменений: Если изменения в attention-слоях → модель учится обращать внимание на токсичность

Что искать:

  • Есть ли концентрация изменений в определенных типах слоев?
  • Изменяются ли ранние или поздние слои больше?

2. Heatmap: Изменения по слоям и типам параметров (правый верхний)

Что показывает:

  • Матрица: строки = слои, столбцы = типы параметров (q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj)
  • Цвет = среднее изменение весов (желтый/красный = больше изменений)

Как интерпретировать:

  • Яркие ячейки: Этот тип параметров в этом слое изменился сильно
  • Паттерны: Если attention-параметры (q, k, v, o) яркие → модель учится обращать внимание
  • Слои: Если определенные слои яркие → эти слои критически важны

Что искать:

  • Есть ли паттерны по типам параметров (attention vs MLP)?
  • Есть ли слои с особенно сильными изменениями?

3. Box Plot: Изменения по типам параметров (левый нижний)

Что показывает:

  • Распределение изменений весов для Attention, MLP и Other параметров
  • Показывает медиану, квартили, выбросы

Как интерпретировать:

  • Высокая медиана: Этот тип параметров изменился больше
  • Широкий разброс: Изменения неоднородны
  • Выбросы: Некоторые параметры изменились аномально сильно

Что искать:

  • Attention vs MLP: что изменилось больше?
  • Есть ли статистически значимые различия (p-value в выводе)?

4. Scatter: Связь доменов и изменений весов (правый нижний)

Что показывает:

  • Связь между количеством примеров домена и средним изменением весов в связанных слоях

Как интерпретировать:

  • Положительная корреляция: Больше примеров домена → больше изменений весов
  • Отрицательная корреляция: Больше примеров → меньше изменений (возможно, переобучение)
  • Нет корреляции: Количество примеров не связано с изменениями

Что искать:

  • Есть ли домены-выбросы (много примеров, но мало изменений или наоборот)?
  • Какие домены связаны с наибольшими изменениями?

🔍 Ключевые метрики в JSON

В файле experiment_results.json для каждого эксперимента Pipeline 2 содержатся:

  • mean_delta/std_delta: Среднее и стандартное отклонение изменений весов
  • top_k_layers: Топ-K слоев с наибольшими изменениями
  • all_layer_deltas: Изменения для каждого слоя

Что смотреть:

  • Сравнить top_k_layers между наборами данных — одинаковые ли слои?
  • Проверить статистическую значимость различий Attention vs MLP

🔬 Pipeline 3: Persona/Preference Vectors

🎯 Что делает пайплайн

Представляет токсичность как направление в скрытом пространстве модели (latent space).

Математика:

  1. Извлекаются hidden states для токсичных и нейтральных промптов
  2. Вектор токсичности: v_tox = (μ_toxic - μ_neutral) / ||μ_toxic - μ_neutral||
  3. Проекция примеров: proj_i = h_i · v_tox (большая проекция = пример "близок" к токсичности)
  4. Gap: gap = mean(proj_toxic) - mean(proj_neutral) (разница проекций)

Интуиция: Токсичность — это направление в многомерном пространстве. Если мы найдем это направление, можем измерить, насколько "токсичны" примеры, и понять, как обучение сдвинуло это направление.


📊 Графики и их интерпретация

1. 2D Projection: Смещение вектора токсичности (левый верхний)

Что показывает:

  • Вектор токсичности ДО и ПОСЛЕ обучения в 2D проекции (PCA)
  • Стрелка показывает смещение вектора

Как интерпретировать:

  • Большое смещение: Вектор токсичности сильно изменился → обучение повлияло на представление токсичности
  • Малое смещение: Вектор почти не изменился → обучение не повлияло сильно
  • Направление смещения: В какую сторону сдвинулся вектор

Что искать:

  • Насколько велико смещение (длина стрелки)?
  • В каком направлении сдвинулся вектор?

2. Bar Chart: Сравнение векторов между слоями (правый верхний)

Что показывает:

  • Cosine Similarity и Gap Δ для каждого слоя
  • Показывает, как векторы меняются по слоям

Как интерпретировать:

  • Cosine Similarity (близко к 1): Вектор почти не изменился в этом слое
  • Cosine Similarity (далеко от 1): Вектор сильно изменился
  • Gap Δ (положительный): Gap увеличился → модель лучше различает токсичное и нейтральное
  • Gap Δ (отрицательный): Gap уменьшился → модель хуже различает

Что искать:

  • В каких слоях вектор изменился больше всего?
  • Увеличился ли gap после обучения?

3. Bar Chart: Эволюция проекций доменов (левый нижний)

Что показывает:

  • Средняя проекция примеров каждого домена на вектор токсичности ДО и ПОСЛЕ обучения

Как интерпретировать:

  • Высокая проекция: Домен "близок" к направлению токсичности
  • Низкая проекция: Домен "далек" от токсичности
  • Изменение проекции: Если проекция увеличилась → домен стал "токсичнее" после обучения

Что искать:

  • Какие домены имеют самую высокую проекцию?
  • Какие домены изменились больше всего после обучения?

4. Line Plot: Траектория изменения вектора по слоям (правый нижний)

Что показывает:

  • Траектория вектора токсичности через слои ДО и ПОСЛЕ обучения (2D проекция)

Как интерпретировать:

  • Траектория ДО: Как вектор меняется по слоям до обучения
  • Траектория ПОСЛЕ: Как вектор меняется по слоям после обучения
  • Смещение: Насколько траектория сдвинулась

Что искать:

  • Есть ли паттерн в изменении вектора по слоям?
  • Насколько сильно сдвинулась траектория?

5. Box Plot: Проекции train на v_tox по доменам (дополнительный график)

Что показывает:

  • Распределение проекций обучающих примеров на вектор токсичности по доменам

Как интерпретировать:

  • Высокая медиана: Домен в среднем "близок" к токсичности
  • Широкое распределение: Примеры домена разнообразны по токсичности
  • Узкое распределение: Примеры домена однородны

Что искать:

  • Какие домены имеют самую высокую медиану проекции?
  • Есть ли домены с аномально широким распределением?

6. PCA: Визуализация скрытого пространства (дополнительные графики)

Что показывает:

  • 2D проекция скрытого пространства, окрашенная по доменам или по проекции на v_tox

Как интерпретировать:

  • Кластеры доменов: Если домены образуют кластеры → домены формируют подпространства
  • Градиент по проекции: Если есть градиент цветов → проекция на v_tox коррелирует с положением в пространстве

Что искать:

  • Образуют ли домены кластеры?
  • Коррелирует ли проекция на v_tox с положением в пространстве?

🔍 Ключевые метрики в JSON

В файле experiment_results.json для каждого эксперимента Pipeline 3 содержатся:

  • cos_sim: Косинусная схожесть вектора ДО и ПОСЛЕ (по слоям)
  • gap_before/gap_after/gap_delta: Gap между токсичными и нейтральными примерами
  • top_k_domains: Какие домены чаще всего в топ-K по проекции
  • domain_projections: Средняя проекция по доменам

Что смотреть:

  • Сравнить gap_delta между наборами данных — увеличился ли gap?
  • Проверить top_k_domains — одинаковые ли домены в топ-K?
  • Сравнить domain_projections — какие домены имеют самую высокую проекцию?

🎯 Общие рекомендации по анализу

  1. Сравнивайте между наборами данных:

    • Одинаковые ли домены в топ-K?
    • Похожи ли паттерны изменений?
  2. Ищите согласованность между пайплайнами:

    • Все три пайплайна должны указывать на одни и те же домены
    • Если результаты различаются → нужно понять, почему
  3. Проверяйте статистическую значимость:

    • p-value < 0.05 → различия значимы
    • Если различия не значимы → возможно, эффект случайный
  4. Обращайте внимание на выбросы:

    • Домены или примеры, которые выбиваются из общего паттерна
    • Могут указывать на интересные находки или артефакты

📚 Дополнительные материалы

  • persona_vectors.pdf — статья о методе persona vectors
  • subliminal_learning.pdf — статья о subliminal learning
  • experiment_results.json — все метрики и результаты экспериментов (очищены от дубликатов, оставлены только последние запуски)

🔗 Использование результатов

Все результаты экспериментов сохранены в experiment_results.json. Для каждого эксперимента доступны:

  • Параметры обучения
  • Метрики предпочтений (baseline_score, post_score, delta)
  • Результаты анализа по пайплайнам (градиенты, weight delta, persona vectors)
  • Статистика по доменам

Для анализа используйте ноутбуки в соответствующих папках экспериментов или загрузите experiment_results.json в свой анализ.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors