TL;DR
TreeED — метод, где LLM не проверяет данные напрямую, а создаёт дерево решений — пошаговый план проверок для обнаружения ошибок в таблицах. LLM получает описание таблицы, примеры строк и требования к структуре дерева, после чего генерирует схему: какие проверки делать, в каком порядке, куда идти при разных результатах. Дерево включает простые правила (формат, диапазон) и сложные узлы на основе нейросетей (для зависимостей между столбцами).
Проблема прямого подхода: когда LLM сразу отвечает "ошибка" или "норма" для каждой ячейки, решение необъяснимо (почему так решил?) и нестабильно (идентичный промпт даёт разные ответы из-за вероятностной природы LLM). При проверке больших таблиц одиночный детектор плохо улавливает разнообразные распределения ошибок, а стохастичность LLM усугубляет нестабильность результатов.
Решение: TreeED создаёт явную структуру рассуждений — каждая проверка записана как шаг в дереве с условиями перехода. ForestED усиливает робастность: создаёт несколько деревьев на разных подвыборках строк, затем через EM-алгоритм оценивает надёжность каждого дерева и вычисляет консенсусное решение без размеченных данных.
Схема метода
TreeED (одно дерево):
ШАГ 1: Промпт с контекстом → LLM генерирует скелет дерева решений
Входные данные: профиль таблицы + примеры строк + спецификация узлов
Выход: JSON со структурой дерева и путями для примеров
ШАГ 2: Построение дерева → Создание исполняемых узлов
Rule-узлы: простые проверки (код на Python)
GNN-узлы: обучаются на размеченных путях для сложных зависимостей
Leaf-узлы: финальное решение (ошибка/норма)
ШАГ 3: Проверка таблицы → Каждая ячейка проходит от корня до листа
Результат: матрица ошибок + объяснения (путь в дереве)
ForestED (ансамбль):
ШАГ 1: Сэмплирование → Uncertainty-based отбор подмножеств строк
ШАГ 2: Построение леса → TreeED создаёт дерево для каждого подмножества
ШАГ 3: EM-консенсус → Итерации E-step и M-step до сходимости
E-step: обновить консенсусные предсказания
M-step: обновить матрицы надёжности деревьев
Выход: финальная матрица ошибок
Extractable принципы для чата
⚠️ Важно: Полная реализация TreeED требует Python, GNN и инфраструктуру. Но идею можно адаптировать для работы в чате.
Принцип 1: LLM как архитектор проверок
Вместо "проверь эту ячейку" → "создай план проверок для таблицы".
Применение в чате:
Задача: Проверяешь таблицу заказов клиентов на ошибки.
Промпт:
Вот структура таблицы заказов:
- ID клиента (текст, уникальный)
- Email (текст)
- Возраст (число, 18-100)
- Дата заказа (дата в формате ДД.ММ.ГГГГ)
- Сумма заказа (число, рубли)
Создай пошаговый план проверок для обнаружения ошибок.
Для каждого типа ошибки опиши:
1. Какую проверку делать
2. В каком порядке (простые → сложные)
3. Что проверяется (один столбец или связь между столбцами)
Формат: дерево решений в текстовом виде.
Результат: Модель создаст структурированный план проверок: сначала формат (email содержит @, дата парсится), затем диапазоны (возраст положительный), затем зависимости (один ID клиента = один email). Ты получишь явную схему, которую можно применять вручную или попросить LLM проверить конкретные строки по этой схеме.
Принцип 2: Слои сложности проверок
Разбивай проверку данных на уровни: синтаксис → семантика → взаимосвязи.
Применение в чате:
Задача: Проверить список компаний с ИНН, адресами и оборотом.
Промпт:
Проверь таблицу в три слоя:
СЛОЙ 1 (Синтаксис):
- ИНН: ровно 10 или 12 цифр
- Адрес: не пустой
- Оборот: число > 0
СЛОЙ 2 (Семантика):
- ИНН: контрольная сумма корректна
- Адрес: город существует в России
- Оборот: в разумных пределах для отрасли
СЛОЙ 3 (Взаимосвязи):
- Один ИНН = одна компания (нет дублей с разными названиями)
- Оборот соответствует размеру компании по числу сотрудников
Для каждой строки покажи на каком слое найдена ошибка.
[вставить таблицу]
Результат: Модель последовательно применит проверки, сообщая где именно (на каком слое) обнаружена проблема. Это даёт объяснимость — видно не просто "ошибка", а "синтаксическая ошибка в ИНН" vs "семантическая несостыковка оборота и размера".
Принцип 3: Множественные независимые проверки + консенсус
Попроси LLM проверить данные несколькими "независимыми способами", затем сравни результаты.
Применение в чате:
Задача: Проверить достоверность данных о сделках.
Промпт (первый чат):
Проверь таблицу сделок на ошибки, фокусируясь на ФОРМАЛЬНЫХ правилах:
- Даты корректны
- Суммы положительные
- ID уникальны
[вставить таблицу]
Промпт (второй чат):
Проверь таблицу сделок на ошибки, фокусируясь на БИЗНЕС-ЛОГИКЕ:
- Сумма сделки соответствует типу клиента
- Даты последовательны (заказ → оплата → доставка)
- Менеджер существует в штате
[вставить таблицу]
Промпт (третий чат — агрегация):
Вот две независимые проверки одной таблицы:
ПРОВЕРКА 1 (формальная): [результаты]
ПРОВЕРКА 2 (бизнес-логика): [результаты]
Создай консенсусный список ошибок:
- Если обе проверки нашли ошибку → точно ошибка
- Если только одна → требует ручной проверки
Результат: Получишь более робастный результат — снижается влияние случайной вариативности LLM. Если две независимые проверки согласны, уверенность выше.
Почему оригинальный метод работает
Слабость LLM: Прямой ответ "ошибка/норма" для каждой ячейки непрозрачен (непонятно почему) и стохастичен (разные запуски → разные результаты). При масштабе одиночная модель не покрывает все типы ошибок стабильно.
Сильная сторона LLM: Отлично создаёт структурированные планы и рассуждает пошагово, если дать явную схему. Моделирование зависимостей через графы (GNN) эффективно для сложных кросс-атрибутных ошибок (один ID → один email), которые простые правила не поймают.
Как метод использует сильную сторону: TreeED переносит фокус с "ответь на вопрос" на "спроектируй систему проверок". LLM создаёт дерево — явную карту рассуждений, где каждый шаг записан. Простые ошибки ловят rule-узлы (executable код), сложные зависимости — обученные GNN-узлы. Путь от корня до листа = объяснение решения. ForestED добавляет робастность: несколько деревьев на разных данных "голосуют", их надёжность оценивается через EM-алгоритм (итеративное уточнение консенсуса без ground-truth разметки).
Рычаги (если адаптировать в чат):
- Глубина дерева — меньше уровней для простых таблиц (быстрее, дешевле токены)
- Типы узлов — убери GNN-логику, оставь только rule-узлы для лёгких случаев
- Число примеров — больше примеров строк → точнее дерево, но дороже
- Число деревьев в лесу — 3-5 деревьев для консенсуса vs 1 дерево (скорость vs робастность)
Ограничения
⚠️ Требует инфраструктуру: Полная реализация TreeED/ForestED требует Python, обучение GNN-узлов, API-вызовы LLM для построения деревьев. Это не работает напрямую в чате — нужен код.
⚠️ GNN для сложных зависимостей: Если ошибки связаны с функциональными зависимостями (FD) между столбцами или графовыми структурами данных, без обученных GNN-моделей не обойтись. Чистые текстовые проверки в чате не заменят.
⚠️ Масштаб таблиц: Метод тестировался на таблицах с тысячами строк. В чате ChatGPT/Claude ограничение контекста не позволит загрузить большую таблицу целиком — нужна порционная обработка или API.
⚠️ EM-алгоритм: Консенсус через Expectation-Maximization (итерации E-step/M-step) требует программной реализации — вручную в чате не сделать.
Ресурсы
Ensembling LLM-Induced Decision Trees for Explainable and Robust Error Detection
GitHub: https://github.com/T-Lab/ForestED
Авторы: Mengqi Wang, Jianwei Wang, Qing Liu, Xiwei Xu, Zhenchang Xing, Liming Zhu, Wenjie Zhang (UNSW Sydney, Data61 CSIRO)
