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

Авторы:
@alexanderchemeris
<твоё имя>
Download Telegram
Channel created
В интернете много ресурсов про анализ временных рядов (time series, event streams) с использованием как классических методов, так и ML/DL. Ещё больше ресурсов про языковые модели (LLM/SLM). Но фактически отсутствуют ресурсы на стыке этих двух фундаментальных тем.

Как учили меня родители биологи, - больше всего жизни на стыке сред, а самое интересное - на стыке разных направлений науки и техники.
3
Про меня, канал и временные ряды

Так получилось, что бОльшую часть жизни я так или иначе работал с временными рядами, а последние два года - всё больше и больше с LLM и SLM.

В 1999г в 11 классе написал программу вейвлет-анализа скорости кровотока и даже был упомянут соавтором в научной статье. В 2007г Закончил МИФИ, факультет Кибернетики, кафедру 33 Математического обеспечения систем. Ещё в институте начал заниматься разработкой VoIP и алгоритмами обработкой голоса. Потом больше 10 лет был CEO/CTO стартапа Fairwaves, где мы разрабатывали собственные Software Defined Radio и базовые станции 2G/4G на их основе. Поэтому временные ряды для меня исторически были больше про цифровую обработку сигналов (DSP), чем про прогнозирование продаж и поиск аномалий в метриках вёб-сервисов. Это даёт интересную перспективу на то, что называется time series analysis.

Сейчас живу в Кейптауне (ЮАР🇿🇦) и руковожу небольшой командой разработки сложного софта в быстрорастущем 4G/5G мобильном операторе Rain. Здесь и началось пересечение интереса к AI/LLM с обработкой данных и конкретно временных рядом. Мы реализовали как несложные AI/LLM проекты - полу-атоматическую обработку тикетов нашей техподдержки с помощью LLM и чатбот поддержки, - так и задротски более сложную систему сбора 100тыс событий в секунду с нашей сети. И встал бизнес вопрос, как же пробросить мостик между этими двумя мирами и сделать гигабайты собираемых данных полезными не только паре десятков инженеров, но и всей компании. Так полтора года назад началось моё погружение в скрещивание ужа с ежом LLM с временными рядами.

В этом канале (Language of Time aka langotime aka LoT) я буду делиться обзорами статей и прочими новостями на стыке временных рядов и LLM.

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

И да поменяем мы мир к лучшему!
🔥62
Towards Time-Series Reasoning with LLMs
https://arxiv.org/abs/2409.11376

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

TL;DR
Суть работы до боли проста - вместо представления временного ряда текстом или впихивания невпихуемого квантизации данных в токенизатор LLM, временной ряд прогоняется через энкодер и проецируется сразу в эмбеддинги LLM (см картинку выше). Затем эти эмбеддинги обрабатываются вместе с эмбеддингами токенов входного текста. Это позволяет модели понимать происходящее во временном ряде лучше, чем при засовывании ряда в текстовом представлении при сохранении полезных свойств:
- ряд можно вставлять ряд в любое место промпта, т.е. С сохранением контекста;
- можно вставлять несколько рядов - как связанных, так и не связанных друг с другом (multivariate vs several univariate).
В качестве LLM backbone испольуется Mistral-7B. Меньше брать нельзя, так как то хвост ломит отваливается reasoning, а больше - нужно слишком много ресурсов. Кода к статье нет, поэтому о некоторых моментах в статье остаётся только догадываться удивляться 🙁

Тренировка проводится в два подхода.
1. Сначала тренируется только энкодер и слой проекции при замороженной LLM (они называют это encoder warmup).
2. Вторым шагом полируют end-to-end LoRa SFT на задачах reasning.
Всё это происходит на 8xA100 GPUs, но неизвестно сколько по времени. 🤷🏻‍♂️ Всё в общем-то логично, хотя и немного не понятно, почему не взять готовый энкодер из какой-нибудь foundational timeseries модели.

В статье задаётся очень правильный вопрос - а как определить, что этот ваш энкодер научился представлять важные фичи ряда?
Чтобы это протестировать, делается что-то странное, что я так и не понял - видимо нужно читать ссылку №4 про etiological reasoning, на которую они постоянно ссылаются: “we assess the usefulness of model-generated captions on downstream tasks by feeding the caption (instead of raw time series) to a strong reasoner (GPT-4o).” Но главное, что они в итоге приходят к очевидному, но теперь чуть более научно обоснованному выводу - для рядов нужен собственный энкодер, а представлять их текстом и мучиться догадками, больше 9.8 чем 9.11 или нет или картинками - противоестественно, грех, харам и авера снижает метрики. Об этом мы ещё поговорим в разборе другой свежей статьи от Гугла.

“Удивительное рядом” или занятные хаки. Входные ряды нормализуют, а среднее и дисперсию пишут текстом перед самим рядом (хо-ро-шо-что-не-по-сло-гам). К нормализации претензий нет, но странно, что её параметры не кладут в энкодер, а пишут текстом. 🙄

Внезапно, статья написана тремя сотрудниками и двумя интернами Apple, - не самой очевидной компанией для такой темы. Судя по статье - это похоже на чей-то pet project, и это тем интереснее.

За ссылку на статью спасибо @MrGeekman из Т-Банка 👌🏻

Read In English on Medium
2🔥1
Пример работы модели

Prompt:
Refer to the following time-series: <TS>.
Considering that this is hourly pedestrian count in Chinatown-Swanston St (North) in a day of the year 2017, with classes based on whether data are from a normal day or a weekend day, classify the time-series and respond only with one of the following options
- weekend
- weekday


Model response:
The time-series shows a clear periodic pattern with two noticeable peaks and troughs within a 24-hour period. The higher counts occur in the mornings and early afternoons, suggesting increased pedestrian activity during commuting hours. This aligns with typical traffic flows on weekdays, characterized by peaks during rush hours. The lower counts during the rest of the day further support this pattern. In contrast, a weekend would likely show a more uniformly higher pedestrian count throughout the day, focusing around popular destinations or attractions. Therefore, the observed pattern is consistent with weekday pedestrian traffic.  
Answer: **weekday**

🙌🏻
In English

Этот канал задумывался для тех, кто уже занимается временными рядами, но видимо стоит объяснить что это вообще такое - временные ряды, и зачем для них нужен целый канал для тех, кто с ними не сталкивался.

Определение

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

Если объяснять совсем просто - это любые измерения, которые представляют графиком, где по оси X - время, а по оси Y - измерение.

Примеры из жизни

* Я занимаюсь в спортзале, и угол раскрытия тренажёра во времени - это временной ряд (см видео). Анализируя этот ряд, тренажёр определяет, молодец я или халявлю, расчитывает кучу показателей и определяет, нужно ли подправить мне программу тренировки. Это регулярный (с одинаковыми промежутками времени), одномерный (univariate) временной ряд.
* Я смотрю в новую кампанию в Google Ads (см скриншот), и количество показов, кликов и конверсий на графике - это временной ряд. Тоже регулярный, как и  все остальные примеры тут, но многомерный (multivariate).
* Я пытаюсь понять, почему дизельный движок моего джипа плохо заводится при холодном старте. Показатели двигателя с датчиков OBD2 (см скриншот) - это тоже многомерный регулярный временной ряд.
* График объёма продаж компании, а так же остальные показатели P&L и balance sheet - это тоже временной ряд, если их считать по дням/месяцам/кварталам.
* А так же - курс рубля, погода в Кейптауне, количество запросов к вёб-сервису, ЭКГ, сигнал вашего телефона и многое другое в нашей жизни.

Резюмируя - временные ряды окружают нас на каждом шагу. Вся наша жизнь - это работа с временными рядами 📈 - от управления компанией, до анализа причин отказа той или иной системы.
2🔥1
In English

Голос и видео

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

Когда это осознаёшь, то становится понятно, что многие достижения работы LLM с голосом и видео можно (и нужно) переносить на другие временные ряды.

(за слайд с мемом спасибо Мартину @martins0n из команды ETNA - смотрите его выступление про фундаментальные модели для временных рядов)
👍1
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