Causal Inference в NLP: методы извлечения причинных признаков из текста с LLM | AiManual
AiManual Logo Ai / Manual.
16 Янв 2026 Гайд

Извлечение причинных признаков из текста: как causal inference и LLM находят настоящие причины, а не корреляции

Полное руководство по causal inference в NLP: sparse autoencoders, HypotheSAES, таксономия текста. Как отличить причину от корреляции в размеченных корпусах.

Почему ваша LLM видит мир через корреляции, а не причины

Откройте любой учебник по машинному обучению. Прочтите первые главы. Что там? "Модель ищет паттерны в данных". "Находит закономерности". "Обнаруживает взаимосвязи".

Ни слова о причинах.

А теперь представьте медицинскую статью. В ней написано: "Пациенты, принимавшие лекарство X, выздоравливали быстрее". Ваша модель видит эту корреляцию. Запоминает. Потом получает вопрос: "Что поможет пациенту с симптомами Y?". И отвечает: "Лекарство X".

А что если лекарство X просто дорогое? И его покупают богатые пациенты, которые одновременно лучше питаются, живут в экологически чистых районах и регулярно занимаются спортом? Модель этого не знает. Она видит только корреляцию.

Это не абстрактная проблема. Это ежедневная реальность каждого, кто работает с текстовыми данными.

Главная проблема NLP-2024: модели прекрасно находят, что связано. Но совершенно не понимают, что из чего следует.

Корреляция ≠ Причинность: пример, который бьёт по глазам

Возьмём реальный кейс. У вас есть корпус новостей о компаниях. Каждая новость размечена: "положительная", "отрицательная", "нейтральная". Вы хотите понять: какие слова действительно вызывают негативное восприятие компании?

Наивный подход: посчитать частотность. Слова "убытки", "скандал", "суд" чаще встречаются в негативных новостях. Вывод: эти слова - причина негатива.

Но подождите. А что если журналисты просто чаще пишут о проблемах у компаний, которые уже находятся в кризисе? И слова "убытки" - не причина негативного тона, а следствие уже существующих проблем?

Или хуже: что если есть скрытый фактор? Например, компания работает в "грязной" отрасли (нефть, табак). Про неё изначально пишут более критично. И слова "экология", "загрязнение" появляются не потому, что компания сделала что-то плохое прямо сейчас, а потому что она вообще существует в этой отрасли.

Вот здесь начинается causal inference.

💡
Causal inference в NLP - это не "ещё один метод машинного обучения". Это смена парадигмы. Вместо вопроса "Что связано?" мы начинаем спрашивать "Что бы произошло, если бы...?". Что бы произошло с тоном статьи, если бы мы убрали слово "скандал"? Что бы произошло с решением суда, если бы в документах не было упоминания о предыдущих нарушениях?

Sparse Autoencoders: как заставить нейросеть говорить правду о своих мыслях

Представьте, что вы психоаналитик для LLM. Модель генерирует текст. Вы спрашиваете: "Почему ты написала именно это?". Модель молчит. Вернее, она бы и рада ответить, но не может - её внутренние представления похожи на чёрный ящик внутри чёрного ящика.

Sparse autoencoders (разрежённые автоэнкодеры) - это попытка сделать рентген этого ящика.

Как это работает технически:

  1. Берём скрытые состояния LLM (те самые векторы, которые представляют "мысль" модели в конкретный момент)
  2. Пропускаем их через автоэнкодер с узким горлышком (bottleneck)
  3. Заставляем этот автоэнкодер быть разрежённым - то есть активировать только небольшой процент нейронов для каждого примера
  4. Смотрим, какие нейроны активируются для каких концептов

Звучит просто? На практике это ад.

Самая частая ошибка: думать, что один нейрон = одна концепция. На деле получается, что нейрон "любовь" активируется и для любви, и для ненависти, и для пиццы. Потому что все эти концепты эмоционально окрашены. Или потому что в тренировочных данных про любовь часто писали с пиццей (романтические ужины, вот это всё).

Именно здесь causal inference спасает ситуацию. Мы не просто смотрим на активации. Мы задаём контрфактуальные вопросы.

Что если бы в этом тексте не было слова "пицца"? Активировался бы нейрон "любовь"? Что если бы мы заменили "любовь" на "привязанность"? Изменилась бы активация?

Эксперименты с визуализацией скрытых состояний показывают: без causal framework вы видите красивые картинки, но не понимаете, что они значат.

HypotheSAES: таксономия, которая разделяет причины и следствия

Вот мы подобрались к самому интересному. HypotheSAES (Hypothesis-driven Sparse Autoencoder-based Explanations) - это не просто метод. Это целая философия.

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

Тип связиПример в текстеПочему это проблема для LLM
Прямая причинность"Дождь пошёл → улицы стали мокрыми"Модель путает с корреляцией (улицы могут быть мокрыми от поливалки)
Обратная причинность"Врач назначил лекарство → у пациента болезнь"LLM видит последовательность, но не понимает логику
Общая причина"Пожар → дым" и "Пожар → тревога"Модель может решить, что дым вызывает тревогу
Цепочка причин"Засуха → неурожай → рост цен"Пропуск промежуточных звеньев ведёт к ложным выводам

HypotheSAES предлагает алгоритм:

1Генерация гипотез

Не ждите, что модель сама догадается, какие признаки могут быть причинными. Вы должны предоставить "кандидатов". Например, для задачи определения тональности:

  • Гипотеза 1: Отрицательные эмоциональные слова ("ужасно", "кошмар") вызывают негативный тон
  • Гипотеза 2: Упоминание конкретных проблем ("увольнения", "штрафы") вызывает негативный тон
  • Гипотеза 3: Определённые синтаксические конструкции (восклицательные предложения, риторические вопросы) вызывают эмоциональную окраску

2Контрфактуальное тестирование

Для каждой гипотезы создаём пары текстов:

# Пример контрфактуальных пар для гипотезы 1
оригинал = "Компания показала ужасные результаты в квартале"
контрфакт = "Компания показала результаты в квартале"

# Для гипотезы 2
оригинал = "Из-за увольнений 100 сотрудников акции упали"
контрфакт = "Акции компании упали"

Ключевой момент: контрфакт должен отличаться ТОЛЬКО по проверяемому признаку. Если вы убираете "ужасные", нельзя менять ничего другого.

3Измерение эффекта через sparse autoencoder

Пропускаем оба текста через LLM + sparse autoencoder. Сравниваем активации. Если гипотеза верна:

  • В оригинальном тексте активируются нейроны, связанные с негативным тоном
  • В контрфактуальном тексте эти нейроны менее активны
  • Разница статистически значима

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

Таксономия текста: почему категории важнее слов

Самый тонкий момент во всём этом процессе. Когда вы работаете с причинностью в тексте, вы должны думать не в терминах слов, а в терминах категорий.

Пример: вы анализируете судебные решения. Хотите понять, какие факторы влияют на строгость приговора.

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

Проблема в том, что судьи не думают словами. Они думают категориями:

КатегорияКонкретные проявленияПочему это причинный признак
Умысел"заранее спланировал", "преднамеренно", "с целью"Влияет на квалификацию преступления
Общественная опасность"совершено в общественном месте", "пострадали несовершеннолетние"Влияет на оценку последствий
Характер подсудимого"ранее судим", "характеризуется положительно", "имеет иждивенцев"Влияет на оценку личности

Ваша задача - научить sparse autoencoder выделять именно эти категории, а не их конкретные лексические выражения.

Как это сделать? Через многоуровневую архитектуру:

  1. Первый уровень: выделение конкретных слов и фраз
  2. Второй уровень: группировка в семантические кластеры
  3. Третий уровень: абстрактные категории (умысел, последствия, характеристика)

И на каждом уровне - проверка причинности через контрфактуальные тесты.

💡
Это тот самый момент, где causal inference встречается с интерпретируемым ИИ. Вы не просто находите паттерн. Вы строите понятную человеку таксономию причинно-следственных факторов. И можете объяснить: "Вот эти три категории факторов влияют на решение судьи. Первый важнее второго в 1.5 раза. Третий становится значимым только в присутствии первых двух".

Практическое применение: от новостей до медицинских заключений

Где всё это работает на практике? Везде, где текст - не просто последовательность слов, а отражение реальных процессов.

Финансовые новости

Задача: предсказать движение акций на основе новостей.

Старый подход: искать слова "прибыль", "убытки", "слияние". Строить модель.

Новый подход с causal inference:

  • Выделяем причинные категории: "фундаментальные показатели", "регуляторные изменения", "рыночные слухи"
  • Для каждой категории находим языковые маркеры через sparse autoencoder
  • Проверяем: действительно ли упоминание регулятора влияет на цену? Или это просто корреляция (новости о регуляторе появляются, когда рынок уже падает)?

Медицинские истории болезни

Задача: предсказать исход лечения.

Самая опасная вещь здесь - спутать симптомы с причинами. Температура - симптом многих болезней. Но в causal framework мы можем спросить: "Если бы у пациента не было температуры, изменился бы прогноз?". Ответ зависит от конкретной болезни.

Исследование по сбору медицинских датасетов показывает: без causal подхода модели дают опасные рекомендации.

Юридические документы

Здесь causal inference спасает от самой коварной ошибки: путаницы между юридической квалификацией и фактическими обстоятельствами.

Пример: в деле о краже есть фраза "тайное хищение имущества". Это не просто описание действия. Это юридическая квалификация, которая уже содержит оценку. Модель, обученная на таких текстах, может решить, что слово "тайное" вызывает обвинительный приговор. Хотя на самом деле это просто часть определения преступления.

Типичные ошибки (и как их избежать)

Ошибка 1: Проверять причинность на тех же данных, на которых обучали sparse autoencoder. Результат: переобучение и ложные открытия. Всегда разделяйте данные на три части: обучение autoencoder, генерация гипотез, тестирование причинности.

Ошибка 2: Игнорировать контекстную зависимость. Причинный признак может работать только в определённом контексте. Например, слово "рост" в финансовых новостях - позитивно. В медицинских - может быть негативно (рост опухоли). Нужно тестировать гипотезы в разных контекстах.

Ошибка 3: Путать статистическую значимость с практической. Разница в активациях может быть статистически значимой, но незначимой по величине. Всегда смотрите на размер эффекта, а не только на p-value.

Инструменты и библиотеки: что использовать сегодня

Хорошие новости: вам не нужно писать всё с нуля. Плохие новости: готовых решений "под ключ" тоже нет.

Что работает в 2024:

  1. CausalNLP - библиотека для causal inference в текстовых данных. Есть методы для оценки причинных эффектов, но со sparse autoencoders работает плохо.
  2. Transformers + custom sparse autoencoder - собираете сами. Берёте любую модель из HuggingFace, добавляете слой sparse autoencoder, обучаете.
  3. DoWhy - для формализации причинных графов. Помогает структурировать гипотезы.
  4. Элементы из CausaNova - если помните статью про CausaNova, там были методы работы с доказательствами. Часть этого подхода можно адаптировать для проверки причинных гипотез.

Мой стек для таких проектов:

# Примерная архитектура
from transformers import AutoModel, AutoTokenizer
import torch
import torch.nn as nn

class SparseCausalAutoencoder(nn.Module):
    def __init__(self, hidden_size, bottleneck_size, sparsity_coef=0.01):
        super().__init__()
        self.encoder = nn.Linear(hidden_size, bottleneck_size)
        self.decoder = nn.Linear(bottleneck_size, hidden_size)
        self.sparsity_coef = sparsity_coef
        
    def forward(self, hidden_states):
        # Применяем sparsity через L1 регуляризацию
        encoded = self.encoder(hidden_states)
        l1_loss = torch.abs(encoded).mean() * self.sparsity_coef
        
        decoded = self.decoder(encoded)
        reconstruction_loss = torch.nn.functional.mse_loss(decoded, hidden_states)
        
        return decoded, reconstruction_loss + l1_loss, encoded

Что дальше: куда движется causal inference в NLP

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

Почему? Потому что без понимания причинности модели продолжают давать опасные советы. Потому что RAG-системы без causal фильтров болтают лишнего и выбирают между правдой и ложью наугад.

Но главный прорыв будет не в архитектурах. Он будет в данных.

Сейчас мы пытаемся выудить причинность из текстов, которые изначально не предназначены для такого анализа. Будущее - за специально размеченными корпусами, где каждый текст сопровождается:

  • Причинными графами (что из чего следует)
  • Контрфактуальными вариантами (как бы изменился текст, если бы факт X был иным)
  • Мета-разметкой о типах причинно-следственных связей

И последнее. Самый важный навык для работы с causal inference в NLP - не умение программировать или знать математику. Это способность думать контринтуитивно. Задавать вопросы "А что если бы всё было наоборот?". Сомневаться в очевидных корреляциях. Искать скрытые переменные.

Потому что в мире, где ИИ начинает принимать решения, разница между "связано" и "вызывает" - это разница между полезным помощником и опасным советчиком.