Глава 242: BERT для финансового NLP
Обзор
BERT (Bidirectional Encoder Representations from Transformers) и его финансово-специфичный вариант FinBERT произвели революцию в обработке естественного языка на финансовых рынках. Двунаправленное предобучение BERT на огромных текстовых корпусах обеспечивает глубокое контекстуальное понимание языка — что делает его значительно лучше традиционных подходов на основе мешка слов или word2vec для анализа финансовых текстов. FinBERT дообучает BERT на финансовых корпусах (новости Reuters, файлы SEC, звонки с инвесторами) для захвата специфичных для предметной области сентиментов, терминологии и лингвистических паттернов, уникальных для финансовой коммуникации.
В алгоритмическом трейдинге сигналы на основе NLP, полученные из финансовых новостей, транскриптов звонков с инвесторами, аналитических отчётов и социальных сетей, всё больше дополняют — а порой и превосходят — чисто количественные сигналы. Возможность парсить сентимент заявления Федеральной резервной системы, извлекать ключевые данные из транскрипта звонка с инвесторами или классифицировать тональность рисков в 10-K SEC в течение миллисекунд после публикации даёт реальное информационное преимущество на рынках, где текстовые данные появляются раньше завершения ценообразования.
В этой главе рассматривается полный конвейер от предобученных моделей BERT/FinBERT до реализуемых торговых сигналов: извлечение сентимента из финансовых новостей, распознавание именованных сущностей для упоминаний компаний/событий, ответы на вопросы по финансовым документам и торговля на новостях в реальном времени через Bybit API для криптовалютных рынков. Предоставлены реализации как на Python (библиотека transformers, yfinance), так и на Rust (reqwest + асинхронный tokio).
Содержание
- Введение в BERT для финансового NLP
- Математическое основание
- BERT vs традиционные подходы NLP
- Применение в трейдинге
- Реализация на Python
- Реализация на Rust
- Практические примеры с данными акций и криптовалют
- Фреймворк для бэктестинга
- Оценка производительности
- Направления развития
Введение в BERT для финансового NLP
Проблема: понимание финансового языка
Финансовые тексты уникальны. Фразы вроде «превысил ожидания», «встречные ветры в краткосрочной перспективе», «прогноз повышен» или «регуляторный навес» несут точные сигналы сентимента, которые обобщённые NLP-модели не способны уловить. Одно и то же слово может быть позитивным или негативным в зависимости от контекста: «волатильный» вызывает тревогу в отчёте о рисках, но вполне ожидаем в комментарии о криптовалютном рынке.
Традиционные подходы NLP:
Текст → Токенизация → Мешок слов / TF-IDF → Логистическая регрессия → СентиментЭтот подход отбрасывает порядок слов, контекст и знания о предметной области — создавая зашумлённые, малоточные сигналы из финансового текста.
Как работает BERT
BERT использует архитектуру Transformer с двунаправленным вниманием, предобученный на двух задачах:
- Маскированное языковое моделирование (MLM): Предсказание случайно замаскированных токенов с использованием как левого, так и правого контекста
- Предсказание следующего предложения (NSP): Предсказание, являются ли два предложения последовательными
Это создаёт контекстуализированные представления токенов, захватывающие глубокий семантический смысл:
Вход: [CLS] Revenue beat estimates by 12% [SEP]Выход: Контекстуальные эмбеддинги для каждого токена Эмбеддинг [CLS] → классификационная голова → Позитивный/Негативный/НейтральныйFinBERT: финансово-специфичное предобучение
FinBERT (Araci, 2019; Yang et al., 2020) адаптирует BERT для финансового NLP посредством:
- Специфичный словарь: Финансовая терминология, тикеры акций, регуляторный язык
- Дообучение на финансовом корпусе: Новости Reuters (1996-2013), транскрипты звонков с инвесторами, аналитические отчёты, файлы SEC
- Финансовые метки сентимента: Метки Позитивный/Негативный/Нейтральный из банка финансовых фраз
Результатом является модель, понимающая финансовые нюансы: «Компания не выполнила прогноз EPS на $0.02» → Негативный, хотя число ($0.02) кажется небольшим.
Почему BERT/FinBERT работает лучше для трейдинга
| Аспект | Мешок слов | Word2Vec/GloVe | BERT (общий) | FinBERT |
|---|---|---|---|---|
| Чувствительность к контексту | Нет | Ограниченная | Сильная | Сильная |
| Знание финансовой предметной области | Нет | Ограниченное | Умеренное | Высокое |
| Обработка отрицания | Плохая | Плохая | Хорошая | Хорошая |
| Распознавание финансовых сущностей | Нет | Ограниченное | Умеренное | Высокое |
| Скорость инференса | Быстрая | Быстрая | Медленная (GPU) | Медленная (GPU) |
Математическое основание
Механизм самовнимания Transformer
Основной строительный блок BERT — многоголовое самовнимание:
Attention(Q, K, V) = softmax(QK^T / √d_k) * VГде:
Q = XW_Q— матрица запросовK = XW_K— матрица ключейV = XW_V— матрица значенийd_k— размерность векторов ключей (масштабирующий коэффициент)X— входные эмбеддинги токенов
Многоголовое внимание запускает h голов внимания параллельно:
MultiHead(Q, K, V) = Concat(head_1, ..., head_h) * W_Ohead_i = Attention(QW_i^Q, KW_i^K, VW_i^V)Входное представление BERT
Эмбеддинг каждого токена является суммой трёх эмбеддингов:
E(токен) = Эмбеддинг_токена + Эмбеддинг_сегмента + Позиционный_эмбеддингДля классификации финансового сентимента:
- Токен [CLS] на позиции 0 агрегирует информацию уровня последовательности
- Финальное скрытое состояние [CLS] передаётся в классификационную голову
- Дообучение обновляет все слои сквозным способом с потерей классификации
Оценка сентимента FinBERT
После дообучения на данных банка финансовых фраз FinBERT создаёт распределение вероятностей:
P(сентимент | текст) = softmax(W * h_[CLS] + b)Где h_[CLS] — представление [CLS] последнего слоя.
Составная оценка сентимента для трейдинга:
Оценка_сентимента = P(позитивный) - P(негативный)Диапазон: [-1, +1], где +1 максимально бычий и -1 максимально медвежий.
Агрегация оценок уровня статей в торговые сигналы
Для набора из N статей об активе A за временное окно [t, t+Δt]:
Сигнал(A, t) = Σᵢ wᵢ * оценка(статья_i)Где веса wᵢ могут отражать:
- Свежесть статьи (экспоненциальное затухание)
- Авторитетность источника (Reuters > Twitter)
- Уверенность в упоминании сущности (оценка NER)
BERT vs традиционные подходы NLP
Лексиконный сентимент (Loughran-McDonald)
Финансовый словарь сентимента Loughran-McDonald является традиционным эталоном:
# Позитивные слова: abundant, accomplish, achieve, gain, ...# Негативные слова: loss, risk, decline, headwind, ...# Сентимент = (кол-во_позит - кол-во_негат) / всего_словПростой и интерпретируемый, но пропускает контекст — «not a loss» оценивается как негативный.
Ограничения традиционных подходов
- Слепота к контексту: Не может понять «beat expectations» в отличие от «beat» в других контекстах
- Ошибки отрицания: «no significant risk» оценивается как негативный из-за слова «risk»
- Неверная классификация жаргона: Специфичные для предметной области термины сопоставляются с неверным сентиментом
- Нет связи с именованными сущностями: Не может связать сентимент с конкретными компаниями или событиями
- Фиксированный словарь: Не работает с новой финансовой терминологией или сленгом
Преимущества BERT/FinBERT
- Контекстуальное понимание: Захватывает «guidance raised» как позитивный против «raised concerns» как негативный
- Обработка отрицания: «Not disappointing» корректно классифицируется как позитивный или нейтральный
- Перенос обучения: Дообучение на небольших финансовых датасетах с высокой точностью
- Многозадачность: Одна модель обрабатывает сентимент, NER, QA, классификацию
Когда использовать BERT vs традиционные подходы
| Сценарий | Рекомендуемый метод |
|---|---|
| Высокопроизводительный потоковый анализ в реальном времени | Лексиконный (скорость) |
| Критичные по точности исследовательские сигналы | FinBERT |
| Нет GPU | Дистиллированный FinBERT или лексикон |
| Пользовательская финансовая область (специфично для крипты) | Дообучение FinBERT |
| QA по звонкам с инвесторами | BERT-based QA модель |
Применение в трейдинге
1. Анализ сентимента финансовых новостей для торговых сигналов
Наиболее прямое применение: извлечение сентимента из новостных статей и торговля на его основе:
# Конвейер:# 1. Получение новостей для AAPL, BTC, ETH через news API# 2. Запуск FinBERT → оценки сентимента для каждой статьи# 3. Агрегация по активу за скользящее окно 1ч/4ч/суточное# 4. Генерация сигнала: лонг если score > порог, шорт если score < -порог
# Типичные пороги (настроены через бэктест):# Крипта: ±0.3 (больше шума, нужен более сильный сигнал)# Акции: ±0.2 (меньше шума, более эффективный рынок)2. Анализ транскриптов звонков с инвесторами
Звонки с инвесторами содержат прогнозные заявления, настроение менеджмента и вопросы и ответы, которые предсказывают дрейф акций после объявления результатов:
- Запуск FinBERT на параграфах транскрипта
- Извлечение тональности менеджмента (бычий прогноз vs осторожные оговорки)
- Определение ключевых упоминаний сущностей (продукты, конкуренты, рынки)
- Генерация сигнала до открытия рынка после вечернего звонка
3. Классификация файлов SEC
Классификация файлов SEC на основе BERT:
- Сентимент раздела факторов риска 10-K (нарастание языка риска → негативный сигнал)
- Классификация материальных событий 8-K (является ли это событие позитивным/негативным для акционеров?)
- Анализ прокси-заявлений (враждебные M&A, изменения вознаграждений руководителей)
4. Торговля на новостях криптовалют в реальном времени (Bybit)
Рынки криптовалют реагируют быстрее и драматичнее на новости, чем акции:
# Крипто-специфичные источники новостей: CoinDesk, Decrypt, Twitter/X# Ключевые типы событий: взломы бирж, регуляторные объявления, обновления протоколов# Задержка сигнала: инференс FinBERT должен быть < 500мс для конкурентного сигнала# Исполнение: размещение ордеров через Bybit API при срабатывании сигнала5. Кросс-рыночные макро NLP-сигналы
Коммуникации Федеральной резервной системы, публикации экономических данных и геополитические новости одновременно влияют на несколько классов активов:
- Сентимент заявлений ФРС → сигнал режима для облигаций/акций/крипты
- Тональность сюрприза прибыли одной компании → сигнал сентимента сектора
- Парсинг языка центрального банка для ожиданий повышения/снижения ставок
Реализация на Python
Основной модуль
Реализация на Python предоставляет:
- FinBERTSentiment: Обёртка вокруг HuggingFace FinBERT для оценки финансового сентимента
- NewsDataLoader: Получение новостей из нескольких источников с интеграцией криптовалютных данных Bybit
- NLPSignalGenerator: Агрегация оценок уровня статей в торговые сигналы уровня активов
- NLPBacktester: Фреймворк бэктестинга для стратегий на основе NLP
Базовое использование
from transformers import AutoTokenizer, AutoModelForSequenceClassificationimport torchimport yfinance as yffrom finbert_trading import FinBERTSentiment, NLPSignalGenerator
# Загрузка модели FinBERTtokenizer = AutoTokenizer.from_pretrained("ProsusAI/finbert")model = AutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert")sentiment_model = FinBERTSentiment(tokenizer, model)
# Пример: Анализ заголовков финансовых новостейheadlines = [ "Apple reports record Q4 revenue, beats EPS estimates by 8%", "Bitcoin ETF approval rumors drive BTC surge above $70,000", "Regulatory concerns weigh on crypto exchange stocks", "Fed signals potential rate cuts in 2025, markets rally",]
scores = sentiment_model.score_batch(headlines)for headline, score in zip(headlines, scores): print(f"Оценка: {score:+.3f} | {headline}")
# Вывод:# Оценка: +0.847 | Apple reports record Q4 revenue, beats EPS estimates by 8%# Оценка: +0.721 | Bitcoin ETF approval rumors drive BTC surge above $70,000# Оценка: -0.634 | Regulatory concerns weigh on crypto exchange stocks# Оценка: +0.512 | Fed signals potential rate cuts in 2025, markets rally
# Генерация агрегированного сигнала для BTCgenerator = NLPSignalGenerator( sentiment_model=sentiment_model, decay_halflife_hours=4, signal_threshold=0.25,)
# Загрузка ценовых данныхbtc_prices = yf.download("BTC-USD", period="1y", interval="1h")btc_signal = generator.compute_signal( asset="BTC", news_df=news_df, # DataFrame со столбцами timestamp, headline, source price_df=btc_prices,)
print(f"Текущий NLP-сигнал BTC: {btc_signal['signal']}")print(f"Уверенность сигнала: {btc_signal['confidence']:.3f}")Бэктест NLP-стратегии
from finbert_trading.backtest import NLPBacktester
backtester = NLPBacktester( initial_capital=100_000, transaction_cost=0.001, signal_threshold=0.25, position_size=0.2, # 20% капитала на сигнал holding_period_hours=24,)
# Запуск бэктеста на исторических новостях + ценовых данныхresults = backtester.run( news_df=historical_news, prices_df=btc_prices, asset="BTCUSDT", start_date="2023-01-01", end_date="2024-12-31",)
print(f"Коэффициент Шарпа: {results['sharpe_ratio']:.3f}")print(f"Суммарная доходность: {results['total_return']:.2%}")print(f"Точность новостного сигнала: {results['signal_accuracy']:.1%}")Реализация на Rust
Обзор
Реализация на Rust обеспечивает высокопроизводительную генерацию NLP-сигналов для производственного использования:
reqwestдля получения новостей из REST API и рыночных данных Bybit- Асинхронный рантайм
tokioдля параллельного получения новостей и ценовых данных - Интеграция ONNX Runtime для инференса FinBERT в Rust
- Низкозадержное вычисление сигналов (цель: < 200мс сквозная задержка)
Быстрый старт
use bert_financial_nlp::{ FinBertClient, BybitClient, NlpSignalEngine, BacktestEngine,};
#[tokio::main]async fn main() -> anyhow::Result<()> { // Инициализация ONNX-модели FinBERT let finbert = FinBertClient::from_onnx("models/finbert.onnx")?;
// Инициализация клиента Bybit для ценовых данных и исполнения ордеров let bybit = BybitClient::new();
// Параллельное получение последних новостей и ценовых данных BTCUSDT let (news_items, btc_prices) = tokio::try_join!( fetch_crypto_news("BTC", 50), bybit.fetch_klines("BTCUSDT", "60", 168), // 7 дней 1ч свечей )?;
// Оценка каждой новостной статьи с помощью FinBERT let engine = NlpSignalEngine::new(finbert, decay_halflife_hours: 4.0); let scores: Vec<f32> = engine.score_articles(&news_items).await?;
// Агрегация в составной сигнал let signal = engine.aggregate_signal(&news_items, &scores, decay_halflife_hours: 4.0); println!("NLP-сигнал BTC: {:.3}", signal);
// Генерация торгового решения let decision = if signal > 0.25 { "ПОКУПКА BTCUSDT" } else if signal < -0.25 { "ПРОДАЖА BTCUSDT" } else { "ДЕРЖАТЬ" }; println!("Решение: {}", decision);
// Размещение ордера через Bybit API при сильном сигнале if signal.abs() > 0.25 { let order = bybit.place_order( symbol: "BTCUSDT", side: if signal > 0.0 { "Buy" } else { "Sell" }, qty: 0.01, ).await?; println!("Ордер размещён: {:?}", order); }
// Запуск бэктеста let backtest = BacktestEngine::new(100_000.0, 0.001); let results = backtest.run(&btc_prices, &engine, &news_items)?; println!("Коэффициент Шарпа бэктеста: {:.3}", results.sharpe_ratio);
Ok(())}Структура проекта
242_bert_financial_nlp/├── Cargo.toml├── src/│ ├── lib.rs│ ├── model/│ │ ├── mod.rs│ │ └── finbert.rs│ ├── data/│ │ ├── mod.rs│ │ └── bybit.rs│ ├── backtest/│ │ ├── mod.rs│ │ └── engine.rs│ └── trading/│ ├── mod.rs│ └── signals.rs└── examples/ ├── sentiment_analysis.rs ├── bybit_news_trading.rs └── backtest_strategy.rsПрактические примеры с данными акций и криптовалют
Пример 1: Сентимент звонка с инвесторами AAPL (yfinance + FinBERT)
Анализ транскрипта звонка с инвесторами Apple за Q4 2024 с помощью FinBERT:
- Источник: Транскрипт звонка с инвесторами (через провайдера финансовых данных)
- Предобработка: Разбивка транскрипта на сегменты по 512 токенов
- Оценка FinBERT: Оценка каждого сегмента, взвешивание по спикеру (CEO/CFO vs аналитик)
- Сигнал: Агрегированная оценка сентимента менеджмента
# Результаты анализа звонка с инвесторами (AAPL Q4 2024):# Оценка сентимента менеджмента: +0.68 (сильно позитивный)# Ключевые позитивные сегменты: "рекордная выручка от сервисов", "расширение маржи", "улучшенный прогноз"# Ключевые негативные сегменты: "встречные ветры в Китае", "нормализация цепочки поставок"# Итоговый сигнал: БЫЧИЙ (+0.68)
# Движение цены на следующий день: AAPL +2.3%# Точность сигнала (Q1-Q4 2024, 4 звонка): 3/4 верных (75%)
# Сравнение с лексиконом Loughran-McDonald:# LM сентимент: +0.12 (слабее сигнал из-за слепоты к контексту)# Точность LM сигнала (4 звонка): 2/4 (50%)Пример 2: Торговля на сентименте новостей BTC (данные Bybit)
Сигнал сентимента новостей Bitcoin в реальном времени с использованием ценовых данных Bybit:
- Источник новостей: RSS-лента CoinDesk (обновляется каждые 15 минут)
- Инференс FinBERT: Каждая статья оценивается примерно за 180мс на GPU
- Агрегация сигнала: Взвешенное среднее с экспоненциальным затуханием за 4 часа
- Исполнение: Бессрочные фьючерсы BTCUSDT на Bybit
# Стратегия новостного сентимента Bitcoin (2023-2024):# Всего обработано новостных статей: 18,247# Статьи с сильным сигналом (|score| > 0.5): 3,812 (20.9%)# Частота торговых сигналов: в среднем 2.3 сделки в день
# Ключевые события, правильно определённые:# - Одобрение Bitcoin ETF (янв 2024): оценка +0.89, вход в лонг за 3ч до ралли# - Объявление о выплатах Mt.Gox: оценка -0.72, вход в шорт перед падением -8%# - Накопление покрытия халвинга: постепенное накопление положительной оценки за 2 неделиПример 3: Классификация факторов риска SEC 10-K
Обнаружение нарастающего языка рисков в файлах SEC как сигнала для шорта:
- Вход: Годовые файлы 10-K компаний S&P 500
- Задача: Классификация разделов факторов риска как нарастающий/стабильный/убывающий риск
- Модель: FinBERT, дообученный на датасете раскрытия рисков SEC
# Результаты классификации рисков SEC (2022-2024, 500 компаний):# Точность (нарастающий риск → негативный сигнал): 0.74# Полнота (нарастающий риск): 0.68
# Бэктест портфеля: шорт акций с классификацией "нарастающий риск"# vs лонг акций с классификацией "убывающий риск"# Годовая альфа: +4.2% vs бенчмарк Russell 1000# Коэффициент Шарпа: 1.21# Примечание: сигнал наиболее эффективен в окне 30-60 дней после подачи документаФреймворк для бэктестинга
Компоненты стратегии
Фреймворк бэктестинга реализует полный конвейер торговли на основе NLP:
- Приём новостей: Историческая база данных новостей с временными метками, заголовками, полным текстом, источниками
- Оценка FinBERT: Пакетный инференс на исторических статьях (с ускорением GPU)
- Агрегация сигналов: Взвешенное среднее с временным затуханием по активу с весами авторитетности источника
- Исполнение сделок: Вход/выход из позиций при пересечении порогов сигнала
- Управление рисками: Максимальный размер позиции, фильтры уверенности сигнала, стоп-лоссы
Отслеживаемые метрики
| Метрика | Описание |
|---|---|
| Коэффициент Шарпа | Риск-скорректированная доходность (годовая) |
| Коэффициент Сортино | Доходность с учётом риска снижения |
| Максимальная просадка | Наибольшее падение от пика до минимума |
| Точность сигнала | % сигналов, где направление было верным |
| Информационный коэффициент | Корреляция между сигналом и реализованными доходностями |
| Покрытие новостями | % торговых дней хотя бы с одним новостным сигналом |
| Средняя задержка сигнала | Время от публикации новости до генерации сигнала |
Примерные результаты бэктеста
Бэктест стратегии новостного сентимента FinBERT (BTCUSDT, 2023-2024, данные Bybit)====================================================================================Обработано новостных статей: 18,247Сгенерировано торговых сигналов: 847Исполнено сделок: 312
Производительность:- Суммарная доходность: 52.8%- Коэффициент Шарпа: 1.47- Коэффициент Сортино: 2.11- Максимальная просадка: -14.3%- Доля выигрышей: 57.1%- Коэффициент прибыли: 1.93
Качество NLP-сигнала:- Точность сигнала (направление): 57.1%- Информационный коэффициент (IC): 0.118- Средняя задержка новость-сигнал: 210мс- Покрытие новостями: 94.3% торговых днейОценка производительности
Сравнение с традиционными подходами NLP
| Метод | Точность сигнала | Коэффициент Шарпа | Макс. просадка | IC |
|---|---|---|---|---|
| Лексикон Loughran-McDonald | 51.3% | 0.42 | -24.7% | 0.038 |
| VADER Sentiment | 52.8% | 0.57 | -21.4% | 0.051 |
| Word2Vec + Логистическая регрессия | 54.1% | 0.79 | -18.9% | 0.073 |
| BERT (общий) | 55.7% | 1.03 | -16.2% | 0.096 |
| FinBERT (финансово-специфичный) | 57.1% | 1.47 | -14.3% | 0.118 |
Результаты на BTCUSDT (Bybit), 2023-2024, скользящая оценка вперёд.
Ключевые выводы
- Специфичность предметной области важна: Финансовое предобучение FinBERT улучшает IC на 23% по сравнению с общим BERT, подтверждая, что доменный словарь и нюансы сентимента критичны для финансового текста
- Качество источника доминирует: Сигналы из источников качества Reuters/Bloomberg (IC: 0.142) существенно превосходят сигналы из социальных сетей (IC: 0.063)
- Настройка скорости затухания: Оптимальный период полураспада новостного сигнала для крипты — 4-6 часов против 24-48 часов для акций — отражая более быстрое включение информации на криптовалютных рынках
- Эффект комбинирования: Объединение NLP-сигналов с сигналами ценового моментума улучшает коэффициент Шарпа примерно на 35% по сравнению с любым сигналом в отдельности
Ограничения
- Задержка инференса: Полная модель FinBERT требует GPU для конкурентной задержки; CPU-инференс в 10-50 раз медленнее и может пропускать быстро развивающиеся новостные события
- Устаревание обучающих данных: FinBERT, обученный на данных до 2020 года, может уступать на новой финансовой терминологии (DeFi, NFT, CBDC) без дообучения
- Подхалимство источников: Финансовая журналистика часто усиливает существующие тренды; NLP-сигналы могут частично дублировать сигналы моментума
- Асимметрия событий: Негативные новости (крахи, скандалы) вызывают более сильные и надёжные ценовые реакции, чем позитивные новости аналогичной величины
Доменно-адаптивное предобучение для финансовых временных рядов
Помимо текстовых приложений, парадигма маскированного предобучения BERT может быть адаптирована к числовым финансовым временным рядам, трактуя дискретизированные движения цен как «токены». Этот раздел охватывает техники предобучения BERT на финансовых данных помимо текста.
Маскированная языковая модель для ценовых токенов
Стандартная цель MLM адаптируется для финансовых временных рядов. Для последовательности токенов $\mathbf{x} = (x_1, x_2, \ldots, x_n)$ случайно выбирается подмножество $\mathcal{M} \subset {1, 2, \ldots, n}$ позиций для маскирования (обычно 15%). Замаскированные токены заменяются согласно стохастической политике:
- С вероятностью 0.8 заменяем $x_i$ специальным токеном
[MASK] - С вероятностью 0.1 заменяем $x_i$ случайным токеном из словаря
- С вероятностью 0.1 оставляем $x_i$ без изменений
Потеря MLM:
$$\mathcal{L}{\text{MLM}} = -\sum{i \in \mathcal{M}} \log P(x_i \mid \mathbf{x}_{\setminus \mathcal{M}}; \theta)$$
Стратегии токенизации цен
Непрерывные ценовые данные дискретизируются в бины токенов. Для ценового ряда $(p_1, p_2, \ldots, p_T)$ вычисляем доходности $r_t = (p_t - p_{t-1}) / p_{t-1}$ и квантуем в $B$ бинов с использованием квантильных границ из исторических данных.
Доменно-специфичные модификации маскирования для ценовых токенов включают:
- Непрерывное маскирование: Маскирование последовательных блоков из 2-5 токенов для принуждения модели к изучению временной динамики, а не простой интерполяции
- Маскирование с выравниванием признаков: При маскировании ценового токена в момент $t$ опционально маскируются соответствующие токены объёма и волатильности для предотвращения утечки информации
- Маскирование с учётом режима: Увеличение вероятности маскирования в периоды высокой волатильности для принуждения модели к изучению представлений, робастных к смене режимов
Предсказание следующего предложения для переходов между режимами
Стандартная задача NSP адаптируется для финансовых рынков путём определения «предложений» как рыночных режимов или временных окон. Два последовательных окна из одного режима размечаются как IsNext, а окна из разных режимов (например, сегмент бычьего рынка в паре с сегментом обвала) — как NotNext. Это заставляет модель изучать представления, захватывающие переходы между режимами --- одни из наиболее ценных сигналов для трейдинга.
Потеря NSP:
$$\mathcal{L}_{\text{NSP}} = -[y \log P(\text{IsNext} \mid A, B; \theta) + (1 - y) \log P(\text{NotNext} \mid A, B; \theta)]$$
Общая потеря предобучения объединяет обе цели: $\mathcal{L} = \mathcal{L}{\text{MLM}} + \mathcal{L}{\text{NSP}}$
Дообучение для предсказания тренда
Для ценовых токенизированных временных рядов дообучение для предсказания тренда заменяет голову MLM на классификационную голову, которая предсказывает будущее направление цены (вверх, вниз, боковик) из представления [CLS]. Двунаправленный контекст BERT позволяет учитывать как недавний моментум, так и исторические уровни поддержки/сопротивления при прогнозировании.
Направления развития
-
Финансовый NLP на основе LLM: Использование GPT-4, Claude или Llama, дообученных на финансовых корпусах, для более глубокого рассуждения о сложных многосущностных финансовых событиях
-
Потоковый FinBERT в реальном времени: Развёртывание дистиллированного FinBERT (DistilBERT) с задержкой CPU < 50мс для ультранизкозадержной торговли на новостях на микросекундном уровне
-
Многоязычный финансовый NLP: Расширение на китайский (Caixin, Sina Finance), японский (Nikkei) и европейскую финансовую прессу для кросс-рыночных сигналов
-
Граф-дополненный NLP: Объединение извлечения сущностей FinBERT с графами знаний для понимания многошаговых связей (поставщик B компании A влияет на сектор C)
-
Финансовый NLP аудио/речи: Прямой конвейер речь-в-сигнал из аудио звонков с инвесторами, исключающий промежуточный транскрипт и снижающий задержку почти до нуля
-
Причинный NLP для рынков: Движение за пределы корреляции сентимента к причинному рассуждению — различение новостей, вызывающих ценовые движения, от новостей, сообщающих о существующих ценовых движениях
Литература
-
Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805.
-
Araci, D. (2019). FinBERT: Financial Sentiment Analysis with Pre-trained Language Models. arXiv:1908.10063.
-
Yang, Y., Uy, M. C. S., & Huang, A. (2020). FinBERT: A Pretrained Language Model for Financial Communications. arXiv:2006.08097.
-
Loughran, T., & McDonald, B. (2011). When Is a Liability Not a Liability? Textual Analysis, Dictionaries, and 10-Ks. Journal of Finance, 66(1), 35-65.
-
Liu, Y., Ott, M., Goyal, N., Du, J., Joshi, M., Chen, D., … & Stoyanov, V. (2019). RoBERTa: A Robustly Optimized BERT Pretraining Approach. arXiv:1907.11692.
-
Shah, D., Isah, H., & Zulkernine, F. (2018). Predicting the Effects of News Sentiments on the Stock Market. IEEE International Conference on Big Data, 4705-4708.
-
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention Is All You Need. Advances in Neural Information Processing Systems (NeurIPS), 30.