3,583 papers
arXiv:2610.15712 78 11 окт. 2026 г. FREE

TL;QR: LLM размечает отдельные фрагменты, а счёт и время считает программа

КЛЮЧЕВАЯ СУТЬ
Обнаружено: большая языковая модель (LLM) отлично понимает каждый отзыв по отдельности. Но на тысячах текстов она путает счёт, порядок и даты. Метод TL;QR позволяет найти в большом корпусе, кто и когда сменил тон. Например, город, где доставку хвалили, а потом начали ругать. Каждый вывод можно проверить. Модель отвечает только «да/нет» про один фрагмент, а скользящее окно по времени и сравнение «за/против» считает обычный движок на правилах. Перед моделью стоит дешёвый фильтр по ключевым словам. Поэтому в неё попадает лишь малая часть корпуса.
Адаптировать под запрос
⚡

TL;DR

TL;QR (Too Long; Query with logical temporal Reasoning) делит работу пополам. LLM отвечает только на локальные вопросы про каждый отдельный текст, например «этот отзыв положительный?». Всё остальное делает обычный движок на правилах: считает, упорядочивает, сравнивает группы и ищет окна во времени. Паттерн описывается одним запросом на специальном языке. Перед LLM стоит дешёвый фильтр по ключевым словам (regexp), и в модель попадает лишь малая часть корпуса.

Главная находка: LLM плохо справляются со счётом и порядком событий на длинной дистанции, даже если сами тексты понимают прекрасно. Типичная картина: «группа перешла от поддержки к критике» превращается в «то нашла, то нет, а даты съехали». Авторы проверили это отдельно. Одна LLM извлекла те же метки, что и TL;QR, а вторая LLM рассуждала по ним о времени. Эта связка оказалась заметно хуже движка, а на некоторых задачах хуже даже простого запроса «найди сам». Значит, проблема не в разметке, а в том, что модель считает «в голове».

Метод работает в 4 шага: фильтр → разметка LLM → подсчёт по скользящему окну → правило срабатывания. Каждый найденный случай привязан к конкретным фрагментам и решениям модели, поэтому результат можно перепроверить.

🔬

Схема метода

ШАГ 1: Regexp-фильтр отсекает неподходящие тексты → остаются «кандидаты» (LLM не вызывается)
ШАГ 2: LLM отвечает «да/нет» на локальный вопрос по каждому кандидату → метки Pos / Neg
ШАГ 3: Движок считает метки в скользящем окне (ONCE [0,N], CNT) → «в основном за / против»
ШАГ 4: Движок проверяет условие сдвига (было «за», стало «не за») → найденная группа + время + список фрагментов-доказательств

Шаги 1–4 выполняет движок, а не один промпт. LLM вызывается только на шаге 2.

🚀

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

Задача: Аналитик «Самоката» хочет понять, в каких городах отзывы о доставке за последний год перешли от «в основном хвалят» к «в основном ругают». Отзывов десятки тысяч. Просить чат «найди города, где тон испортился» бесполезно: он собьётся на счёте и датах.

Запрос (по структуре из статьи, окно 90 дней, g — город):

LET Snip(g, s) = EXISTS r. Review(r, g, s)
    AND /(доставк|курьер|опозд|свеж|просроч)/s IN
LET Pos(g) = EXISTS s. Snip(g, s)
    AND "{s} — положительный отзыв о доставке" IN
LET Neg(g) = EXISTS s. Snip(g, s)
    AND "{s} — отрицательный отзыв о доставке" IN
LET PosN(g,x) = x <
    CNT (t; g; ONCE [0,90] (Pos(g) AND tp (t))) IN
LET NegN(g,y) = y <
    CNT (t; g; ONCE [0,90] (Neg(g) AND tp (t))) IN
LET MostlyPos(g) = EXISTS x,y.
    PosN(g,x) AND NegN(g,y) AND x >= y IN
Neg(g) AND PREV MostlyPos(g) AND NOT MostlyPos(g)

Результат: Движок вернёт список городов, где тон сменился, и дату сдвига. К каждому городу приложены отзывы-доказательства и счётчики «за/против» в окне. Отзывы без слов про доставку в LLM не попадут, это экономит вызовы. Метки можно проверить вручную на выборке.

🧠

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

Слабость LLM. Задача «посчитай, упорядочь и сравни по тысячам текстов» требует держать счётчик в голове на длинной дистанции. Модель генерирует правдоподобный текст, а не считает. Ошибки накапливаются, и результат расплывается.

Сильная сторона LLM. На коротком локальном вопросе («тон этого фрагмента положительный?») она точна. Это её родная территория.

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

Рычаги управления: - Regexp-фильтр → расширь слова, чтобы не терять релевантное (полнота), или сузь, чтобы меньше платить. - Формулировка утверждения в кавычках → точнее вопрос, точнее метки. Это главная точка настройки качества. - Окно ONCE [0,N] → короче окно ловит быстрые сдвиги, длиннее сглаживает шум. - Условие в последней строке → заменяй на своё: «набрал ≥15 негативных за окно», «отложил решение и не вернулся». - Размер модели → в экспериментах дешёвая модель в TL;QR работала почти так же, как дорогая.

📋

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

Это шаблон запроса на языке TL;QR, с сохранением каскада из статьи. Подставь свои данные:

LET Snip(g, s) = EXISTS e. {Событие}(e, g, s)
    AND /({слова_фильтра})/s IN
LET Pos(g) = EXISTS s. Snip(g, s)
    AND "{s} {утверждение_позитив}" IN
LET Neg(g) = EXISTS s. Snip(g, s)
    AND "{s} {утверждение_негатив}" IN
LET PosN(g,x) = x <
    CNT (t; g; ONCE [0,{окно_дней}] (Pos(g) AND tp (t))) IN
LET NegN(g,y) = y <
    CNT (t; g; ONCE [0,{окно_дней}] (Neg(g) AND tp (t))) IN
LET MostlyPos(g) = EXISTS x,y.
    PosN(g,x) AND NegN(g,y) AND x >= y IN
Neg(g) AND PREV MostlyPos(g) AND NOT MostlyPos(g)
  • {Событие} — тип записи в корпусе (Review, Speech, Ticket).
  • g — группа, по которой ищешь сдвиг (город, партия, клиент).
  • {слова_фильтра} — корни слов через |.
  • {утверждение_…} — короткая проверяемая фраза про фрагмент.
  • {окно_дней} — размер скользящего окна.

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

Вот шаблон запроса TL;QR. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.

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

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

Запросы выполняет открытый движок TL;QR, а не сам чат. Чат поможет написать и отладить запрос.

⚠️

Ограничения

⚠️ Нужен движок, а не промпт: метод — это инструмент: установка, Python, ключи API, запросы на специальном языке. Без этого он не работает. В обычном чате применим только сам принцип разделения труда.

⚠️ Синтетические данные: количественная проверка шла на сгенерированных парламентских корпусах. Реальный язык грязнее, формулировки хитрее.

⚠️ Сложные паттерны всё равно тяжёлые: на задаче «отложил позицию и не вернулся» метод набрал лишь 62–75% точности (F1), хотя соперники были ещё хуже.

⚠️ Простые паттерны не требуют метода: в сдвиге тона на малых корпусах обычный запрос с сильной моделью тоже дал почти 100%. Метод окупается на длинных корпусах и сложных условиях.

⚠️ Фильтр может отрезать нужное: regexp, составленный неудачно, теряет релевантные тексты, и LLM их уже не увидит.

⚠️ Реальный кейс без эталона: на парламенте ЕС метод нашёл только «кандидаты на сдвиги». Истинность не проверяли. Результат — повод изучить, не вердикт.

⚠️ Только прошлое: язык поддерживает лишь операторы «что было раньше», будущее не описать.

🔍

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

Идея была простой: если LLM плохи в счёте по времени, отдайте им только разметку. Авторы построили три синтетических парламентских корпуса (1,5 тыс., 3 тыс. и 4,5 тыс. событий) с заранее спрятанными паттернами. Паттерны: смена позиции группы, «отложил и не вернулся», координированная травля цели. Тексты написала LLM, и все методы видели одни и те же данные. Сравнивали TL;QR с четырьмя соперниками: словарь с эвристикой, zero-shot, few-shot и связка из двух LLM (первая размечает, вторая рассуждает о времени). Все LLM прогнали в трёх размерах одной линейки моделей, результаты усреднили по трём запускам.

Что удивило: двухступенчатая связка LLM часто проигрывала даже простому запросу. Она получала те же метки, что и TL;QR, но терялась на временной части. Это доказывает, что слабое место — именно рассуждение о времени, а не разметка. На «отложил и не вернулся» TL;QR дал 62–75% против 30–45% у лучших LLM-соперников. На травле — около 100% против 0–33%.

Затем метод применили к 442 593 речам Европарламента за десять лет на теме GDPR. Стоимость LLM составила менее $2 благодаря фильтру и кэшу одинаковых запросов. Для практика вывод такой: самое дорогое и ненадёжное место в анализе текстов во времени — это не разметка, а счёт и порядок.

💡

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

🔧 Техника: перенеси принцип в обычный чат → то же разделение труда без движка

Идея: LLM размечает, а счёт делает таблица или скрипт.

Шаг 1. Вот {N} отзывов с датами и городами. Для каждого верни строку
таблицы: дата | город | про_доставку (да/нет) | тон (положительный/
отрицательный/нейтральный). Больше ничего не считай и не выводи выводов.

Шаг 2 (новый чат или код). Вот таблица. Напиши формулу Excel или
скрипт Python: по каждому городу посчитай за скользящие 90 дней число
положительных и отрицательных и найди даты, когда «положительных ≥
отрицательных» сменилось на обратное.

Это перенос принципа, а не метод из статьи. Но он следует из её главной находки: LLM не должна считать сама. Для больших объёмов разбивай отзывы на пачки.

Экстраполяция: проверка метки перед счётом.

Вот 30 случайных строк из таблицы с твоими метками. Для каждой скажи,
согласен ли ты с меткой, и если нет — какая метка верна. В конце
посчитай долю несогласий.

Так ты оцениваешь шум в разметке до того, как верить сдвигам. Это вытекает из идеи аудита, но в статье в таком виде не проверялось.

🔗

Ресурсы

  • Работа: TL;QR: Querying Temporal Discursive Patterns in Textual Corpora
  • Авторы: François Hublet, Vladimir Krsmanović, Jesús Solano, Ahmed Bouhoula, Ana Oliveira da Costa
  • Организации: ETH Zürich, CISPA Helmholtz Center for Information Security, IST Austria
  • Основа: метрическая временная логика первого порядка (MFOTL); символьный движок EnfGuard (Hublet et al., 2025)
  • Сопутствующие работы: LOTUS, Palimpzest, DocETL, VectraFlow

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

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

Обнаружено: большая языковая модель (LLM) отлично понимает каждый отзыв по отдельности. Но на тысячах текстов она путает счёт, порядок и даты. Метод TL;QR позволяет найти в большом корпусе, кто и когда сменил тон. Например, город, где доставку хвалили, а потом начали ругать. Каждый вывод можно проверить. Модель отвечает только «да/нет» про один фрагмент, а скользящее окно по времени и сравнение «за/против» считает обычный движок на правилах. Перед моделью стоит дешёвый фильтр по ключевым словам. Поэтому в неё попадает лишь малая часть корпуса.

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

Четыре шага. Модель работает только на втором. 1. Фильтр по ключевым словам отсекает лишнее. Модель здесь не нужна. 2. Модель ставит метку «за» или «против» каждому оставшемуся тексту. 3. Движок считает метки в окне. Например, за последние 90 дней. 4. Движок ищет момент, когда «в основном за» стало «не за». Модель выносит суждения, а программа считает. Это разделение труда. Редактор читает и оценивает, бухгалтер складывает цифры. Никто не лезет в чужую работу. Запрос пишется один раз на специальном языке. Дальше его можно менять: другое окно, другое условие. Например, «набрал 15 и больше негативных за окно».

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

Модель пишет правдоподобный текст, а не считает. Держать счётчик на тысячах фрагментов для неё тяжело. Ошибки копятся, даты съезжают, группа «то находится, то нет». Авторы проверили это отдельно. Одна LLM достала те же метки, что и TL;QR. Вторая рассуждала по ним о времени. Метки были те же, а результат заметно хуже движка. На части задач даже хуже простого запроса «найди сам». Значит, проблема не в понимании текста. Проблема в счёте «в голове». Есть и приятные бонусы. Каждый вердикт раскладывается на конкретные фрагменты и решения модели. Проверить можно вручную. А дешёвая модель в TL;QR работала почти так же, как дорогая.

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

Анализ потока текстов с датами → поиск сдвига позиции у группы, особенно когда текстов десятки тысяч. Подходят отзывы по городам, обращения по клиентам, выступления по партиям. Условие сдвига можно менять: «перешли от похвал к критике», «набрали 15 жалоб за окно», «отложили решение и не вернулись». НЕ подходит для обычного чата. Нужны установка, Python и ключи API. В чате работает только сам принцип. НЕ нужен и для малых корпусов: простой запрос с сильной моделью там дал почти 100%. Учти риски. Проверяли на сгенерированных парламентских текстах, реальный язык грязнее. На сложной задаче «отложил и не вернулся» точность (F1) была лишь 62–75%. Неудачный фильтр отрежет нужные тексты, и модель их не увидит. На реальном корпусе ЕС эталона нет. Результат там — повод разобраться, а не вердикт.

Мини-рецепт

1. Выбери путь: полный (открытый движок TL;QR) или лёгкий (принцип в чате плюс таблица или Python для счёта).
2. Назови группу: по чему ищешь сдвиг. Город, партия, клиент.
3. Поставь фильтр: корни слов через |. Расширяй, если теряешь нужное. Сужай, если дорого.
4. Напиши короткую фразу для метки: <утверждение>этот отзыв — отрицательный про доставку. Это главная точка настройки качества.
5. Выбери окно: короткое ловит быстрые сдвиги, длинное сглаживает шум.
6. Задай условие сдвига: было «в основном за», стало «не за».
7. Проверь выборку руками: сверь метки модели со своим мнением.

Быстрый старт: вставь шаблон запроса из статьи в чат и напиши Адаптируй этот шаблон TL;QR под мою задачу: [задача]. Задавай вопросы, чтобы заполнить поля. Чат спросит про тексты, группу, слова фильтра и окно. Сам запрос выполнит движок, а не чат.

Примеры

[ПЛОХО]: `Вот 20 000 отзывов за год. Найди города, где тон о доставке испортился.` [ХОРОШО, принцип в чате]: `Вот один отзыв. Ответь только словом ЗА или ПРОТИВ: это положительный отзыв о доставке? Если про доставку ничего нет, ответь ПРОПУСК.` Прогони так все отзывы по одному. Метки сложи в таблицу «город, дата, метка». Скользящие 90 дней и сравнение «за/против» посчитай формулой или в Python, а не в чате. [ХОРОШО, полный метод]: в запросе TL;QR фильтр `/(доставк|курьер|опозд|свеж|просроч)/`, окно 90 дней и условие `Neg(g) AND PREV MostlyPos(g) AND NOT MostlyPos(g)`. Движок вернёт города, дату сдвига и отзывы-доказательства. Отзывы без слов про доставку модель вообще не увидит.
Источник: TL;QR: Querying Temporal Discursive Patterns in Textual Corpora
ArXiv ID: 2610.15712 | Сгенерировано: 2026-10-14 06:00

Проблемы LLM

ПроблемаСутьКак обойти
Модель сбивается на счёте и порядке событий по многим текстамДаёшь тысячи текстов с датами. Просишь: «найди, где тон сменился с хвалебного на критический». Каждый текст модель понимает верно. Но счётчик «в голове» она держать не может. Подсчёт плывёт, даты съезжают, результат нестабилен. Ошибка остаётся, даже если метки по каждому тексту уже готовы. Модель генерирует правдоподобный текст, а не считаетНе проси модель считать и сравнивать по времени. Пусть она только ставит метки каждому тексту по отдельности. Счёт, сортировку и окна по датам отдай коду или таблице. Подробности в методе ниже

Методы

МетодСуть
Модель размечает, код считаетЧто делать: разбей задачу на два слоя. Слой 1: модель получает один фрагмент и один узкий вопрос с ответом да/нет. Например: Фрагмент: {текст}. Это отрицательный отзыв о доставке? Ответь: да или нет. Слой 2: ответы собери в таблицу (дата, группа, метка). Дальше считай Python-ом или формулами: подсчёт за скользящее окно (например, 90 дней), сравнение «за/против», проверка условия сдвига. Почему работает: на коротком локальном вопросе модель точна. Арифметика и порядок по времени у кода безошибочны. Каждый вывод ещё и проверяем: он раскладывается на конкретные фрагменты и их метки. Доработки: (1) Перед моделью поставь дешёвый фильтр по ключевым словам (корни слов). Он отсечёт нерелевантное и сэкономит вызовы. Но плохой список слов теряет нужные тексты безвозвратно, поэтому расширяй его и проверяй на выборке. (2) Формулировка вопроса к фрагменту — главная точка настройки качества. Делай её короткой и проверяемой. Когда да: сотни и тысячи текстов, нужны подсчёты, окна по времени, сравнение групп. Когда нет: мало текстов, всё влезает в контекст, условие простое. Тут сильная модель справляется и одним запросом. Сложные условия вроде «отложил решение и не вернулся» остаются трудными и для этого подхода
📖 Простыми словами

TL;QR: Querying Temporal Discursive Patterns in Textual Corpora

arXiv: 2610.15712

Заставлять нейросеть анализировать тренды во времени — верный способ получить красивую чушь. Если скормить модели 50 000 отзывов и попросить выяснить, где сервис испортился за полгода, она начнёт галлюцинировать цифры и потеряется в датах. Метод TL;QR решает эту проблему тупым разделением труда: модель больше не пытается считать динамику, она лишь отвечает да или нет по каждому отдельному тексту.

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

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

В исследовании гоняли отзывы доставки, вылавливая города, где сервис съехал в негатив, но подход универсален. Точно так же можно отслеживать смену риторики в новостях, ловить момент зарождения сбоев в техподдержке или парсить динамику крипто-чатов. Везде, где есть фактор времени и горы текстов, чистая LLM сядет в лужу, а этот гибрид выдаст чистую статистику.

Короче: пора признать, что нейросети не умеют считать, и перестать требовать от них невозможного. Отдай языковой модели понимание смысла, а хронологию и калькуляцию верни старому доброму коду на правилах. Это на порядки экономит бюджет на API и спасает бизнес от решений, принятых на основе уверенных галлюцинаций.

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

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

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