Перейти к содержимому

Глава 254: Суммирование финансовых текстов

Введение

Суммирование финансовых текстов — это задача автоматического сжатия объёмных финансовых документов в краткие, информационно насыщенные резюме, которые фиксируют наиболее критичные факты и выводы. Финансовые рынки ежедневно генерируют огромный объём текстовых данных: квартальные отчёты о прибылях (10-K, 10-Q), аналитические записки, протоколы заседаний центральных банков, новостные статьи и регуляторные документы. Один отчёт 10-K может превышать 100 страниц, что делает непрактичным для портфельных управляющих и трейдеров чтение каждого документа полностью. Автоматическое суммирование закрывает этот пробел, извлекая или генерируя ключевые выводы за секунды.

Для алгоритмических трейдеров суммирование текстов служит критически важным предварительным компонентом в NLP-ориентированных торговых пайплайнах. Вместо подачи сырых, многословных документов в классификаторы тональности или генераторы сигналов, суммирование сначала дистиллирует текст до его существенного содержания. Это снижает шум, уменьшает вычислительные затраты и улучшает соотношение сигнал/шум для нижестоящих моделей. Хорошо составленное резюме телефонной конференции по прибылям может выявить, оптимистично или осторожно настроено руководство, превзошла ли выручка ожидания и был ли повышен прогноз — всё в нескольких предложениях.

В этой главе представлена полная система суммирования финансовых текстов. Мы рассмотрим как экстрактивный, так и абстрактивный подходы, математические основы скоринга предложений и генерации на базе трансформеров, а также рабочую реализацию на Rust, подключённую к криптовалютной бирже Bybit, для демонстрации того, как тональность, извлечённая из резюме, может управлять торговыми сигналами.

Ключевые концепции

Экстрактивное суммирование

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

Для документа $D = {s_1, s_2, \ldots, s_n}$, состоящего из $n$ предложений, экстрактивное суммирование присваивает оценку релевантности $r(s_i)$ каждому предложению и выбирает top-$k$ предложений:

$$S^* = \underset{S \subseteq D, |S| = k}{\arg\max} \sum_{s_i \in S} r(s_i)$$

Функция скоринга $r(s_i)$ может включать множество признаков: позицию в документе, вес TF-IDF, пересечение с заголовком, наличие именованных сущностей и длину предложения. Взвешенная комбинация даёт итоговый балл:

$$r(s_i) = \sum_{j=1}^{m} w_j \cdot f_j(s_i)$$

где $f_j$ — функции признаков, а $w_j$ — обученные или настроенные вручную веса.

Абстрактивное суммирование

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

Современное абстрактивное суммирование опирается на архитектуры кодер-декодер с механизмом внимания. Для входной последовательности $\mathbf{x} = (x_1, \ldots, x_n)$ кодер формирует скрытые состояния $\mathbf{h} = (h_1, \ldots, h_n)$. Декодер генерирует резюме токен за токеном, обращаясь к состояниям кодера:

$$\alpha_{t,i} = \frac{\exp(e_{t,i})}{\sum_{j=1}^{n} \exp(e_{t,j})}$$

$$\mathbf{c}t = \sum{i=1}^{n} \alpha_{t,i} \mathbf{h}_i$$

где $e_{t,i} = \mathbf{v}^T \tanh(\mathbf{W}_h \mathbf{h}_i + \mathbf{W}_s \mathbf{s}_t + \mathbf{b})$ — энергия внимания, $\mathbf{s}_t$ — состояние декодера, а $\mathbf{c}_t$ — контекстный вектор для предсказания следующего выходного токена.

Структура финансовых документов

Финансовые документы имеют характерную структуру, которую можно использовать для более качественного суммирования:

  • Отчёты 10-K/10-Q: содержат стандартизированные разделы (Факторы риска, Обсуждение и анализ руководства, Финансовая отчётность). Раздел обсуждения и анализа руководства (MD&A) обычно наиболее информационно насыщен для торговых сигналов.
  • Стенограммы телеконференций по прибылям: включают раздел подготовленных замечаний, за которым следует раздел вопросов и ответов. Раздел Q&A часто содержит прогнозные заявления, двигающие рынки.
  • Аналитические отчёты: включают рекомендацию, целевую цену и детальный анализ. Резюме для руководства и изменения рекомендаций — наиболее действенные разделы.
  • Протоколы центральных банков: используют тщательно выверенный язык, где тонкие изменения формулировок сигнализируют о сдвигах в политике.

Метрики ROUGE

Recall-Oriented Understudy for Gisting Evaluation (ROUGE) — стандартное семейство метрик для оценки качества суммирования. ROUGE измеряет пересечение между сгенерированным резюме и одним или несколькими эталонными резюме.

ROUGE-1 измеряет пересечение униграмм:

$$\text{ROUGE-1} = \frac{\sum_{s \in \text{Ref}} \sum_{w \in s} \min(\text{count}{\text{gen}}(w), \text{count}{\text{ref}}(w))}{\sum_{s \in \text{Ref}} \sum_{w \in s} \text{count}_{\text{ref}}(w)}$$

ROUGE-2 измеряет пересечение биграмм, учитывая гладкость и порядок слов:

$$\text{ROUGE-2} = \frac{\sum_{s \in \text{Ref}} \sum_{b \in s} \min(\text{count}{\text{gen}}(b), \text{count}{\text{ref}}(b))}{\sum_{s \in \text{Ref}} \sum_{b \in s} \text{count}_{\text{ref}}(b)}$$

ROUGE-L измеряет наибольшую общую подпоследовательность (LCS):

$$\text{ROUGE-L} = \frac{(1 + \beta^2) R_{lcs} P_{lcs}}{R_{lcs} + \beta^2 P_{lcs}}$$

где $R_{lcs} = \text{LCS}(X, Y) / |Y|$ и $P_{lcs} = \text{LCS}(X, Y) / |X|$.

Подходы машинного обучения

Экстракция на основе TF-IDF

Частота терма — обратная частота документа взвешивает слова по их важности в документе относительно корпуса. Для слова $w$ в документе $d$ из корпуса $C$:

$$\text{TF}(w, d) = \frac{f_{w,d}}{\sum_{w’ \in d} f_{w’,d}}$$

$$\text{IDF}(w, C) = \log \frac{|C|}{1 + |{d \in C : w \in d}|}$$

$$\text{TF-IDF}(w, d, C) = \text{TF}(w, d) \cdot \text{IDF}(w, C)$$

Для скоринга предложений оценка TF-IDF предложения — это средний TF-IDF составляющих его слов:

$$\text{score}{tfidf}(s) = \frac{1}{|s|} \sum{w \in s} \text{TF-IDF}(w, d, C)$$

TextRank для выбора предложений

TextRank адаптирует алгоритм PageRank для экстракции предложений. Предложения являются узлами графа, а веса рёбер представляют сходство между предложениями:

$$\text{sim}(s_i, s_j) = \frac{|{w : w \in s_i \cap s_j}|}{\log|s_i| + \log|s_j|}$$

Оценка TextRank каждого предложения вычисляется итеративно:

$$\text{TR}(s_i) = (1 - d) + d \sum_{s_j \in \text{adj}(s_i)} \frac{\text{sim}(s_i, s_j)}{\sum_{s_k \in \text{adj}(s_j)} \text{sim}(s_j, s_k)} \text{TR}(s_j)$$

где $d = 0.85$ — коэффициент демпфирования.

Абстрактивное суммирование на основе трансформеров

Предобученные модели-трансформеры, такие как BART, T5 и Pegasus, установили новые стандарты для абстрактивного суммирования. Эти модели используют архитектуру кодер-декодер с многоголовым самовниманием:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V$$

$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h) W^O$$

где $\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)$.

Инженерия признаков

Признаки уровня предложения

  • Позиционная оценка: предложения в начале документа или абзаца обычно более важны. Для предложения на позиции $i$ в документе из $n$ предложений: $f_{pos}(s_i) = 1 - i/n$.
  • Оценка длины: слишком короткие или слишком длинные предложения штрафуются: $f_{len}(s) = \min(|s|, L_{max}) / L_{max}$.
  • Оценка TF-IDF: средний TF-IDF слов в предложении.
  • Плотность именованных сущностей: предложения с большим количеством именованных сущностей более информативны: $f_{NE}(s) = |\text{NE}(s)| / |s|$.

Признаки уровня документа

  • Важность раздела: в отчёте 10-K раздел MD&A имеет более высокий вес, чем стандартные раскрытия рисков.
  • Тип документа: телеконференции по прибылям требуют иного подхода, чем регуляторные документы.
  • Временные ссылки: предложения с прогнозной лексикой (“мы ожидаем”, “прогноз на следующий квартал”) часто более значимы для рынка.

Финансово-специфические признаки

  • Распознавание финансовых сущностей: идентификация упоминаний выручки, EPS, EBITDA и других ключевых метрик.
  • Тональность предложений: индивидуальная тональность предложений обеспечивает градиент позитивности/негативности.
  • Плотность числовых данных: в финансовых документах предложения с большим количеством чисел несут конкретную, действенную информацию: $f_{num}(s) = |\text{numbers}(s)| / |s|$.

Применения

Суммирование отчётов о прибылях

Квартальные отчёты (10-K и 10-Q) — наиболее распространённая цель для финансового суммирования. Отчёт 10-K может занимать 80-150 страниц, но рыночно значимая информация сконцентрирована в нескольких ключевых разделах. Автоматический суммаризатор может извлечь наиболее важные предложения из раздела MD&A, выделить изменения в выручке, прибыли и прогнозах, и сгенерировать резюме из 5-10 предложений.

Суммирование новостей для трейдинга

Финансовые новостные ленты производят сотни статей в час. Для алгоритмической торговли суммирование в реальном времени обеспечивает скорость обработки, масштабируемость и извлечение сигналов. Тональность резюме вычисляется и преобразуется в торговое действие: сильно позитивные резюме генерируют сигналы на покупку, сильно негативные — на продажу, нейтральные предполагают удержание позиции.

Сжатие аналитических отчётов

Аналитические отчёты от продающей стороны часто занимают 20-50 страниц с детальным анализом отрасли. Портфельным управляющим нужны ключевые выводы: изменения рекомендаций, обновления целевых цен и катализаторы. Системы суммирования могут автоматически извлекать эти элементы.

Реализация на Rust

Наша реализация на Rust предоставляет полный набор инструментов для суммирования текстов:

TfIdfVectorizer

Структура TfIdfVectorizer вычисляет оценки TF-IDF для слов по корпусу документов. Она строит словарь из корпуса, вычисляет частоты термов по документам и рассчитывает значения IDF по всему корпусу.

SentenceScorer

Структура SentenceScorer комбинирует множество признаков для ранжирования предложений: позиционные оценки, оценки TF-IDF, оценки длины, плотность финансовых ключевых слов и плотность числовых данных.

TextSummarizer

Структура TextSummarizer выполняет экстрактивное суммирование путём разделения документа на предложения, скоринга каждого предложения и выбора top-$k$ предложений.

SentimentScorer

SentimentScorer обеспечивает простой анализ тональности на основе лексикона с использованием списков позитивных и негативных финансовых слов.

SummaryTrader

Структура SummaryTrader генерирует торговые сигналы на основе тональности резюме, сопоставляя оценки тональности с действиями покупки, продажи или удержания.

BybitClient

Структура BybitClient обеспечивает асинхронный HTTP-доступ к Bybit V5 API для получения данных kline (свечей) из эндпоинта /v5/market/kline.

Интеграция с Bybit API

Реализация подключается к REST API Bybit V5 для получения рыночных данных в реальном времени:

  • Эндпоинт Kline (/v5/market/kline): предоставляет OHLCV-данные свечей с настраиваемыми интервалами. Используется для комбинирования ценовых данных с сигналами тональности, полученными из суммирования.

Ссылки

  1. El-Haj, M., Rayson, P., Walker, M., Young, S., & Sherring, V. (2020). Financial report summarization with pre-trained models. arXiv preprint arXiv:2011.06956.
  2. Mihalcea, R., & Tarau, P. (2004). TextRank: Bringing order into texts. Proceedings of EMNLP, 404-411.
  3. Lewis, M., Liu, Y., Goyal, N., Ghazvininejad, M., Mohamed, A., Levy, O., … & Zettlemoyer, L. (2020). BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. ACL 2020, 7871-7880.
  4. Lin, C. Y. (2004). ROUGE: A package for automatic evaluation of summaries. Text Summarization Branches Out, 74-81.
  5. Moradi, M., Dorffner, G., & Samwald, M. (2020). Deep contextualized embeddings for quantifying the informative content in biomedical text summarization. Computer Methods and Programs in Biomedicine, 184, 105117.