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

Авторы:
@alexanderchemeris
<твоё имя>
Download Telegram
Кстати, если есть желающие законтрибьютить поддержку временных рядов как модальности в 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
T2S: High-resolution Time Series Generation with Text-to-Series Diffusion Models
paper (5 May 2025) | source | dataset

Свежая статья с заявленной SOTA генерации временных рядов по текстовым описаниям. Научный руководитель - Ming Jin, который был автором TimeLLM, положившей начало использованию LLM для анализа временных рядов. И главное - все исходники и датасеты уже выложены. К прошлой SOTA, которая мне понравилась (TimeWeaver), исходники так и не выложили. Планирую попробовать T2S на своих данных, а пока - обзор теории. Если кто-то знает модели для генерации лучше - буду благодарен за ссылки.

Почему это важно?

1. Одна из ключевых проблем в облатси анализа временных рядов с помощью AI - отсутствие размеченных датасетов. Для разметки временных рядов нужны дорогие и редкие специалисты, это вам не светофоры на капче искать. Генерация даёт возможность обойти то ограничение, но для качественного обучения, сгенерированные датасеты должны быть действительно похожими на реальные данные.

2. Стресс-анализ и What-If анализ или простыми словами - генерация разных сценариев будущего, - важная задача в управлении любой сложной системой.

Датасет

Для генерации рядов, нужны датасеты с описаниями трёх уровней: отдельные точки (артефакты), фрагменты (патчи) и весь ряд. Для описания точек используется существующий датасет Time-MMD, для описания уровня ряда - дадасет SUSHI, а вот для описания уровня фрагментов сделали новый датасет TSFragment-600K. Для его генерации разбивали ряды на фрагменты и давали GPT-4o-mini для описания (Figure 1).

Архитектура

Два основных компонента (Figure 2):

Pretrained Length-Adaptive Variational Autoencoder (LA-VAE) - кодирует ряды переменной длины в латентное пространство и обратно.

T2S Diffusion Transformer (T2S-DiT) - diffusion transformer с flow matching для денойза и собственно генерации.

Метрики

Сравнивают с DiffusionTS, TimeVAE, GPT-4o-min и Llama3.1-8b как на коротких рядах (24/48/96), так и длинных (2048). Конкретные метрики приводить тут не буду, так как их слишком много, но по большинству датасетов T2S даёт хорошие приросты. Что не удивительно хотя бы потому, что завезли новый датасет.
🔥3
Я устал, я <s>ухожу</s> напишу - просмотрщик датасетов с рядами и текстом.

Разбираясь в эвал датасетах ChatTS я немного сломал глаза и мозг, просматривая их глазами в JSON и решил написать свой, с блекджеком, картинками и статистикой.

Несколько вечеров вайбкодинга и вот - прошу любить и жаловать:
https://explorer.langotime.ai

Оказалось очень удобно и я думаю теперь добавить туда больше датасетов с временными рядами для удобного просмотра.

А что кроме Jupyter используете для просмотра таких датасетов вы?
👍5
В новой статье авторы делают следующий шаг и предлагают метод кодирования чисел, который (а) основан на внутреннем представлении чисел в трансформерах и (б) занимает ровно один токен/эмбеддинг (см Figure 1)

То, что всё число занимает один токен - важный момент, потому что при тренировке классических авторегрессионных трансформеров функция потерь не считается одинаково для каждого токена, а значит ошибка в первом и последнем разряде числа будет для модели "весить" одинаково. Т.е. если нужно вывести число 3197, а модель написала 4197, то для неё это будет ошибка такого же порядка как 3198, хотя на самом деле это три десятичных порядка разницы. Для решения этой проблемы предлагались разные подходы, в том числе добавляющие специальную функцию потерь для чисел, но не трогающие токенизатор. Например, недавний (28 Feb 2025) PDCE - Position-Dependent Cross-Entropy, который я попытался запустить на наших экспериментах с рядами, но устал синхронизировать его функцию потерь с функцией потерь и забил. Использование одного токена/эмбеддинга для всего числа интуитивно выглядит более правильным подходом.

Итак, FoNE:

Позволяет кодировать/декодировать числа в десятичной системе счисления с заранее заданным количеством знаков до и после запятой в один токен/эмбеддинг. А числа произвольной длины кодируются простым объединением нескольких токенов/эмбеддингов подряд. Числа 100% точно кодируются и декодируются без потери точности.

СFoNE трансформеры "магически" научаются точно складывать и умножать вещественные числа при размере датасета 64x меньше.

Эксперименты в статье приводятся как для тренировки небольших LLM с нуля, так и для тюнинга предобученной Llama-3.2-1B. Предобученная Llama учится медленнее, но в большинстве случаев достигает такой же точности (тёмно-синяя линия "finetune" на графиках) - см Figure 2, 3.

Что НЕ сделано в статье - полноценная интеграция в LLM на стороне декодирования эмбедингов в токены, чтобы научить модель определять, где в выводе вставлять FoNE токен, а где обычный. В своих экспериментах с предобученной Llama авторы "срезали углы" и при тренировке/эвалах ожидают на выходе модели всегда только FoNE токены (на вход подают смесь текста и закодированных FoNEчисел). В переписке авторы говорят, что "наверное надо тренировать отельный слой-классификатор... мы не пробовали, но вы попробуйте!" 😄

Результаты - фантастические (см последние две картинки).
Эксперименты авторов воспроизводятся и совпадают с опубликованными данными. На практических примерах попробуем завести.

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