Language of Time
130 subscribers
88 photos
1 video
34 links
Канал на стыке языковых моделей и временных рядов. Foundational time series, multimodality. Обзоры статей, приложения и мысли на тему.

Авторы:
@alexanderchemeris
<твоё имя>
Download Telegram
In English

Не все ряды одинаково полезны.

Пельмени нужно есть в кожуре, а данные перед употреблением нужно очищать. В частности, выложенные в интернете датасеты временных рядов нужно проверять на присутствие "псевдо-временных" рядов. Например, популярный датасет UCR содержит ряды, сгенерированные из контуров животных и предметов. Если его рассматривать как график луча плоттера, то он конечно зависит от времени, но только по форме (pun intended).

Когда я увидел это в датасете UCR, я долго не мог понять - я псих чего-то не понимаю, или это какая-то шутка тяжелое историческое наследие. Но вот и авторы статьи выше вежливо-культурно пишут, что они "exclude pseudo-time-series, such as those derived from outline of images. The rationale behind is that they don’t have a natural interpretation"

Как отличить "настоящие" временные ряды от совы, натянутой на глобус?

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

Показания OBD2 датчиков двигателя - лишь куцая проекция системы поршней и топлива, которые в свою очередь состоят из триллионов атомов. Финансовые показатели компании выглядят как короткая череда чисел, но складываются из тысяч действий пользователей и сотрудников компании.

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

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

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

На этом мы кажется закончили с базой и можно возвращаться к статьям 😅
👍42
Plots Unlock Time-Series Understanding in Multimodal Models (3 Oct 2024)
arxiv | blog

TL;DR
Гугл на серьёзных щщах выпустил “rigorous empirical evaluation” того, что мультимодальные LLM умеют в reasoning про временные ряды - если представить ряды графиками и рассуждать про заметные на глаз параметры. И чем больше модель, тем лучше она справляется с таким reasoning (сравнивались GPT-4o vs GPT-4o-mini vs Gemini Pro 1.5 vs Gemini Flash 1.5).

Важность представления данных
Фишка статьи в том, что используются достаточно простые фичи вроде тренда и сезональности, а входные данные подаются в модель как картинки (графики). По сравнению с представлением рядов в виде текста (CSV), представление в виде картинок даёт заметный прирост точности ризонинга модели для этих заметных на глаз параметров. “Заметность на глаз” здесь важна, так как люди придумали графики именно для того, чтобы делать эти параметры видными на глаз. Хорошо, что это работает так же и для LLM, но единственный вывод из этого - чем нагляднее мы представляем фичи входных данных, тем проще модели про них рассуждать. Очевидный следующий шаг - “а как нам наглядно представлять больше важных фич?” - в статье не упоминается 😐

Важность экономии токенов при работе с рядами
Кроме этого, в статье обсуждается ещё один важный аргумент в пользу использования специализированного энкодера для временных рядов - экономия на токенах. D реальной жизни ряды обычно длинные и широкие (т.е. многоразмерные), и на токенизацию их текстового представления уходит десятки и сотни тысяч токенов. Это создаёт проблему не только со стоимостью, но и с ограничениями длины контекста модели. Использование отдельного энкодера позволяет представлять ряд любой длины в виде набора эмбеддингов существенно меньшей, а то и фиксированной длины.
1
Language of Time pinned «Про меня, канал и временные ряды Так получилось, что бОльшую часть жизни я так или иначе работал с временными рядами, а последние два года - всё больше и больше с LLM и SLM. В 1999г в 11 классе написал программу вейвлет-анализа скорости кровотока и даже…»
Завёл Medium блог на английском: https://langotime.medium.com/

Если вам по какой-то необъяснимой причине хочется читать на английском - подписывайтесь 🙂 Шуток там, правда, будет сильно меньше 🤷🏻

Постараюсь всё оперативно переводить и выкладывать туда тоже с минимальной задержкой. Как говорится, спасибо ChatGPT за наше счастливое детство за помощь. Хотя говорят Claude лучше переводит с сохранением стиля.

Думаю ещё наладить конвейер публикации в X/Twitter, где кажется проходит основная англоязычная жизнь. Хорошая идея? Или лучше в Facebook или LinkedIn?
3
Помните мем про time series, NLP и CV выше? Так вот, в описании Florence-2 в Gonzo ML приводится отличный приём, который должен сильно повысить точность обучения time series моделей - multi-task learning. При multi-task learning для каждой картинки делается много пар вопрос-ответ, а не по одной на картинку, как было принято раньше. Это даёт возможность обучить очень качественную модель на сильно меньшем объёме картинок.
Кажется, что точно то же самое должно работать и с time series, для которых очень мало доступных тренировочных данных.
3👍2🤔1
ChatTS: первая мультимодальная LLM, нативно понимающая временные ряды

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

Первая версия статьи о ChatTTS вышла ещё в декабре, но код и финальную версию статьи китайцы дропнули 1 января, когда я её и увидел. Выпускали модель явно в спешке, поэтому за два месяца модель набрала "аж" 3 форка и 18 звёдочек на GitHub, и скачана 58 раз с HuggingFace 😁

Если серьёзно, то модель предельно простая, но важная, так как подтверждает базовую идеи о полезности представления временных рядов в виде отдельной модальности. Это даёт сильный прирост метрик по сравнению с text-based, vision-based and agentic-(tool-)based подходы к анализу временных рядов: +46% к точности на «alignment»-задачах вроде определения трендов, шумов и их описаний и +25.8% в reasoning-задачах, если сравнивать с GPT-4o. С конкретными цифрами можно спорить, но то, что даже с простым 5-слойным MLP энкодером модель кладёт на лопатки существенно более крупные модели, и есть главный результат статьи, и подтверждает всё то, о чём мы говорили в прошлых постах.

Дальнейшие шаги по масштабированию и улучшению архитектуры очевидны, так что 2025 год официально объявляется годом китайских моделей с временными рядами.

Архитектура

1. Простой MLP (5 слоёв) в качестве энкодера для временных рядов. Несмотря на простоту, он справляется с выделением базовых глобальных и локальных признаков, чего достаточно для этого proof of concept.
2. Qwen2.5-14B-Instruct как backbone LLM. Больше - трудно тренировать, меньше - плохо с ризонигом. Одобряю.
3. Эмбединги временных рядов вставляют прямо в текст промпта. Это позволяет удобно передавать как контекст, так и взаимосвязи между обрабатываемыми временными рядами. Особенно это полезно при работе с многомерными временными рядами.

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

Обучение

Проходит в два этапа:

1. Alignment: модель привыкает сопоставлять атрибуты ряда и текст. Используется смесь реальных данных и attribute based синтетические данные.
2. SFT (fine-tuning): для углублённого reasoning используются Q&A, сгенерированные при помощи TSEvol (см ниже) и IF (Instruction Following) dataset.

Каждая синтетическая серия маркируется специфичными атрибутами (тренд, периодичность, шум, локальные флуктуации и т.д.). Эти же атрибуты описываются детально в тексте, так что модель учится сопоставлять реальные паттерны ряда с соответствующими словами/фразами.
Такой метод снимает проблему дефицита «настоящих» данных, где временной ряд чётко описан текстом.

Чтобы модель лучше отвечала на вопросы и развивала навыки рассуждения, авторы придумали механизм Time Series Evol-Instruct (TSEvol) - метод генерации пар Q&A (вопрос-ответ), который берёт уже описанные атрибуты временных рядов и «эволюционирует» их, усложняя и разнообразя задачи (например, сравнение, индукция, дедукция и т.п.). Благодаря этому ChatTS получает более широкий и глубокий опыт работы с любыми паттернами, а не только с простым ростом или падением показателей.

Paper
Weights
Code
Training code
👍6
Кстати, если есть желающие законтрибьютить поддержку временных рядов как модальности в vllm - ваше имя останется в веках 🙂
Кажется везде уже написали про Helix от Figure AI (мне нравится описание от AI Newz) - новый старый подход к управлению системами реального времени типа роботов. Напишу и я, потому что он непосредственно связан как с временными рядами (управляющие сигналы сервомоторами), так и с языковым управлением.

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

Почему подход старый?

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

В психологии это стало известно как System 1 / System 2 с подачи Дэниэла Канемана.

Пример из технологий - OpenRAN RIC (Умный Контроллер Радиосети), который по стандарту разделён на non-Real Time часть, принимающую решения, и near-Real Time часть, творчески их осмысляющую выполняющую.

Почему подход новый?

Потому что это (кажется) первый реальный пример того, что если выкинуть human in the middle human-crafted протокол посередине, дать системам возможность обмениваться эмбеддингами напрямую, и тренировать end to end, то это не просто работает, а наголову бьёт прошлую SOTA.

Почему это важно для нас?

Потому что с точки зрения архитектуры, это всё работа с natural language управлением и анализом временных рядов. Т.е. это ничем принципиально не отличается от системы управления сотовой сетью или крупным бизнесом. Текстовые команды и временные ряды на входе - временные ряды на выходе.
👍4
Ещё не забыли про System 1, System 2 подход (пост)? Не забывайте, он с нами надолго. 😄

Прочитал у Самата про новую модель генерации emotion-aware голосовых помощников от Sesame (blog), и что вы думаете?

В работе используются две модели для генерирации высококачественного emotion-aware голоса по тексту и речи собеседника. Первая (большая, медленная) модель понимает контекст и генерирует для него эмбединги и неспецифичный звук (codebook 0 в RVQ кодировании), а вторая модель (маленькая, быстрая) превращает это в высококачественное аудио с эмоциями (генерирует остальные RVQ codebooks).

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

Соотношения в размерах моделей для трёх вариантов модели:
* Tiny: 1B backbone, 100M decoder
* Small: 3B backbone, 250M decoder
* Medium: 8B backbone, 300M decoder

Как и в случае с Helix, модели тренируются end-to-end. Но есть хитрость - для тренировки маленькой модели достаточно 1/10 данных, поэтому получается существенно сэкономить.

Зачем это нужно?

Большая модель слишком медленная, чтобы генерировать выразительный голос в реальном времени. А маленькая - слишком "тупая", чтобы понимать контекст. А вот вместе модели дают и хорошее понимание контекста, и качественную генерацию в реальном времени.

PS Интересная тема - использование RVQ для представления временных рядов в трансформерах. Быстрый OpeanAI DeepResearch-инг намекает, что направление сейчас пользуется интересном у исследователей.
👍4
Alexander Chemeris
Кстати, если есть желающие законтрибьютить поддержку временных рядов как модальности в vllm - ваше имя останется в веках 🙂
Несколько дней чистки авгиевых конюшен кода, и поддержка timeseries как модальности и ChatTS как первой модели с такой поддержкой готова в мерджу в vLLM. Осталось написать тесты к самой модели, и код попадёт в основную ветку vLLM: https://github.com/vllm-project/vllm/pull/16852

Впереди - transformers и llama-factory
🔥12
ChronoSteer: Bridging Large Language Model and Time Series Foundation Model via Synthetic Data
https://www.arxiv.org/abs/2505.10083

Интересный и несложный подход к корректировке предсказаний TSFM (Time Series Foundational Model, в данном случае Chronos) при помощи текстовых комментариев.

Если я правильно понял, то работает это так:
1. Сначала текстовое описание переводится из доменного языка в текстовую "команду" (Q и A на Figure 3),
2. "Команду" переводят в эмбеддинг для TSFM, который добавляют перед эмбеддингами основного ряда (Figure 2).

Список команд исследователи получили, кластеризовав примеры рядов из Monash Repository. Получилось 9 основных "команд": "Keep Unchanged", "Increase Trend", "Reduce Trend", "Expand Amplitude", "Compress Amplitude", "Elevate Peaks", "Lower Peaks", "Raise Troughs" and "Deepen Troughs".

Обучение модуля, который переводит текстовую "команду" в эмбеддинг для TSFM сделали при помощи синтетических данных - для каждой из 9 команд написали функцию на питоне (см A.1.1) и нагенерировали примеров.

Заявленный результат:
ChronoSteer achieves a 25.7% improvement over its unimodal TSFM backbone, Chronos (ChronoSteer-Unimodal), and demonstrates a 22.5% gain over the current state-of-the-art multimodal baseline, DeepSeek-R1.
🔥2