Глава 287: Мультимодальный трейдинг с CLIP
Введение: CLIP для мультимодального трейдинга — выравнивание текстовых новостей и ценовых данных
Контрастивное предобучение на основе языка и изображений (CLIP), представленное Radford et al. (2021), продемонстрировало мощный принцип: обучая модель выравнивать две модальности — изображения и текст — в общем пространстве эмбеддингов с помощью контрастивного обучения, получаемые представления обеспечивают замечательную обобщающую способность в режиме zero-shot. В оригинальной области CLIP модель может классифицировать изображения, которые никогда не видела, в категории, описанные только на естественном языке, без какой-либо специфической дообучки.
Для трейдинга эта парадигма открывает захватывающие перспективы. Вместо выравнивания изображений и текста мы выравниваем рыночные ценовые данные (последовательности OHLCV) и текстовые рыночные комментарии (заголовки новостей, аналитические отчёты, настроения в социальных сетях). Результат — общее пространство эмбеддингов, где ценовые режимы и их текстовые описания существуют бок о бок. Бычий пробой в пространстве эмбеддингов ценового кодировщика располагается рядом с текстовым эмбеддингом “Биткоин преодолевает сопротивление на фоне сильного институционального спроса.” Сжатие волатильности в ценовом пространстве выравнивается с “Рынки консолидируются в ожидании решения ФРС.”
Почему это выравнивание ценно? Традиционные торговые системы обрабатывают текстовые данные и ценовые данные как отдельные входы, часто объединяя их через позднее слияние (независимое извлечение признаков с последующей конкатенацией). Контрастивное выравнивание в стиле CLIP вместо этого заставляет две модальности изучать общее семантическое пространство с самого начала. Это даёт несколько практических преимуществ:
-
Классификация режимов в режиме zero-shot: получив новое текстовое описание рыночного состояния (например, “флэш-крэш с быстрым восстановлением”), модель может определить, какие ценовые последовательности соответствуют этому описанию, без явного обучения на этой метке.
-
Кросс-модальный поиск: по ценовой последовательности найти наиболее релевантные заголовки новостей. По заголовку определить, какие исторические ценовые паттерны он больше всего напоминает.
-
Трансферное обучение: эмбеддинги, обученные на одном классе активов, могут обобщаться на другие, поскольку общее текстово-ценовое пространство захватывает абстрактные рыночные концепции, а не паттерны, специфичные для актива.
-
Робастный анализ настроений: вместо обучения отдельной NLP-модели на размеченных данных о настроениях, контрастивное выравнивание неявно изучает настроение, связывая бычий/медвежий текст с соответствующими движениями цен.
В этой главе мы строим систему контрастивного обучения в стиле CLIP на Rust для торговли криптовалютами на Bybit. Наша реализация включает текстовый и ценовой кодировщики, контрастивную функцию потерь InfoNCE, вычисление косинусного сходства и классификацию рыночных режимов в режиме zero-shot по текстовым описаниям.
Математические основы
Контрастивное обучение и функция потерь InfoNCE
Ядро CLIP — контрастивное обучение: для батча из N пар примеров (text_i, price_i) модель учится максимизировать согласованность между соответствующими парами, минимизируя согласованность между несоответствующими парами.
Каждая модальность имеет свой кодировщик:
f_text: text -> R^d (текстовый кодировщик)f_price: price_seq -> R^d (ценовой кодировщик)Оба кодировщика отображают свои входные данные в общее d-мерное пространство эмбеддингов. Кодировщики обучаются совместно, так что совпадающие пары производят похожие эмбеддинги, а несовпадающие пары — непохожие.
Для батча из N пар мы вычисляем матрицу сходства NxN:
S_ij = cos_sim(f_text(text_i), f_price(price_j)) / tauгде tau > 0 — обучаемый параметр температуры, контролирующий остроту распределения, а косинусное сходство определяется как:
cos_sim(a, b) = (a . b) / (||a|| * ||b||)Функция потерь InfoNCE (Noise-Contrastive Estimation) трактует задачу как N-путевую классификацию. Для направления текст-к-цене:
L_text = -(1/N) * sum_{i=1}^{N} log( exp(S_ii) / sum_{j=1}^{N} exp(S_ij) )Симметрично, для направления цена-к-тексту:
L_price = -(1/N) * sum_{i=1}^{N} log( exp(S_ii) / sum_{j=1}^{N} exp(S_ji) )Полная функция потерь CLIP — среднее обоих направлений:
L_CLIP = (L_text + L_price) / 2Эта симметричная функция потерь обеспечивает равный вклад обеих модальностей в общее пространство эмбеддингов. Каждое направление действует как softmax-классификатор, где правильное соответствие должно иметь наивысший балл сходства среди всех кандидатов в батче.
Параметр температуры
Температура tau играет критическую роль в контрастивном обучении. Более низкая температура делает распределение softmax более острым, фокусируясь на сложных негативных примерах. Более высокая температура создаёт более мягкие распределения, которые легче оптимизировать в начале обучения:
P(match = j | text_i) = exp(S_ij / tau) / sum_{k=1}^{N} exp(S_ik / tau)В CLIP температура — обучаемый лог-параметризованный скаляр tau = exp(log_tau), инициализированный значением около 0.07. Для торговых приложений мы обычно обнаруживаем, что температуры в диапазоне [0.05, 0.2] работают хорошо, при этом более низкие значения предпочтительны, когда обучающий набор содержит много похожих ценовых режимов.
Косинусное сходство и нормализация эмбеддингов
Перед вычислением сходства эмбеддинги нормализуются по L2:
z = f(x) / ||f(x)||_2Эта нормализация необходима, потому что она ограничивает все эмбеддинги единичной гиперсферой, делая косинусное сходство эквивалентным скалярному произведению и гарантируя, что баллы сходства ограничены в [-1, 1]. Без нормализации модель может тривиально увеличивать баллы сходства, масштабируя величины эмбеддингов, что дестабилизирует обучение.
Классификация в режиме zero-shot
После обучения модели классификация в режиме zero-shot работает путём использования кандидатных текстовых меток как классификатора. Для набора из K текстовых описаний {label_1, …, label_K} и запросной ценовой последовательности q:
prediction = argmax_k cos_sim(f_price(q), f_text(label_k))Для трейдинга метками могут быть описания рыночных режимов:
- “Сильный бычий тренд с растущим объёмом”
- “Медвежий пробой с паническими продажами”
- “Боковая консолидация с низкой волатильностью”
- “Волатильное колебание без чёткого направления”
Модель присваивает ценовой последовательности то текстовое описание, которое даёт наивысшее косинусное сходство — без явного обучения на этих конкретных категориях.
Геометрия пространства эмбеддингов
Общее пространство эмбеддингов имеет интересные геометрические свойства, релевантные для трейдинга. После обучения:
- Кластеры формируются вокруг типичных рыночных режимов, с перемешанными ценовыми и текстовыми эмбеддингами.
- Направления в пространстве эмбеддингов соответствуют семантическим концепциям: вектор от “медвежьих” к “бычьим” эмбеддингам определяет ось настроений.
- Расстояния между эмбеддингами коррелируют с семантическим сходством: два разных бычьих заголовка будут ближе друг к другу, чем к медвежьему заголовку, и аналогично для соответствующих ценовых паттернов.
Эти геометрические свойства позволяют проводить арифметику в пространстве эмбеддингов. Например, эмбеддинг(“коррекция”) - эмбеддинг(“тренд”) + эмбеддинг(“ценовой паттерн пробоя”) может дать эмбеддинг вблизи ценовых паттернов, показывающих пробой после коррекции — форма аналогического рассуждения о рыночных данных.
Применения в трейдинге
Выравнивание новостей и цен
Наиболее прямое применение — выравнивание новостных событий с ценовыми реакциями. Кодируя заголовки новостей и соответствующие ценовые окна в общем пространстве, модель учится, какие типы новостей вызывают какие типы ценового движения. В продакшене, когда поступает новый заголовок, модель может мгновенно извлечь наиболее похожие исторические ценовые реакции, предоставляя основанное на данных ожидание того, как рынок может отреагировать.
Это особенно ценно для криптовалютных рынков, где новостной поток из социальных сетей, регуляторных объявлений и ончейн-метрик может быстро двигать цены. Модель в стиле CLIP, обученная на исторических парах новость-цена, может определить вероятное влияние нового заголовка на рынок, найдя его ближайших соседей в общем пространстве эмбеддингов.
Распознавание графических паттернов с текстом
Традиционное распознавание графических паттернов полагается на вручную закодированные правила или свёрточные нейронные сети, обученные на размеченных изображениях графиков. Подход в стиле CLIP вместо этого описывает паттерны текстом и позволяет модели выучить выравнивание:
- “Двойное дно с пробоем линии шеи” отображается на соответствующую ценовую структуру
- “Голова и плечи с убывающим объёмом” отображается на паттерн распределения
- “Восходящий треугольник со сужающимся диапазоном” отображается на структуру консолидации
Этот подход с текстовым наблюдением более гибкий, чем жёсткие геометрические правила, и естественно обрабатывает вариации паттернов. Модель учится, что “двойное дно” может иметь различную высоту, ширину и уровни симметрии, потому что текстовое описание абстрагируется от этих поверхностных вариаций.
Классификация секторов и режимов в режиме zero-shot
Пожалуй, самое мощное применение — классификация в режиме zero-shot. Без каких-либо размеченных обучающих данных для конкретных режимов модель может классифицировать ценовые последовательности в произвольные категории, определённые только текстом. Портфельный менеджер может определять новые категории режимов на лету:
- “Среда risk-on с ротацией в акции роста”
- “Бегство в безопасность с укреплением золота и казначейских облигаций”
- “Крипто-специфичное ралли, движимое нарративом”
Модель присваивает каждое ценовое окно наиболее похожему текстовому описанию, обеспечивая динамическую классификацию режимов, которая адаптируется к эволюционирующей ментальной модели портфельного менеджера.
Кросс-модальное обнаружение аномалий
Когда ценовая последовательность имеет очень низкое максимальное сходство с любым текстовым описанием в словаре модели, она может представлять новое рыночное условие, не захваченное историческими парами текст-цена. Это обеспечивает естественный механизм обнаружения аномалий: низкие баллы выравнивания сигнализируют о том, что текущий рынок ведёт себя способами, которые модель не видела описанными в тексте, что требует осторожности.
Реализация на Rust
Наша реализация на Rust предоставляет фреймворк контрастивного обучения в стиле CLIP со следующими компонентами:
-
TextEncoder: Преобразует текст в векторы эмбеддингов с использованием признаков символьных n-грамм. В продакшене это было бы заменено кодировщиком на основе трансформера, но подход с n-граммами захватывает достаточно структуры для демонстрационных целей и быстро вычисляется.
-
PriceEncoder: Преобразует последовательности OHLCV в векторы эмбеддингов, используя простой свёрточный подход с обучаемыми фильтрами. Кодировщик извлекает локальные ценовые паттерны на нескольких масштабах и проецирует их в общую размерность эмбеддинга.
-
CLIPModel: Объединяет оба кодировщика с обучаемым параметром температуры и реализует полный конвейер контрастивного обучения, включая функцию потерь InfoNCE, вычисление матрицы косинусного сходства и классификацию в режиме zero-shot.
-
BybitClient: Получает данные свечей в реальном времени и исторические данные через REST API Bybit, предоставляя последовательности OHLCV для кодирования.
Реализация делает акцент на численной корректности и ясности, а не на производительности. Все матричные операции используют крейт ndarray, предоставляющий numpy-подобную семантику массивов в Rust. Кодировщики используют фиксированные случайные проекции для простоты, но архитектура спроектирована так, что обучаемые обновления весов могут быть добавлены с помощью фреймворка автоматического дифференцирования.
Интеграция с Bybit
Наша система интегрируется с публичным REST API Bybit для получения данных свечей (кэндлстиков) в реальном времени. BybitClient получает данные OHLCV для любой поддерживаемой торговой пары и интервала, преобразует их в формат ndarray, ожидаемый ценовым кодировщиком, и обрабатывает пагинацию для извлечения исторических данных.
Конвейер данных работает следующим образом:
- Получение данных свечей из
https://api.bybit.com/v5/market/klineдля желаемого символа и интервала - Разбор JSON-ответа в структурированные записи
Klineс полями open, high, low, close и volume - Преобразование последовательностей свечей в 2D-массивы с формой (sequence_length, 5) для ценового кодировщика
- Нормализация каждого столбца признаков (OHLCV) к нулевому среднему и единичной дисперсии для стабильного кодирования
Для живой торговли клиент может вызываться повторно для получения последних свечей, при этом ценовой кодировщик производит обновлённые эмбеддинги, которые сравниваются с текстовыми описаниями рынка для классификации режимов в реальном времени.
Ключевые выводы
-
Контрастивное обучение в стиле CLIP создаёт общее пространство эмбеддингов для текстовых и ценовых данных, позволяя кросс-модальное рассуждение о рынках без специфичных для модальности меток.
-
Функция потерь InfoNCE симметрична и трактует выравнивание как взаимную N-путевую классификацию, обеспечивая равный вклад обеих модальностей в выученное представление.
-
Классификация в режиме zero-shot — ключевое применение: определите новые рыночные режимы на естественном языке и классифицируйте ценовые последовательности без переобучения.
-
Настройка температуры критически важна — более низкие температуры обостряют распределение сходства и улучшают различение похожих режимов, но могут дестабилизировать обучение.
-
Косинусное сходство с L2-нормализацией гарантирует сравнение эмбеддингов по направлению, а не по величине, предотвращая тривиальные решения и сохраняя интерпретируемость баллов сходства.
-
Кросс-модальный поиск обеспечивает новые рабочие процессы: по ценовому паттерну найти наиболее релевантные новости; по заголовку найти наиболее похожее историческое ценовое движение.
-
Обнаружение аномалий естественно возникает из низких баллов выравнивания, отмечая рыночные условия, не имеющие исторического прецедента в обучающих данных текст-цена.
-
Характеристики производительности Rust делают его хорошо подходящим для контрастивного вывода в реальном времени в трейдинге, где низколатентное вычисление эмбеддингов и поиск по сходству необходимы для срочных решений.