Глава 250: GPT для финансового анализа
Введение
Генеративные предобученные трансформеры (GPT) стали мощной парадигмой финансового анализа, используя самоконтролируемое обучение на массивных текстовых корпусах для развития богатых представлений языка, чисел и контекста. В отличие от традиционных моделей NLP, требующих архитектур, специфичных для задачи, модели GPT обучают представления общего назначения во время предобучения и могут быть адаптированы к разнообразным финансовым задачам — от суммаризации отчётов о прибылях и анализа тональности до числового рассуждения по финансовой отчётности и генерации рыночных комментариев.
Ключевое преимущество GPT для финансов заключается в том, что финансовый текст следует паттернам на нескольких уровнях: синтаксическая структура, доменно-специфичная терминология, числовые соотношения и неявная тональность. Достаточно крупная языковая модель, предобученная на финансовых корпусах, может интернализировать эти паттерны и затем применять их к последующим задачам с минимальной дообучкой. Этот подход «предобучение, затем адаптация» оказался особенно эффективным в финансах, где размеченных данных мало, но сырого текста (отчёты SEC, аналитические отчёты, новостные статьи, стенограммы отчётов о прибылях) в изобилии.
В этой главе представлена система применения GPT-подобных моделей к финансовому анализу. Мы рассмотрим архитектуру трансформера, лежащую в основе GPT, ключевые стратегии адаптации (инженерия промптов, дообучка, обучение на нескольких примерах) и рабочую реализацию на Rust, выполняющую генерацию торговых сигналов на основе тональности с использованием данных фондового рынка и криптовалютной биржи Bybit.
Ключевые концепции
Архитектура трансформера
Семейство GPT построено на архитектуре декодера трансформера, представленной Vaswani et al. (2017). Ключевая инновация — механизм самовнимания, который позволяет каждому токену в последовательности обращать внимание на все предыдущие токены, улавливая дальнодействующие зависимости без последовательного узкого места RNN.
Для входной последовательности эмбеддингов токенов $\mathbf{X} \in \mathbb{R}^{T \times d}$ самовнимание вычисляет:
$$\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}}\right)\mathbf{V}$$
где запросы, ключи и значения — линейные проекции входа:
$$\mathbf{Q} = \mathbf{X}\mathbf{W}_Q, \quad \mathbf{K} = \mathbf{X}\mathbf{W}_K, \quad \mathbf{V} = \mathbf{X}\mathbf{W}_V$$
Многоголовое внимание расширяет это, запуская $h$ параллельных голов внимания с различными обученными проекциями, позволяя модели улавливать разные типы соотношений одновременно:
$$\text{MultiHead}(\mathbf{X}) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)\mathbf{W}_O$$
Каузальное языковое моделирование
Модели GPT обучаются с каузальной (авторегрессионной) целью языкового моделирования. Для последовательности токенов $(x_1, x_2, \ldots, x_T)$ модель максимизирует логарифмическое правдоподобие:
$$\mathcal{L} = \sum_{t=1}^{T} \log P(x_t | x_1, \ldots, x_{t-1}; \theta)$$
Это обеспечивается каузальной маской в вычислении внимания, запрещающей каждой позиции обращать внимание на будущие позиции. Модель учится предсказывать следующий токен по всему предшествующему контексту, что неявно требует понимания синтаксиса, семантики и фактических отношений.
Для финансового текста эта цель обучает модель паттернам вида: после «Выручка выросла на 15% до $» следующие токены, вероятно, будут суммой в долларах, соответствующей 15%-му росту выручки предыдущего периода.
Анализ финансовой тональности
Анализ тональности в финансах выходит за рамки простой классификации позитивного/негативного. Финансовая тональность нюансирована и зависит от контекста:
- Бычьи/медвежьи сигналы: прямые индикаторы ожиданий направления рынка
- Количественная оценка неопределённости: язык, указывающий на уверенность или сомнения в прогнозах
- Перспективные заявления: различение прошлых результатов и будущего прогноза
- Числовая тональность: «Выручка $1.2 млрд» — позитивно, если консенсус был $1.1 млрд, негативно, если $1.3 млрд
Модель GPT, дообученная на финансовом тексте, может улавливать эти нюансы, поскольку она изучила дистрибуционные паттерны финансового языка при предобучении. Оценка тональности документа $d$ может быть выражена как:
$$S(d) = \sigma\left(\mathbf{w}^T \mathbf{h}_{\text{[CLS]}} + b\right)$$
где $\mathbf{h}_{\text{[CLS]}}$ — скрытое состояние классификационного токена из последнего слоя трансформера, а $\sigma$ — сигмоидная функция, отображающая в $[0, 1]$.
Инженерия промптов для финансовых задач
Вместо дообучки моделями GPT можно управлять через тщательно составленные промпты. Это особенно полезно в финансах, где:
- Zero-shot анализ: «Классифицируйте следующий отрывок отчёта о прибылях как бычий, нейтральный или медвежий: [текст]»
- Few-shot обучение: предоставление 2-5 размеченных примеров перед запросом обучает модель формату задачи и ожидаемому результату
- Цепочка рассуждений: «Проанализируйте следующую финансовую отчётность шаг за шагом, затем дайте торговую рекомендацию: [текст]»
Эффективность инженерии промптов зависит от шаблона промпта $\mathcal{T}$, вербализатора $\mathcal{V}$, отображающего слова-метки в классы, и числа демонстраций $k$:
$$P(y | x) = P(\mathcal{V}(y) | \mathcal{T}(x, {(x_i, y_i)}_{i=1}^{k}))$$
Числовое рассуждение в финансовом контексте
Ключевая проблема GPT в финансах — числовое рассуждение. Финансовый анализ требует:
- Расчёт процентов: вычисление темпов роста, маржи, коэффициентов
- Сравнительное рассуждение: определение, превышает ли метрика ожидания
- Временное рассуждение: понимание изменений год к году и квартал к кварталу
- Масштабная осведомлённость: различение миллионов от миллиардов, базисных пунктов от процентов
Подходы машинного обучения
Дообученный GPT для классификации тональности
Наиболее прямое применение — дообучка предобученной модели GPT на размеченных данных финансовой тональности. Процесс включает:
- Предобработка: токенизация финансовых текстов с обработкой доменно-специфичных токенов (тикеры, финансовые аббревиатуры, числовые форматы)
- Контролируемая дообучка: обучение на размеченных примерах с кросс-энтропийной функцией потерь:
$$\mathcal{L}{\text{FT}} = -\sum{i=1}^{N} \sum_{c=1}^{C} y_{ic} \log \hat{y}_{ic}$$
- Регуляризация: применение dropout, weight decay и ранней остановки для предотвращения переобучения на небольших финансовых наборах данных
GPT-извлечение признаков для трейдинга
Вместо прямого использования выхода GPT можно извлечь эмбеддинги и передать их в традиционные торговые модели:
- Извлечь скрытое состояние $\mathbf{h} \in \mathbb{R}^d$ из последнего слоя трансформера
- Объединить с числовыми признаками (цена, объём, технические индикаторы) для формирования $\mathbf{x} = [\mathbf{h}; \mathbf{f}_{\text{numerical}}]$
- Обучить модель градиентного бустинга или нейронную сеть на объединённых признаках
Ансамбль с техническим анализом
Наиболее сильный подход объединяет сигналы тональности GPT с традиционными техническими и потоковыми признаками:
$$\text{Signal}_t = \alpha \cdot S_t^{\text{GPT}} + \beta \cdot S_t^{\text{technical}} + \gamma \cdot S_t^{\text{flow}}$$
где $S_t^{\text{GPT}}$ — оценка тональности GPT, $S_t^{\text{technical}}$ агрегирует скользящие средние, RSI и MACD, а $S_t^{\text{flow}}$ отражает дисбаланс потока ордеров. Веса $\alpha, \beta, \gamma$ обучаются через кросс-валидацию на исторических данных.
Применения
Анализ отчётов о прибылях
Модели GPT превосходно анализируют стенограммы отчётов о прибылях, содержащие как подготовленные замечания, так и спонтанные ответы на вопросы. Модель может:
- Обнаруживать изменения тона руководства по сравнению с предыдущими кварталами
- Идентифицировать хеджирующий язык и оговорки, сигнализирующие о неопределённости
- Извлекать прогнозный гайданс и сравнивать его с консенсусными ожиданиями
- Оценивать общую бычью/медвежью наклонность звонка
Торговые сигналы на основе новостей
Анализ новостей в реальном времени — одно из наиболее ценных применений. Модель GPT обрабатывает новостные статьи и формирует:
- Оценку релевантности: существенна ли эта новость для данного актива?
- Оценку тональности: бычьи или медвежьи последствия
- Оценку новизны: новая ли это информация или пересказ известных фактов?
- Оценку срочности: как быстро трейдер должен отреагировать?
Генерация отчётов о рисках
GPT может генерировать структурированные отчёты о рисках из неструктурированных данных, суммируя:
- Ключевые факторы риска, выявленные в нескольких отчётах
- Изменения в языке рисков со временем
- Возникающие риски, ранее не раскрывавшиеся
- Корреляцию между языком рисков и последующими движениями рынка
Реализация на Rust
Обзор архитектуры
Наша реализация на Rust предоставляет облегчённый GPT-подобный фреймворк для анализа финансового текста. Вместо реализации полного трансформера (требующего поддержки GPU) мы реализуем упрощённый конвейер анализа текста на основе внимания, демонстрирующий ключевые концепции:
- Токенизатор: разбивает финансовый текст на токены с доменно-специфичным словарём
- Слой эмбеддингов: отображает токены в плотные векторы с помощью предвычисленных финансовых эмбеддингов
- Механизм внимания: однголовое масштабированное скалярное произведение внимания для извлечения признаков
- Классификатор тональности: линейный классификатор на представлениях с вниманием
- Генератор торговых сигналов: объединяет текстовую тональность с ценовыми и объёмными признаками
Доменно-адаптивное предобучение для финансовых временных рядов
Хотя разделы выше фокусируются на GPT, применяемом к финансовым текстам, авторегрессионное предобучение в стиле GPT также может быть применено непосредственно к финансовым временным рядам, трактуя дискретизированные движения цен как «язык», который модель учится предсказывать. Этот раздел охватывает техники доменно-адаптивного предобучения, дополняющие текстовый анализ GPT.
Финансовая токенизация
Дискретизация цен
Первая задача при применении GPT к числовым финансовым данным — преобразование непрерывных ценовых рядов в дискретные токены. Для ценового ряда ${p_t}$ вычисляем логарифмические доходности:
$$r_t = \ln\left(\frac{p_t}{p_{t-1}}\right)$$
Затем квантуем в $V$ бинов с использованием границ на основе перцентилей:
$$\text{token}(r_t) = \arg\min_k |r_t - c_k|$$
где ${c_k}_{k=1}^{V}$ — центры бинов, полученные из эмпирического распределения доходностей. Типичный словарь может использовать $V = 256$ бинов, обеспечивая достаточную гранулярность для захвата значимых ценовых движений при управляемом размере словаря.
Специальные токены
Помимо токенов доходностей, словарь включает:
- [BOS]: Маркер начала последовательности
- [EOS]: Маркер конца последовательности
- [SEP]: Разделитель между различными инструментами или таймфреймами
- [MASK]: Используется для вспомогательных целей маскированного языкового моделирования
Многопризнаковая токенизация
Для более богатых представлений несколько признаков могут быть токенизированы и чередованы:
- Доходности цен (первичный сигнал)
- Изменения объёма (информация о ликвидности)
- Индикаторы режима волатильности
- Токены времени дня (для внутридневных данных)
Это создаёт многоканальную последовательность токенов: $(r_t^{\text{price}}, r_t^{\text{vol}}, r_t^{\text{regime}}, \ldots)$, захватывающую полную микроструктуру рынка.
Построение словаря
Границы бинов определяются при предобработке:
- Собрать все доходности из обучающего корпуса
- Вычислить перцентили ${q_1, q_2, \ldots, q_{V-1}}$, равномерно распределённые от 0% до 100%
- Центры бинов $c_k = (q_k + q_{k-1})/2$
- Специальная обработка экстремальных доходностей (тяжёлые хвосты): крайние бины захватывают все доходности за пределами граничных перцентилей
Этот подход на основе перцентилей обеспечивает примерно равномерные частоты токенов, что улучшает стабильность обучения и предотвращает доминирование модели обычными малыми движениями.
Дообучение для торговых задач
Предсказание режима
После предобучения классификационная голова отображает скрытые состояния модели в метки режимов:
$$\hat{y}t = \text{softmax}(W{\text{cls}} \cdot h_t + b_{\text{cls}})$$
где $h_t$ — выход трансформера на позиции $t$, а режимы могут включать: тренд вверх, тренд вниз, возврат к среднему, высокая волатильность, низкая волатильность.
Прямая генерация сигналов
Для прямой генерации торговых сигналов голова дообучения производит непрерывные сигналы:
$$s_t = \tanh(W_{\text{sig}} \cdot h_t + b_{\text{sig}})$$
где $s_t \in [-1, 1]$ представляет желаемую позицию (от шорта до лонга). Функция потерь дообучения объединяет точность предсказания с торговыми метриками:
$$\mathcal{L}{\text{trade}} = -\frac{1}{T}\sum{t=1}^{T} s_t \cdot r_{t+1} + \lambda \sum_{t=2}^{T} |s_t - s_{t-1}|$$
Второй член штрафует чрезмерные изменения позиции (регуляризация оборота).
Преимущества трансферного обучения
Предобучение предоставляет несколько преимуществ для фазы дообучения:
- Эффективность данных: Дообучение требует значительно меньше размеченных примеров, чем обучение с нуля
- Робастность: Предобученные представления лучше обобщают на невиданные рыночные условия
- Многозадачность: Один и тот же предобученный бэкбон поддерживает множество задач
- Кросс-активный трансфер: Модель, предобученная на одном наборе инструментов, может быть дообучена на других
Авторегрессионная генерация для анализа сценариев
Помимо точечных прогнозов, генеративная природа GPT позволяет сэмплировать множественные будущие траектории. Масштабирование температуры контролирует случайность генерации: более низкая температура создаёт более консервативные (пиковые) прогнозы, а более высокая — исследует более широкий диапазон сценариев. Это обеспечивает естественную основу для оценки рисков и количественной оценки неопределённости.
Литература
- Vaswani, A., et al. “Attention Is All You Need.” NeurIPS, 2017.
- Radford, A., et al. “Language Models are Unsupervised Multitask Learners.” OpenAI, 2019.
- Brown, T., et al. “Language Models are Few-Shot Learners.” NeurIPS, 2020.
- Yang, Y., Uy, M.C.S., and Huang, A. “FinBERT: A Pretrained Language Model for Financial Communications.” arXiv:2006.08097, 2020.
- Lopez-Lira, A. and Tang, Y. “Can ChatGPT Forecast Stock Price Movements? Return Predictability and Large Language Models.” arXiv:2304.07619, 2023.
- Wu, S., et al. “BloombergGPT: A Large Language Model for Finance.” arXiv:2303.17564, 2023.
- Loughran, T. and McDonald, B. “When is a Liability not a Liability? Textual Analysis, Dictionaries, and 10-Ks.” Journal of Finance, 2011.
Запуск кода
cd rustcargo testcargo run --example trading_example