Глава 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 часто требует числовых вычислений, а не простого извлечения фрагмента. Например, ответ на вопрос «Каков был рост выручки год к году?» требует:
- Извлечения цифр выручки за два последовательных года
- Вычисления процентного изменения: $\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 с дополненным извлечением
Для больших коллекций документов стандартным является двухэтапный пайплайн «извлечь-затем-прочитать»:
- Ретривер: Для вопроса $q$ извлекает топ-$k$ наиболее релевантных пассажей из корпуса $\mathcal{D}$ с помощью плотного извлечения:
$$\text{score}(q, d) = \mathbf{E}_q(q)^T \mathbf{E}_d(d)$$
где $\mathbf{E}_q$ и $\mathbf{E}_d$ — обученные энкодеры для вопросов и документов соответственно.
- Ридер: Для каждого извлечённого пассажа $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). Архитектура обычно использует:
- Энкодер, обрабатывающий вопрос и контекст (таблица + текст)
- Декодер, пошагово генерирующий операции с вниманием к закодированному представлению
На каждом шаге декодирования $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-системы могут автоматически обрабатывать транскрипты телеконференций по прибылям для извлечения:
- Прогнозных показателей: Прогнозы выручки и прибыли, озвученные руководством
- Сигналов настроений: Как руководство характеризует состояние бизнеса
- Факторов риска: Новые риски или проблемы, поднятые во время сессии вопросов и ответов
- Конкурентной разведки: Упоминания конкурентов и позиционирования на рынке
Торговая система может одновременно мониторить сотни телеконференций по прибылям, извлекая ключевые метрики в реальном времени и генерируя сигналы быстрее, чем человеческие аналитики способны переварить информацию.
Анализ файлингов 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 на основе документов с данными в реальном времени — особенно эффективен для криптовалютных рынков, где информация меняется быстро и документы быстро устаревают.
Ссылки
- 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.
- Rajpurkar, P., Zhang, J., Lopyrev, K., & Liang, P. (2016). SQuAD: 100,000+ questions for machine comprehension of text. Proceedings of EMNLP 2016, 2383-2392.
- 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.
- 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.
- Araci, D. (2019). FinBERT: Financial sentiment analysis with pre-trained language models. arXiv preprint arXiv:1908.10063.
- 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.