Кстати, если есть желающие законтрибьютить поддержку временных рядов как модальности в 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 управлением и анализом временных рядов. Т.е. это ничем принципиально не отличается от системы управления сотовой сетью или крупным бизнесом. Текстовые команды и временные ряды на входе - временные ряды на выходе.
Не буду пересказывать, просто напомню, что в Helix управление роботом разделили на два контура - медленный, понимающий команды на естественном языке, и быстрый - который собственно и управляет актуаторами робота. Между собой они "общаются" не каким-то human-invented протоколом, а напрямую эмбеддингами.
Почему подход старый?
Разделение на на два контура управления в системах реального времени старо как мир и знакомо чуть более, чем всем инженерам, работающим в этой области.
В психологии это стало известно как System 1 / System 2 с подачи Дэниэла Канемана.
Пример из технологий - OpenRAN RIC (Умный Контроллер Радиосети), который по стандарту разделён на non-Real Time часть, принимающую решения, и near-Real Time часть, творчески их
Почему подход новый?
Потому что это (кажется) первый реальный пример того, что если выкинуть
Почему это важно для нас?
Потому что с точки зрения архитектуры, это всё работа с natural language управлением и анализом временных рядов. Т.е. это ничем принципиально не отличается от системы управления сотовой сетью или крупным бизнесом. Текстовые команды и временные ряды на входе - временные ряды на выходе.
Telegram
эйай ньюз
Helix - локальный AI на роботе
Из-за этой модели Figure разорвала сделку с OpenAI, заявив что им удалось совершить прорыв. Все действия роботов на видео - результат работы модельки, работающей полностью на роботе. Модель управляет верхней половиной тела…
Из-за этой модели Figure разорвала сделку с OpenAI, заявив что им удалось совершить прорыв. Все действия роботов на видео - результат работы модельки, работающей полностью на роботе. Модель управляет верхней половиной тела…
👍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-инг намекает, что направление сейчас пользуется интересном у исследователей.
Прочитал у Самата про новую модель генерации 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
Я правильно понимаю, что статьи про TMRoPE из Qwen2.5-Omni пока нет?
(про модель на русском)
Если она позволяет выравнивать звук и видео, что кажется ей будет удобно выравнивать многомерные временные ряды.
(про модель на русском)
Если она позволяет выравнивать звук и видео, что кажется ей будет удобно выравнивать многомерные временные ряды.
Telegram
Технозаметки Малышева
Qwen2.5-Omni: мультимодальный интеллект в одной модели
Qwen2.5-Omni-7B воспринимает текст, изображения, аудио и видео одновременно, выдавая ответы в текстовом и голосовом форматах.
Уникальная архитектура Thinker-Talker с технологией TMRoPE обеспечивает идеальную…
Qwen2.5-Omni-7B воспринимает текст, изображения, аудио и видео одновременно, выдавая ответы в текстовом и голосовом форматах.
Уникальная архитектура Thinker-Talker с технологией TMRoPE обеспечивает идеальную…
👍5
Alexander Chemeris
Кстати, если есть желающие законтрибьютить поддержку временных рядов как модальности в vllm - ваше имя останется в веках 🙂
Несколько дней чистки авгиевых конюшен кода, и поддержка timeseries как модальности и ChatTS как первой модели с такой поддержкой готова в мерджу в vLLM. Осталось написать тесты к самой модели, и код попадёт в основную ветку vLLM: https://github.com/vllm-project/vllm/pull/16852
Впереди - transformers и llama-factory
Впереди - transformers и llama-factory
GitHub
[Model][Frontend] Adding timeseries modality support and Qwen2.5-ChatTS model support by chemeris · Pull Request #16852 · vllm…
This pull request has two parts:
Adds generic infrastructure for handling time series as a modality, including an OpenAI API server.
Adds support for ChatTS model inference that relies on the abov...
Adds generic infrastructure for handling time series as a modality, including an OpenAI API server.
Adds support for ChatTS model inference that relies on the abov...
🔥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.
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 даёт хорошие приросты. Что не удивительно хотя бы потому, что завезли новый датасет.
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 используете для просмотра таких датасетов вы?
Разбираясь в эвал датасетах 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чисел). В переписке авторы говорят, что "наверное надо тренировать отельный слой-классификатор... мы не пробовали, но вы попробуйте!" 😄
Результаты - фантастические (см последние две картинки).
Эксперименты авторов воспроизводятся и совпадают с опубликованными данными. На практических примерах попробуем завести.
Если вы тоже будете экспериментировать и получите позитивные или негативные результаты - дайте знать, сверим показания. 🤝
То, что всё число занимает один токен - важный момент, потому что при тренировке классических авторегрессионных трансформеров функция потерь не считается одинаково для каждого токена, а значит ошибка в первом и последнем разряде числа будет для модели "весить" одинаково. Т.е. если нужно вывести число 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чисел). В переписке авторы говорят, что "наверное надо тренировать отельный слой-классификатор... мы не пробовали, но вы попробуйте!" 😄
Результаты - фантастические (см последние две картинки).
Эксперименты авторов воспроизводятся и совпадают с опубликованными данными. На практических примерах попробуем завести.
Если вы тоже будете экспериментировать и получите позитивные или негативные результаты - дайте знать, сверим показания. 🤝