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

Глава 255: Вопросно-ответные системы для финансов

Введение

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

Финансовые аналитики тратят значительную часть времени на чтение отчётов о прибылях, файлингов SEC, аналитических записок и рыночных комментариев для поиска конкретной информации. QA-система автоматизирует этот процесс, принимая вопрос на естественном языке и возвращая точный ответ, извлечённый или вычисленный из корпуса финансовых документов. Для алгоритмической торговли QA-системы могут быть интегрированы в пайплайны, преобразующие неструктурированный текст в структурированные сигналы, обеспечивая более быструю реакцию на публикации прибылей, экономические отчёты и регуляторные файлинги.

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

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

Экстрактивный вопросно-ответный анализ

Экстрактивный QA определяет непрерывный фрагмент текста в заданном контекстном пассаже, который отвечает на вопрос. Для вопроса $q$ и контекстного пассажа $c = (c_1, c_2, \ldots, c_n)$ из $n$ токенов модель предсказывает начальную позицию $s$ и конечную позицию $e$, так что ответ $a = (c_s, c_{s+1}, \ldots, c_e)$.

Вероятность ответного фрагмента раскладывается как:

$$P(a | q, c) = P(s | q, c) \cdot P(e | q, c, s)$$

На практике две отдельные линейные головы предсказывают логиты начала и конца по всем позициям токенов:

$$\text{start_logits} = \mathbf{W}_s \mathbf{h} + \mathbf{b}_s$$ $$\text{end_logits} = \mathbf{W}_e \mathbf{h} + \mathbf{b}_e$$

где $\mathbf{h} \in \mathbb{R}^{n \times d}$ — скрытое представление от энкодера. Фрагмент с наибольшим совокупным баллом $\text{start_logits}_s + \text{end_logits}_e$ (при условии $s \leq e$) выбирается как ответ.

Числовое рассуждение в финансах

Финансовый QA часто требует числовых вычислений, а не простого извлечения фрагмента. Например, ответ на вопрос «Каков был рост выручки год к году?» требует:

  1. Извлечения цифр выручки за два последовательных года
  2. Вычисления процентного изменения: $\text{рост} = \frac{R_{t} - R_{t-1}}{R_{t-1}} \times 100%$

Датасет FinQA (Chen и др., 2021) формализует это как задачу генерации программ. Модель генерирует последовательность операций:

$$\text{Программа} = [op_1(arg_1, arg_2), op_2(arg_3, arg_4), \ldots]$$

где каждая операция $op_i \in {\text{сложение}, \text{вычитание}, \text{умножение}, \text{деление}, \text{сравнение}, \text{степень}}$, а аргументы могут быть константами, значениями из таблицы или результатами предыдущих операций.

QA с дополненным извлечением

Для больших коллекций документов стандартным является двухэтапный пайплайн «извлечь-затем-прочитать»:

  1. Ретривер: Для вопроса $q$ извлекает топ-$k$ наиболее релевантных пассажей из корпуса $\mathcal{D}$ с помощью плотного извлечения:

$$\text{score}(q, d) = \mathbf{E}_q(q)^T \mathbf{E}_d(d)$$

где $\mathbf{E}_q$ и $\mathbf{E}_d$ — обученные энкодеры для вопросов и документов соответственно.

  1. Ридер: Для каждого извлечённого пассажа $d_i$ извлекает или генерирует ответ. Финальный ответ выбирается на основе комбинированного балла ретривера и ридера:

$$\hat{a} = \arg\max_{a, d_i} \left[ \lambda \cdot \text{score}(q, d_i) + (1 - \lambda) \cdot P(a | q, d_i) \right]$$

Эта архитектура масштабируется до миллионов документов при сохранении качества ответов.

Вопросы к таблицам

Финансовые документы богаты таблицами — отчёты о прибылях и убытках, балансы, отчёты о движении денежных средств. QA по таблицам требует от моделей:

  • Разбора структуры таблицы (строки, столбцы, заголовки)
  • Определения релевантных ячеек на основе вопроса
  • Выполнения операций агрегации (сумма, среднее, сравнение) при необходимости

Для таблицы $T$ с $m$ строками и $n$ столбцами и вопроса $q$ модель QA по таблицам производит ответ путём выбора ячеек и, опционально, применения оператора агрегации $\text{agg} \in {\text{НЕТ}, \text{СУММА}, \text{СЧЁТ}, \text{СРЕДНЕЕ}, \text{МАКС}, \text{МИН}}$:

$$a = \text{agg}\left({T_{i,j} : (i,j) \in \text{выбранные_ячейки}}\right)$$

Калибровка уверенности

В финансовых приложениях знание того, когда модель не знает ответа, так же важно, как получение правильного ответа. Хорошо откалиброванная QA-система должна выдавать оценку уверенности $c$ такую, что среди всех предсказаний, где $c \approx p$, приблизительно доля $p$ оказывается верной.

Калибровку можно измерить с помощью Ожидаемой ошибки калибровки (ECE):

$$ECE = \sum_{m=1}^{M} \frac{|B_m|}{N} \left| \text{acc}(B_m) - \text{conf}(B_m) \right|$$

где $B_m$ — бины предсказаний, сгруппированные по уверенности, $\text{acc}(B_m)$ — доля правильных в бине $m$, а $\text{conf}(B_m)$ — средняя уверенность.

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

Экстрактивный QA на основе трансформеров

Доминирующий подход использует предобученный энкодер-трансформер (BERT, RoBERTa, FinBERT), дообученный на данных QA. Входные данные форматируются как:

$$[\text{CLS}] ; q_1 ; q_2 ; \ldots ; q_m ; [\text{SEP}] ; c_1 ; c_2 ; \ldots ; c_n ; [\text{SEP}]$$

Модель производит контекстуализированные представления для каждого токена, и две классификационные головы предсказывают начальную и конечную позиции ответного фрагмента. Для финансового QA доменное предобучение (например, FinBERT, обученный на финансовых текстах) значительно улучшает результаты, поскольку модель лучше понимает термины вроде «EBITDA», «разводнённая прибыль на акцию» и «свободный денежный поток».

Генерация программ для числового QA

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

  1. Энкодер, обрабатывающий вопрос и контекст (таблица + текст)
  2. Декодер, пошагово генерирующий операции с вниманием к закодированному представлению

На каждом шаге декодирования $t$ декодер производит:

$$P(op_t | op_{<t}, q, c) = \text{softmax}(\mathbf{W}{op} \mathbf{d}t)$$ $$P(arg_t | op_t, op{<t}, q, c) = \text{softmax}(\mathbf{W}{arg} \mathbf{d}_t + \text{copy_attn}_t)$$

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

Переранжирование кросс-энкодером

После первоначального извлечения кросс-энкодер-переранжировщик совместно обрабатывает вопрос и каждый пассаж-кандидат для получения более точного балла релевантности:

$$\text{score}(q, d) = \sigma(\mathbf{w}^T \text{Encoder}([\text{CLS}] ; q ; [\text{SEP}] ; d ; [\text{SEP}]))$$

Кросс-энкодеры дороже би-энкодеров (они не могут предварительно вычислять эмбеддинги документов), но улавливают тонкие взаимодействия между токенами вопроса и пассажа. В финансовом QA этот шаг переранжирования особенно ценен, поскольку тонкие различия в контексте (например, к какому финансовому году относится число) радикально влияют на правильность ответа.

Инжиниринг признаков

Признаки структуры документа

Финансовые документы имеют богатую структуру, помогающую QA:

  • Заголовки разделов: Определяют, к какой части файлинга (Факторы риска, MD&A, Финансовая отчётность) относится пассаж
  • Близость к таблице: Расстояние до ближайшей таблицы, коррелирующее с вероятностью числового ответа
  • Временные маркеры: Финансовый год, квартал и даты, разрешающие неоднозначности в вопросах о конкретных временных периодах
  • Упоминания сущностей: Названия компаний, тикерные символы и имена руководителей обеспечивают привязку контекста

Классификация типа вопроса

Классификация типа вопроса помогает направить к соответствующей стратегии ответа:

  • Фактоидный: «Какова была выручка Apple в Q3 2024?» → извлечение фрагмента
  • Числовой: «Каков процент валовой маржи?» → числовое вычисление
  • Булевый: «Выросла ли выручка год к году?» → классификация да/нет
  • Сравнительный: «Какой сегмент показал более высокий рост?» → многошаговое рассуждение
  • Темпоральный: «Когда компания впервые сообщила о прибыли?» → извлечение временной информации

Признаки финансовых сущностей

Доменные признаки улучшают извлечение ответов:

  • Определение валюты: Идентификация денежных сумм и их валют
  • Распознавание процентов: Различение абсолютных чисел и процентов
  • Выравнивание временных периодов: Сопоставление упоминаний «прошлый квартал», «ФГ2023», «с начала года» с конкретными диапазонами дат
  • Нормализация единиц: Конвертация между миллионами, миллиардами и сырыми числами

Применения

Анализ телеконференций по прибылям

QA-системы могут автоматически обрабатывать транскрипты телеконференций по прибылям для извлечения:

  1. Прогнозных показателей: Прогнозы выручки и прибыли, озвученные руководством
  2. Сигналов настроений: Как руководство характеризует состояние бизнеса
  3. Факторов риска: Новые риски или проблемы, поднятые во время сессии вопросов и ответов
  4. Конкурентной разведки: Упоминания конкурентов и позиционирования на рынке

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

Анализ файлингов SEC

Публичные компании подают обширные отчёты в SEC (10-K, 10-Q, 8-K). QA-системы позволяют:

  • Мониторинг рисков: Отслеживание изменений в раскрытиях факторов риска между файлингами
  • Отслеживание ковенантов: Идентификация долговых ковенантов и их текущего статуса
  • Сделки связанных сторон: Извлечение деталей инсайдерских транзакций
  • Изменения признания выручки: Обнаружение изменений в учётной политике

Разведка криптовалютного рынка

Для криптовалютных рынков QA может применяться к:

  • Анализ вайтпейперов: Извлечение токеномики, механизмов управления и технических спецификаций
  • Настроения сообщества: Ответы на вопросы о развитии проектов из каналов Discord/Telegram
  • Документация протоколов: Запросы к документации DeFi-протоколов по конкретным параметрам (комиссии, коэффициенты обеспечения, пороги ликвидации)
  • Объявления бирж: Мониторинг объявлений Bybit и других бирж о листингах, делистингах и изменениях комиссий

Автоматизация портфельных исследований

QA-системы оптимизируют процесс исследований:

  • Скрининг: «Какие компании из S&P 500 увеличили дивиденды в этом квартале?»
  • Должная осмотрительность: «Каковы основные факторы риска для этой компании?»
  • Сравнительный анализ: «Как соотношение долга к собственному капиталу Компании А сравнивается со средним по отрасли?»
  • Мониторинг событий: «Объявила ли компания о программах обратного выкупа акций?»

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

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

DocumentStore

DocumentStore управляет коллекцией финансовых документов, каждый с метаданными (источник, дата, тип документа). Поддерживает добавление документов, полнотекстовый поиск по ключевым словам с оценкой TF-IDF и извлечение по идентификатору документа. Это формирует слой извлечения пайплайна QA.

QuestionClassifier

QuestionClassifier анализирует входящие вопросы и классифицирует их по типу (фактоидный, числовой, булевый, сравнительный, темпоральный) с использованием шаблонов ключевых слов и синтаксических эвристик. Классификация определяет, какую стратегию ответа использует пайплайн.

ExtractiveQA

Модуль ExtractiveQA реализует извлечение ответов на основе фрагментов с использованием сопоставления ключевых слов и оценки близости. Для вопроса и контекстного пассажа он определяет наиболее релевантное предложение и извлекает кандидат-фрагмент ответа. Возвращает как текст ответа, так и оценку уверенности.

NumericalReasoner

NumericalReasoner обрабатывает вопросы, требующие вычислений. Он парсит финансовые числа из текста (обрабатывая символы валют, проценты и суффиксы величин вроде «million» и «billion»), определяет требуемую операцию из вопроса и выполняет вычисление. Поддерживаемые операции включают темп роста, отношение, разность, сумму и среднее.

FinancialQAPipeline

FinancialQAPipeline оркестрирует полный рабочий процесс QA: классификация вопроса, извлечение релевантных документов, применение соответствующей стратегии ответа и возврат ранжированного списка ответов с оценками уверенности. Объединяет хранилище документов, классификатор вопросов, экстрактивный QA и числовой модуль рассуждений в единый интерфейс.

BybitClient

BybitClient предоставляет асинхронный HTTP-доступ к API Bybit V5 для получения данных о свечах и снимков книги ордеров. Это позволяет QA-системе учитывать рыночные данные в реальном времени при ответах на вопросы о текущих ценах, объёмах и рыночных условиях.

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

Реализация подключается к REST API Bybit V5 для обогащения пайплайна QA данными рынка в реальном времени:

  • Эндпоинт свечей (/v5/market/kline): Предоставляет данные OHLCV. Когда вопрос касается недавних движений цены («Какая была максимальная цена BTC сегодня?»), система получает свечи и извлекает ответ непосредственно из рыночных данных.
  • Эндпоинт книги ордеров (/v5/market/orderbook): Предоставляет текущие уровни бид/аск. Вопросы о текущем спреде, ликвидности или глубине книги ордеров могут быть решены с помощью живых снимков книги ордеров.

Этот гибридный подход — объединение QA на основе документов с данными в реальном времени — особенно эффективен для криптовалютных рынков, где информация меняется быстро и документы быстро устаревают.

Ссылки

  1. Chen, Z., Chen, W., Smiley, C., Shah, S., Borber, I., Langlotz, C., & Wang, W. Y. (2021). FinQA: A dataset of numerical reasoning over financial data. Proceedings of EMNLP 2021, 7268-7280.
  2. Rajpurkar, P., Zhang, J., Lopyrev, K., & Liang, P. (2016). SQuAD: 100,000+ questions for machine comprehension of text. Proceedings of EMNLP 2016, 2383-2392.
  3. Zhu, F., Lei, W., Huang, Y., Wang, C., Zhang, S., Lv, J., Feng, F., & Chua, T. S. (2021). TAT-QA: A question answering benchmark on a hybrid of tabular and textual content in finance. Proceedings of ACL 2021, 3277-3287.
  4. Karpukhin, V., Oguz, B., Min, S., Lewis, P., Wu, L., Edunov, S., Chen, D., & Yih, W. T. (2020). Dense passage retrieval for open-domain question answering. Proceedings of EMNLP 2020, 6769-6781.
  5. Araci, D. (2019). FinBERT: Financial sentiment analysis with pre-trained language models. arXiv preprint arXiv:1908.10063.
  6. Herzig, J., Nowak, P. K., Muller, T., Piccinno, F., & Eisenschlos, J. M. (2020). TaPas: Weakly supervised table parsing via pre-training. Proceedings of ACL 2020, 4320-4333.