3,583 papers
arXiv:2512.01672 74 1 дек. 2025 г. FREE

In-Context Anomaly Detection (ICAD): поиск аномалий через сравнение с эталоном

КЛЮЧЕВАЯ СУТЬ
Обнаружено: LLM плохо работает с абстрактным понятием «норма». Просишь «найди что не так» — модель опирается на размытые паттерны из обучения, которые могут не совпадать с твоим контекстом. При этом модель отлично сравнивает конкретное с конкретным — дай два текста, она найдёт даже тонкие отличия. ICAD (In-Context Anomaly Detection) использует эту силу: переносит определение нормы из памяти модели в явный контекст запроса. Даёшь 3-5 примеров того, что считается нормой → модель сравнивает целевой образец с ними → выдаёт отклонения. Работает для любых данных без дообучения: проверка текстов, поиск выбросов, контроль качества.
Адаптировать под запрос

TL;DR

In-Context Anomaly Detection (ICAD) — принцип работы с LLM, при котором аномалии определяются через явное сравнение с референсным набором нормальных примеров, а не через абстрактное понятие "нормы". Вместо того чтобы просить модель "найди что не так" (полагаясь на её заученное представление о правильном), вы сначала показываете 3-5 примеров того, что считается нормой, а затем даёте образец для проверки.

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

ICAD решает это перенося определение нормы из памяти модели в контекст запроса. Вы даёте референсные примеры прямо в промпте → модель сравнивает целевой образец с ними → выдаёт оценку отклонения. Этот подход работает универсально: для проверки текстов, оценки данных, поиска выбросов в любых последовательностях.

📌

Схема принципа

ТРАДИЦИОННЫЙ ПОДХОД:
Промпт: "Найди аномалии в этих данных: {данные}"
↓
LLM пытается вспомнить "что обычно нормально"
↓
Результат зависит от обучения модели

ICAD ПОДХОД:
Шаг 1: Собери 3-5 примеров нормы
Шаг 2: Промпт с явным контекстом
↓
"Вот примеры нормальных образцов:
{пример 1}
{пример 2}
{пример 3}

Насколько этот образец отличается от них?
{целевой образец}"
↓
LLM сравнивает конкретное с конкретным

Всё выполняется в одном запросе.

🚀

Пример применения

⚠️ Сильная зона метода: Задачи где есть чёткие образцы нормы и нужно найти отклонения. Хорошо работает для структурированных данных, повторяющихся паттернов, оценки качества по эталону.

Задача: Проверяешь заявки на грант. У тебя есть 5 одобренных заявок прошлого года и новая заявка. Нужно понять, насколько новая отличается от успешных — не "хорошая ли она вообще", а именно "вписывается ли в паттерн того, что проходило раньше".

Промпт:

Вот 5 заявок, которые были одобрены в прошлом году:

ЗАЯВКА 1:
[текст успешной заявки — 2-3 абзаца: цель, методы, бюджет]

ЗАЯВКА 2:
[текст успешной заявки]

ЗАЯВКА 3:
[текст успешной заявки]

ЗАЯВКА 4:
[текст успешной заявки]

ЗАЯВКА 5:
[текст успешной заявки]

---

Теперь оцени новую заявку:

НОВАЯ ЗАЯВКА:
[текст проверяемой заявки]

---

Задача: Найди все существенные отличия новой заявки от референсных. 
Что в ней выбивается из паттерна одобренных заявок?

Оцени по пунктам:
1. Структура и подача
2. Обоснование цели
3. Методология
4. Бюджет и ресурсы
5. Общий тон и стиль

Для каждого пункта укажи:
- Соответствие паттерну (норма/отклонение)
- Если отклонение — насколько сильное и в чём конкретно

Результат:

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

🧠

Почему это работает

LLM плохо держит абстрактное понятие "нормы" без конкретных примеров. Когда вы пишете "найди ошибки", модель опирается на общие паттерны из обучения — они размыты, зависят от формулировки, могут не совпадать с вашим контекстом. Результат: модель находит "что-то не то", но не обязательно то, что важно именно вам.

При этом LLM отлично умеет сравнивать конкретное с конкретным. Дайте ей два текста и попросите найти отличия — она пройдётся по структуре, стилю, содержанию, найдёт даже тонкие расхождения. Эта способность к прямому сопоставлению работает надёжно, потому что модель не додумывает абстрактный эталон, а анализирует то, что видит перед собой.

ICAD использует эту силу: переносит определение нормы из головы модели в явный контекст. Вместо "помни что такое хорошо" → "вот 5 примеров хорошего, сравни с ними". Модель перестаёт гадать и начинает работать в режиме точного сопоставления.

Рычаги управления:

  • Число референсных примеров (3-5-7) → больше примеров = устойчивее паттерн, но длиннее промпт. Для простых задач хватит 3, для неоднозначных — 5-7.
  • Критерии сравнения ("структура, стиль, тон") → явно перечисли что важно, чтобы модель фокусировалась на нужных аспектах, а не на случайных деталях.
  • Формат вывода ("оцени по шкале 1-10" vs "опиши отклонения") → численная оценка для быстрого скрининга, описание для глубокого анализа.
  • Тип референса (успешные/провальные примеры, эталоны разного качества) → можешь показать не только "идеал", но и "грань допустимого", чтобы модель понимала диапазон нормы.
📋

Шаблон промпта

Вот {N} примеров нормальных образцов для задачи "{описание_задачи}":

ОБРАЗЕЦ 1:
{референсный_пример_1}

ОБРАЗЕЦ 2:
{референсный_пример_2}

ОБРАЗЕЦ 3:
{референсный_пример_3}

[добавь ещё примеры если нужно]

---

Теперь проверь этот образец:

{целевой_образец}

---

Задача: Найди все отклонения целевого образца от паттерна референсных.

Оцени по критериям:
{критерий_1}
{критерий_2}
{критерий_3}

Для каждого критерия укажи:
- Соответствие паттерну (норма/отклонение)
- Если отклонение — насколько сильное и в чём конкретно

Что подставлять:

  • {N} — обычно 3-5 примеров, для сложных паттернов можно 7
  • {описание_задачи} — контекст, чтобы модель понимала что считать важным
  • {референсный_пример_X} — образцы "нормы": тексты, данные, последовательности
  • {целевой_образец} — то, что проверяешь
  • {критерий_X} — аспекты для сравнения (структура, стиль, числовые показатели, логика)

🚀 Быстрый старт — вставь в чат:

Вот принцип ICAD для поиска аномалий. Адаптируй под мою задачу: [опиши свою задачу — что проверяешь и что считается нормой].

Задай мне вопросы:
- Какие примеры "нормы" у меня есть?
- По каким критериям сравнивать?
- Что важно найти — сильные отклонения или любые различия?

После этого создай промпт по шаблону:

[вставить шаблон выше]

LLM спросит какие у тебя есть образцы нормы, что проверяешь, какие аспекты важны — потому что для ICAD критично правильно подобрать референсные примеры (они должны представлять именно тот паттерн, относительно которого ищешь аномалии). Она возьмёт структуру сравнения из принципа и адаптирует под твой контекст.

⚠️

Ограничения

⚠️ Нужны качественные образцы нормы: Если референсные примеры сами неоднородны или содержат скрытые аномалии, модель будет сравнивать с искажённым паттерном. Принцип работает настолько хорошо, насколько чисты образцы.

⚠️ Субъективные критерии: Для задач где "норма" размыта и зависит от контекста (например, "креативность текста", "уместность шутки"), сравнение с примерами даст механистический результат. Модель найдёт формальные отличия, но может упустить суть.

⚠️ Длина контекста: Каждый референсный пример съедает токены. Для объёмных данных (длинные тексты, большие таблицы) придётся либо сокращать примеры, либо уменьшать их число, что снижает точность паттерна.

⚠️ Новый тип аномалии: Если отклонение принципиально новое (не встречалось ни в референсах, ни в обучении модели), LLM может его не распознать или недооценить, потому что нет базы для сравнения.

🔍

Как исследовали

Команда из Beihang University создала систему ICAD-LLM, которая обучалась находить аномалии в трёх разных типах данных одновременно: временные ряды (графики, метрики серверов), таблицы (датасеты с числами и категориями), логи (текстовые записи событий). Обычно для каждого типа данных используют отдельную модель — здесь проверяли, можно ли научить одну модель работать со всем сразу.

Взяли небольшую LLM (Qwen2.5-0.5B — это крошечная модель, для сравнения: ChatGPT в сотни раз больше), добавили специальные энкодеры для каждого типа данных (преобразуют временные ряды/таблицы/логи в единый формат) и обучили через контрастное обучение: показывали модели референсный набор нормальных примеров + нормальный образец (должна сказать "похож") + аномальный образец (должна сказать "не похож"). Обучали 5 эпох на 200 тысячах примеров из разных источников.

Тестировали на 27 датасетах (5 — временные ряды, 18 — таблицы, 4 — логи). Для каждого теста формировали референсный набор из 5 случайных нормальных образцов и проверяли, насколько хорошо модель отличает нормальные примеры от аномалий. Главная проверка: давали модели датасеты, которые она никогда не видела во время обучения — проверяли способность обобщать.

Результаты оказались неожиданными: универсальная модель почти не уступила специализированным методам (разница 1-3%), а на некоторых датасетах даже превзошла их. Это подтвердило ключевой инсайт: если научить модель сравнивать, а не запоминать, она становится гибче. На новых задачах (которых не было в обучении) ICAD-LLM показала AUROC 85-90%, в то время как традиционные методы проваливались до 60-70% или вообще не могли работать без переобучения.

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

💡

Адаптации и экстраполяции

🔧 Техника: Двусторонний референс → понимание диапазона нормы

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

Пример: Проверяешь рекламные тексты. Вместо "вот 5 хороших примеров" → "вот 3 минималистичных текста (нижняя граница нормы) + 3 экспрессивных текста (верхняя граница)". Модель поймёт диапазон допустимого, а не точечный образец.

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

МИНИМАЛИЗМ (нижняя граница):
{пример 1 — сдержанный, фактический}
{пример 2 — короткий, без эмоций}

ЭКСПРЕССИЯ (верхняя граница):
{пример 3 — яркий, с восклицаниями}
{пример 4 — образный, с метафорами}

Проверь этот текст — вписывается ли он в диапазон или выходит за границы?
{целевой текст}

🔧 Техника: Градуированный референс → количественная оценка отклонения

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

Вот примеры откликов на вакансию с оценками (шкала 1-10):

ОТКЛИК 1 (оценка: 9/10):
{текст сильного отклика}

ОТКЛИК 2 (оценка: 7/10):
{текст среднего отклика}

ОТКЛИК 3 (оценка: 4/10):
{текст слабого отклика}

Оцени новый отклик по той же шкале, объясни какие элементы тянут оценку вверх/вниз:
{целевой отклик}
🔗

Ресурсы

ICAD-LLM: One-for-All Anomaly Detection via In-Context Learning with Large Language Models

Zhongyuan Wu, Jingyuan Wang, Zexuan Cheng, Yilong Zhou, Weizhi Wang, Juhua Pu, Chao Li (Beihang University), Changqing Ma (Capinfo Co., Ltd.)

Код исследования: https://github.com/nobody384/ICAD-LLM


📋 Дайджест исследования

Ключевая суть

Обнаружено: LLM плохо работает с абстрактным понятием «норма». Просишь «найди что не так» — модель опирается на размытые паттерны из обучения, которые могут не совпадать с твоим контекстом. При этом модель отлично сравнивает конкретное с конкретным — дай два текста, она найдёт даже тонкие отличия. ICAD (In-Context Anomaly Detection) использует эту силу: переносит определение нормы из памяти модели в явный контекст запроса. Даёшь 3-5 примеров того, что считается нормой → модель сравнивает целевой образец с ними → выдаёт отклонения. Работает для любых данных без дообучения: проверка текстов, поиск выбросов, контроль качества.

Принцип работы

Не полагайся на то, что модель «помнит» что правильно — покажи эталоны прямо в промпте. Традиционный подход: модель обучают запоминать норму для конкретной задачи → она негибкая, на новых данных теряется. ICAD работает через прямое сопоставление: вот 5 образцов нормы, вот проверяемый — найди отличия. Модель перестаёт гадать об абстрактном «правильном» и начинает работать в режиме точного сравнения.

Почему работает

LLM плохо держит размытое представление о норме — оно зависит от формулировки, контекста, может не совпадать с твоими критериями. Результат: модель находит «что-то не то», но не обязательно то, что важно тебе. При этом способность к прямому сопоставлению работает надёжно. Дай конкретные примеры — модель пройдётся по структуре, стилю, содержанию, найдёт даже тонкие расхождения. Она не додумывает эталон, а анализирует то что видит перед собой. Исследование показало: этот подход работает универсально на разных типах данных, где традиционные методы требуют отдельного обучения для каждой задачи.

Когда применять

Контроль качества и проверка соответствия стандартам → для оценки заявок, документов, кода по эталонам. Поиск выбросов в данных → когда есть образцы нормы и нужно найти что не вписывается в паттерн. Особенно ценно когда данные меняются (новые типы аномалий, другой контекст) — не нужно переобучать модель, достаточно обновить референсные примеры в промпте. НЕ подходит для субъективных оценок где норма размыта (креативность, уместность шуток) — модель найдёт формальные отличия, но может упустить суть.

Мини-рецепт

1. Собери 3-5 образцов нормы: Примеры должны быть чистыми (без скрытых аномалий) и представлять именно тот паттерн, относительно которого ищешь отклонения. Для простых задач хватит 3, для неоднозначных — 5-7.

2. Перечисли критерии сравнения: Структура, стиль, тон, числовые показатели — явно укажи что важно проверить. Модель будет фокусироваться на этих аспектах, а не на случайных деталях.

3. Построй промпт: Сначала блок с референсами (Вот N примеров нормальных образцов), потом целевой образец (Проверь этот), затем задача (Найди отклонения по критериям: ...). Запроси формат вывода: численная оценка для скрининга или описание для глубокого анализа.

Примеры

[ПЛОХО] : Найди аномалии в этой заявке на грант: [текст заявки] — модель опирается на общие представления о грантах, может найти не то что важно тебе.
[ХОРОШО] : Вот 5 одобренных заявок прошлого года: [тексты]. Теперь оцени новую заявку: [текст]. Найди отличия от референсных по пунктам: структура, обоснование цели, методология, бюджет, стиль. Для каждого укажи: норма/отклонение, если отклонение — насколько сильное — модель сравнивает конкретное с конкретным, находит где новая заявка повторяет паттерн успешных, где выбивается.
Источник: ICAD-LLM: One-for-All Anomaly Detection via In-Context Learning with Large Language Models
ArXiv ID: 2512.01672 | Сгенерировано: 2026-01-08 23:12
📖 Простыми словами

In-Context Anomaly Detection (ICAD): поиск аномалий через сравнение с эталоном

arXiv: 2512.01672

Нейросети на самом деле понятия не имеют, что такое «норма». Когда ты просишь модель найти ошибку в тексте или коде, она не сверяется с внутренним эталоном, а просто гадает на основе того, что видела в интернете. Это абстрактное представление о правильном — штука крайне ненадежная: сегодня модель считает это нормой, а завтра у нее «плохое настроение», и она галлюцинирует проблему там, где ее нет. Метод ICAD-LLM меняет саму механику процесса: вместо того чтобы заставлять AI вспоминать теорию, ему дают конкретную линейку для измерения.

Это как если бы ты нанял нового сотрудника на склад и сказал: «Ищи бракованные детали». Он в жизни их не видел, поэтому будет тупить и браковать всё подряд. Но если ты положишь перед ним три идеальные детали и скажешь: «Смотри на них и сравнивай с тем, что едет по ленте», работа пойдет моментально. В этом и суть In-Context Anomaly Detection: мы не надеемся на эрудицию модели, а создаем для нее жесткий контекст из эталонов прямо здесь и сейчас.

Технически это работает через явное сравнение с референсным набором. Ты скармливаешь модели 3–5 примеров чистых данных, а следом кидаешь подозрительный образец. Модель перестает витать в облаках и начинает работать как дифференциальный сканер. Она видит: «Так, в эталонах везде есть точка с запятой и тип данных float, а в этом куске — какая-то херня с буквами». Такой подход убивает неопределенность, потому что у AI перед глазами есть шпаргалка с правильными ответами.

Хотя метод тестировали на поиске аномалий, принцип сравнения с эталоном применим везде, где нужно выдержать стандарт. Это работает для проверки стиля статей, аудита логов сервера или контроля качества ответов поддержки. Если у тебя есть золотой стандарт, не заставляй модель его угадывать — просто покажи его. Контекстное обучение превращает капризный генератор текста в точный инструмент контроля, который не спорит с тобой о вкусах, а просто ищет отличия.

Короче, забудь про промпты в духе «проверь, всё ли тут нормально» — это путь в никуда. Нужно давать конкретные примеры нормы, чтобы модель видела границы дозволенного. ICAD-LLM доказывает, что несколько хороших примеров в промпте стоят тысячи слов описания задачи. Либо ты даешь модели референс, либо получаешь рандомный результат и гадаешь, почему всё сломалось.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с