Глава 243: RoBERTa для трейдинга
Введение
RoBERTa (Robustly Optimized BERT Pretraining Approach) — это усовершенствование языковой модели BERT, представленное Liu et al. (2019) в Facebook AI. В то время как BERT доказал, что двунаправленное предобучение на больших текстовых корпусах создаёт мощные универсальные представления, оригинальная процедура обучения оставляла значительный потенциал нереализованным. RoBERTa продемонстрировала, что тщательная настройка рецепта предобучения — более длительное обучение, большие батчи, больше данных и удаление задачи предсказания следующего предложения — даёт существенно лучшие результаты на downstream-задачах без каких-либо архитектурных изменений.
Для финансовых приложений улучшенное понимание текста RoBERTa напрямую транслируется в более качественный анализ тональности новостных заголовков, стенограмм отчётных звонков, документов SEC и постов в социальных сетях. Повышенная способность модели улавливать нюансы языка особенно ценна в финансах, где тонкие различия в формулировках — «выручка превысила ожидания» против «выручка соответствовала ожиданиям» — могут сигнализировать о существенно разных рыночных реакциях.
В этой главе представлена полная система применения RoBERTa для трейдинга. Мы рассмотрим ключевые различия между RoBERTa и BERT, архитектуру и методологию предобучения, стратегии файн-тюнинга для классификации финансовой тональности и рабочую реализацию на Rust, подключённую к криптовалютной бирже Bybit для генерации торговых сигналов на основе тональности.
Ключевые концепции
От BERT к RoBERTa
BERT (Bidirectional Encoder Representations from Transformers) представил задачу маскированного языкового моделирования (MLM): случайное маскирование 15% входных токенов и обучение модели их предсказанию. BERT также использовал задачу предсказания следующего предложения (NSP), где модель определяет, следуют ли два сегмента последовательно в исходном тексте.
RoBERTa сохраняет ту же архитектуру Transformer-энкодера, что и BERT, но вносит несколько критических изменений в процедуру обучения:
-
Динамическое маскирование: BERT использует статическое маскирование — паттерн маскирования определяется один раз на этапе предобработки данных. RoBERTa генерирует новый паттерн маскирования каждый раз, когда последовательность подаётся в модель, фактически давая модели больше разнообразных обучающих примеров.
-
Удаление NSP: RoBERTa полностью удаляет задачу предсказания следующего предложения. Эксперименты показали, что NSP либо ухудшает, либо не улучшает производительность на downstream-задачах при обучении с последовательностями полной длины.
-
Большие батчи: RoBERTa обучается с батчами размером 8000 последовательностей (по сравнению с 256 у BERT), что улучшает перплексию на задаче MLM и точность на downstream-задачах.
-
Больше данных: RoBERTa обучается на 160 ГБ текста (включая CC-News, OpenWebText и датасет Stories) по сравнению с 16 ГБ у BERT (BookCorpus + English Wikipedia).
-
Более длительное обучение: RoBERTa обучается значительно больше шагов, демонстрируя, что BERT был существенно недообучен.
Архитектура Transformer-энкодера
RoBERTa использует ту же архитектуру Transformer-энкодера, что и BERT-Large:
- Размер скрытого слоя: $d_{model} = 1024$
- Голов внимания: $h = 16$
- Слоёв энкодера: $L = 24$
- Размерность FFN: $d_{ff} = 4096$
- Параметров: ~355 миллионов
Каждый слой энкодера вычисляет многоголовое самовнимание, за которым следует позиционная сеть прямого распространения:
$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) W^O$$
где каждая голова:
$$\text{head}_i = \text{Attention}(Q W_i^Q, K W_i^K, V W_i^V)$$
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$
Сеть прямого распространения применяет два линейных преобразования с активацией GELU:
$$\text{FFN}(x) = \text{GELU}(x W_1 + b_1) W_2 + b_2$$
Токенизация Byte-Pair Encoding (BPE)
RoBERTa использует побайтовый BPE-токенизатор со словарём из 50 265 токенов, в отличие от WordPiece-токенизатора BERT с 30 522 токенами. Побайтовый подход означает:
- Нет неизвестных токенов: любой вход может быть закодирован
- Лучшая обработка редких слов и специфичной для домена лексики (например, тикеры, финансовый жаргон)
- Нет необходимости в отдельном этапе предварительной токенизации для обработки неизвестных символов
Это особенно выгодно для обработки финансового текста, где тикеры вроде $AAPL, $BTC, аббревиатуры вроде EPS, P/E, EBITDA и специализированные фразы встречаются часто.
Маскированное языковое моделирование (MLM)
Задача MLM обучает модель восстанавливать случайно замаскированные токены из их двунаправленного контекста. Для последовательности токенов $x = (x_1, x_2, \ldots, x_n)$ выбирается подмножество $M$ для маскирования. Модель минимизирует:
$$\mathcal{L}{MLM} = -\sum{i \in M} \log P(x_i | x_\backslash M; \theta)$$
В RoBERTa маскирование выполняется динамически: каждый раз, когда последовательность подаётся в модель во время обучения, выбирается новое случайное подмножество токенов для маскирования. Это означает, что модель видит разные паттерны маскирования от эпохи к эпохе, фактически увеличивая разнообразие обучающего сигнала.
Файн-тюнинг для финансовой тональности
Классификационная голова
Для классификации тональности линейный слой добавляется поверх представления токена [CLS]:
$$P(y | x) = \text{softmax}(W_c \cdot h_{[CLS]} + b_c)$$
где $h_{[CLS]} \in \mathbb{R}^{d_{model}}$ — финальное скрытое состояние токена [CLS], $W_c \in \mathbb{R}^{k \times d_{model}}$ — матрица весов классификации, и $k$ — количество классов (например, позитивный, негативный, нейтральный).
Метки финансовой тональности
Классификация финансовой тональности обычно использует три класса:
- Позитивный: текст предполагает рост цены, хорошие показатели, положительный прогноз («выручка выросла на 30%», «превысила прогноз по прибыли», «бычий импульс»)
- Негативный: текст предполагает снижение цены, слабые показатели, негативный прогноз («предупреждение о снижении прибыли», «не оправдала ожиданий», «риск банкротства»)
- Нейтральный: текст носит фактический характер без выраженной направленной тональности («компания публикует квартальный отчёт», «запланированное собрание», «рынок открылся»)
Стратегия обучения
Файн-тюнинг RoBERTa для финансовой тональности включает:
- Прогрев скорости обучения: начать с малой скорости обучения и линейно увеличивать до целевой (например, $2 \times 10^{-5}$) в течение первых 6% шагов обучения.
- Послойное затухание скорости обучения: применять меньшие скорости обучения к ранним слоям, которые захватывают более общие лингвистические знания, и большие — к поздним слоям, более специфичным для задачи. Типичный коэффициент затухания — 0,95 на слой.
- Регуляризация: применять dropout ($p = 0.1$) к весам внимания и слоям прямого распространения. Использовать weight decay ($\lambda = 0.01$) для предотвращения переобучения на небольших финансовых датасетах.
- Обрезка градиентов: ограничивать градиенты максимальной нормой 1,0 для стабилизации обучения.
Адаптация к домену
Для оптимальной производительности на финансовом тексте рекомендуется двухэтапный подход:
- Продолженное предобучение: продолжить MLM-предобучение на большом корпусе финансового текста (новостные статьи, документы SEC, стенограммы отчётных звонков). Это адаптирует языковое понимание модели к финансовой лексике и паттернам выражений.
- Задаче-специфичный файн-тюнинг: файн-тюнить на размеченных данных финансовой тональности (например, Financial PhraseBank, SemEval-2017 Task 5 или проприетарные датасеты).
Исследования показывают, что продолженное предобучение на доменном тексте перед задаче-специфичным файн-тюнингом последовательно улучшает производительность, особенно когда размеченных данных мало.
Инженерия признаков для трейдинга
Агрегация тональностных оценок
Сырые предсказания тональности необходимо трансформировать в торговые сигналы. Распространённые подходы:
- Взвешенная оценка тональности: $S_t = P(\text{pos}) - P(\text{neg})$, от -1 до 1
- Оценка с весом уверенности: $S_t = (P(\text{pos}) - P(\text{neg})) \cdot (1 - P(\text{neutral}))$, снижающая вес неоднозначных текстов
- Скользящая тональность: $\bar{S}t = \frac{1}{W} \sum{i=t-W+1}^{t} S_i$, сглаживающая шум на окне $W$
Многоисточниковая тональность
На практике торговая система одновременно обрабатывает несколько текстовых источников:
- Новостные заголовки: высокочастотные, широкий охват, часто первый сигнал
- Социальные сети: улавливают настроения розничных инвесторов, раннее обнаружение трендовых нарративов
- Стенограммы отчётных звонков: глубокий фундаментальный анализ, доступны ежеквартально
- Аналитические отчёты: профессиональная оценка, часто влияет на институциональные потоки
- Документы SEC: регуляторные раскрытия, захватывают факторы риска и существенные события
Каждый источник имеет разную задержку, надёжность и характеристики сигнала. Эффективная система взвешивает источники по их исторической предсказательной силе для целевого актива и временного горизонта.
Генерация сигналов
Тональностные сигналы преобразуются в торговые решения с помощью пороговых правил:
$$\text{Signal}t = \begin{cases} +1 \text{ (лонг)} & \text{если } S_t > \tau{buy} \ -1 \text{ (шорт)} & \text{если } S_t < \tau_{sell} \ 0 \text{ (флэт)} & \text{иначе} \end{cases}$$
Пороги $\tau_{buy}$ и $\tau_{sell}$ калибруются на исторических данных для оптимизации целевой метрики (например, коэффициента Шарпа). Асимметричные пороги могут учитывать эмпирическое наблюдение, что негативная тональность, как правило, более предсказательна для снижения цен, чем позитивная — для роста.
Применения
Альфа на основе новостей
Тональность RoBERTa на новостных заголовках генерирует альфу, улавливая реакцию рынка на информацию до того, как она будет полностью заложена в цену. Ключевой фактор — скорость: модель должна обработать текст и сгенерировать сигнал в течение миллисекунд после выхода новости.
Типичный пайплайн:
- Новость поступает через ленту (Reuters, Bloomberg или API криптоновостей)
- Текст токенизируется и подаётся через файн-тюненную RoBERTa
- Вычисляется оценка тональности и сравнивается с порогами
- Если сигнал достаточно сильный, выполняется сделка
Анализ тональности отчётности
Квартальные отчёты о прибыли — одни из наиболее влиятельных событий для цен акций. RoBERTa может применяться к:
- Пресс-релизам: извлечение немедленной тональности из отчёта
- Стенограммам звонков: анализ тона подготовленных комментариев руководства и сессии Q&A
- Языку прогнозов: обнаружение тонких изменений в прогнозных заявлениях
Комбинация количественных показателей прибыли (превышение/невыполнение EPS) с NLP-тональностью из отчётного звонка даёт более богатый сигнал, чем каждый источник по отдельности.
Тональность крипторынка
Криптовалютные рынки особенно чувствительны к тональности потому что:
- Рынки торгуются 24/7, усиливая влияние новостных событий
- Высокая доля розничных участников делает тональность соцсетей влиятельной
- Регуляторные новости (решения SEC, запреты на уровне стран) могут вызывать значительные движения цен
- Объявления о проектах (обновления протоколов, партнёрства) влияют на цены токенов
RoBERTa, файн-тюненная на крипто-специфичном тексте, может улавливать эту динамику точнее, чем универсальные модели тональности.
Реализация на Rust
Наша реализация на Rust предоставляет полный набор инструментов для торговли на основе тональности RoBERTa:
SentimentClassifier
Структура SentimentClassifier реализует упрощённую сеть прямого распространения, имитирующую классификационную голову файн-тюненной RoBERTa. Она принимает векторы признаков, представляющие текстовые эмбеддинги, и генерирует вероятности тональности по трём классам (позитивный, негативный, нейтральный). Обучение использует стохастический градиентный спуск с softmax кросс-энтропийной функцией потерь.
TextFeatureExtractor
TextFeatureExtractor обеспечивает извлечение признаков из финансового текста на основе правил. Он вычисляет признаки, включая количество тональных слов (позитивная/негативная финансовая лексика), длину текста, плотность пунктуации, частоту числовых упоминаний и соотношение заглавных букв.
SentimentAggregator
SentimentAggregator накапливает оценки тональности во времени и вычисляет скользящую статистику. Он поддерживает настраиваемое окно последних оценок и предоставляет текущую агрегированную тональность, направление тренда и уровень уверенности.
TradingSignalGenerator
TradingSignalGenerator преобразует агрегированные оценки тональности в торговые сигналы с использованием настраиваемых порогов покупки/продажи. Поддерживает как простые пороговые сигналы, так и сигналы со взвешиванием по уверенности.
BybitClient
Структура BybitClient обеспечивает асинхронный HTTP-доступ к Bybit V5 API. Она получает данные kline (свечей) из эндпоинта /v5/market/kline и информацию о тикере для корреляции с тональностными сигналами.
Интеграция с Bybit API
Реализация подключается к REST API Bybit V5 для получения рыночных данных в реальном времени:
- Эндпоинт Kline (
/v5/market/kline): предоставляет OHLCV-данные свечей с настраиваемыми интервалами. Используется для вычисления доходностей, коррелируемых с тональностными сигналами. - Эндпоинт тикера (
/v5/market/tickers): предоставляет текущую цену и данные об объёме для мониторинга рыночных условий наряду с тональностными сигналами.
Ссылки
- Liu, Y., Ott, M., Goyal, N., Du, J., Joshi, M., Chen, D., Levy, O., Lewis, M., Zettlemoyer, L., & Stoyanov, V. (2019). RoBERTa: A Robustly Optimized BERT Pretraining Approach. arXiv preprint arXiv:1907.11692.
- Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT 2019.
- Araci, D. (2019). FinBERT: Financial Sentiment Analysis with Pre-Trained Language Models. arXiv preprint arXiv:1908.10063.
- Malo, P., Sinha, A., Korhonen, P., Wallenius, J., & Takala, P. (2014). Good debt or bad debt: Detecting semantic orientations in economic texts. Journal of the Association for Information Science and Technology, 65(4), 782-796.
- Loughran, T., & McDonald, B. (2011). When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks. The Journal of Finance, 66(1), 35-65.
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, L., & Polosukhin, I. (2017). Attention is All You Need. NeurIPS 2017.