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

Глава 251: Распознавание именованных сущностей в финансах

Введение

Распознавание именованных сущностей (Named Entity Recognition, NER) — это задача идентификации и классификации ключевых сущностей в неструктурированном тексте по заранее определённым категориям: названия компаний, финансовые инструменты, денежные суммы, даты и рыночные события. В финансовой области NER служит фундаментальным строительным блоком для извлечения структурированной информации из отчётов о прибылях, документов SEC, новостных статей, аналитических записок и публикаций в социальных сетях.

Финансовый текст представляет особую сложность для универсальных моделей NER. Названия компаний часто совпадают с обычными словами (“Apple”, “Sprint”, “Gap”), тикерные символы коротки и неоднозначны (“A” для Agilent, “IT” для Gartner), а финансовые инструменты имеют сложные именования (например, “5-летняя казначейская облигация 3.25% с погашением в 2028”). Доменно-специфичные модели NER, обученные на финансовых корпусах, стабильно превосходят универсальные модели на 10-20% по F1-метрике при извлечении финансовых сущностей.

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

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

Типы сущностей в финансовом NER

Системы финансового NER обычно распознают следующие категории сущностей:

  • ORG (Организация): Названия компаний, бирж, регуляторных органов (например, “Goldman Sachs”, “NYSE”, “SEC”)
  • TICKER: Тикерные символы акций и криптовалютные торговые пары (например, “AAPL”, “BTCUSDT”, “ETH”)
  • MONEY: Денежные суммы с указанием валюты (например, “$1.5 billion”, “€500 million”, “0.05 BTC”)
  • PERCENT: Процентные значения в финансовом контексте (например, “3.5%”, “рост на 12%”)
  • DATE: Временные выражения, относящиеся к финансовым событиям (например, “3 кв. 2024”, “фискальный год 2023”)
  • EVENT: Финансовые события (например, “IPO”, “дробление акций”, “отчёт о прибылях”, “маржин-колл”)
  • INSTRUMENT: Финансовые инструменты (например, “10-летние казначейские облигации”, “фьючерсы S&P 500”, “пут-опцион”)

Разметка последовательностей с BIO-тегированием

NER формулируется как задача разметки последовательностей с использованием схемы BIO (Beginning, Inside, Outside). Каждый токен в предложении получает метку:

  • B-TYPE: Начало сущности данного типа
  • I-TYPE: Внутри (продолжение) сущности данного типа
  • O: Вне какой-либо сущности

Например, предложение “Goldman Sachs reported $2.5B revenue” размечается следующим образом:

ТокенМетка
GoldmanB-ORG
SachsI-ORG
reportedO
$2.5BB-MONEY
revenueO

Такая формулировка позволяет захватывать многотокенные сущности (например, “Goldman Sachs”) как единое целое, сохраняя при этом предсказания на уровне токенов, совместимые со стандартными архитектурами разметки последовательностей.

Условные случайные поля (CRF)

Условные случайные поля — это класс дискриминативных вероятностных моделей для структурированного предсказания. В отличие от независимых классификаторов токенов, CRF моделируют условную вероятность всей последовательности меток при заданном входе:

$$P(\mathbf{y} | \mathbf{x}) = \frac{1}{Z(\mathbf{x})} \prod_{t=1}^{T} \exp\left(\sum_{k} \lambda_k f_k(y_{t-1}, y_t, \mathbf{x}, t)\right)$$

где $\mathbf{y} = (y_1, \ldots, y_T)$ — последовательность меток, $\mathbf{x}$ — входная последовательность, $f_k$ — функции признаков, $\lambda_k$ — обученные веса, а $Z(\mathbf{x})$ — функция разбиения, обеспечивающая нормализацию распределения.

Ключевое преимущество CRF для NER заключается в обеспечении согласованности меток. Например, CRF обучается тому, что за B-ORG должен следовать I-ORG или O, но никогда I-MONEY. Моделирование переходов значительно снижает ошибки разметки по сравнению с независимыми классификаторами.

Алгоритм Витерби находит оптимальную последовательность меток за время $O(T \cdot K^2)$, где $T$ — длина последовательности, а $K$ — количество меток:

$$y^* = \arg\max_{\mathbf{y}} P(\mathbf{y} | \mathbf{x})$$

Векторные представления слов и контекстуальные признаки

Современные системы NER используют плотные векторные представления токенов. Ключевые стратегии эмбеддингов для финансового NER:

  • Предобученные векторные представления: Векторы Word2Vec или GloVe, обученные на финансовых корпусах, улавливают доменную семантику. Например, “бычий” и “оптимистичный” имеют похожие эмбеддинги в финансовом пространстве слов.
  • Символьные эмбеддинги: CNN или LSTM по символьным последовательностям улавливают морфологические закономерности. Это ценно для финансового текста, где часто встречаются новые названия компаний и тикеры.
  • Контекстуальные эмбеддинги: Трансформерные модели типа FinBERT создают контекстно-зависимые представления, где одно и то же слово получает разные эмбеддинги в зависимости от окружающего текста.

Справочники (газеттиры) и внешние знания

Газеттир — это курируемый словарь известных сущностей. Финансовый NER значительно выигрывает от газеттиров, поскольку:

  1. Базы данных компаний: Списки публично торгуемых компаний (с бирж NYSE, NASDAQ, Bybit) обеспечивают высокоточное сопоставление названий организаций.
  2. Сопоставление тикеров: Полные маппинги тикер-компания разрешают неоднозначность (например, “COIN” соответствует Coinbase).
  3. Финансовые лексиконы: Словари финансовых терминов, инструментов и типов событий предоставляют сильные априорные вероятности для классификации сущностей.

Признаки газеттиров обычно кодируются как бинарные индикаторы, добавляемые к вектору признаков токена: 1, если токен (или n-грамма) совпадает с записью газеттира, 0 в противном случае.

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

Логистическая регрессия для классификации токенов

Простейший подход к NER рассматривает каждый токен независимо и применяет логистическую регрессию с вручную сконструированными признаками:

Для вектора признаков $\mathbf{x}_t$ токена $t$ вероятность метки $k$ равна:

$$P(y_t = k | \mathbf{x}_t) = \frac{\exp(\mathbf{w}_k^T \mathbf{x}t + b_k)}{\sum{j=1}^{K} \exp(\mathbf{w}_j^T \mathbf{x}_t + b_j)}$$

Типичные признаки включают:

  • Текущее слово (в нижнем регистре и оригинальное)
  • Форма слова (например, “Xx+” для слов с заглавной буквы, “d+” для цифр, “$d+.d+” для валюты)
  • Символьные префиксы и суффиксы (2-4 символа)
  • Часть речи
  • Контекст окружающих слов (окно ±2 токена)
  • Флаги принадлежности к газеттирам

Этот подход быстр и интерпретируем, но не моделирует зависимости между метками.

BiLSTM-CRF для разметки последовательностей

Архитектура BiLSTM-CRF является доминирующим подходом к NER. Двунаправленная LSTM обрабатывает последовательность токенов в обоих направлениях, создавая контекстуальные представления, которые затем подаются на слой CRF:

Прямая LSTM: $$\overrightarrow{\mathbf{h}}_t = \text{LSTM}(\mathbf{x}t, \overrightarrow{\mathbf{h}}{t-1})$$

Обратная LSTM: $$\overleftarrow{\mathbf{h}}_t = \text{LSTM}(\mathbf{x}t, \overleftarrow{\mathbf{h}}{t+1})$$

Объединённое представление: $$\mathbf{h}_t = [\overrightarrow{\mathbf{h}}_t; \overleftarrow{\mathbf{h}}_t]$$

Слой CRF сверху моделирует вероятности переходов между метками, обеспечивая глобально согласованные предсказания. Оценки эмиссии от BiLSTM комбинируются с оценками переходов в CRF для нахождения оптимальной последовательности меток.

NER на основе трансформеров (FinBERT)

Трансформерные модели, предобученные на финансовых текстах (FinBERT, SEC-BERT), достигают наилучших результатов в финансовом NER. Подход заключается в дообучении предобученного трансформера с добавлением головки классификации токенов:

$$\mathbf{h}_t = \text{Transformer}(\mathbf{x})_t$$ $$P(y_t | \mathbf{x}) = \text{softmax}(\mathbf{W} \mathbf{h}_t + \mathbf{b})$$

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

Конструирование признаков

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

Эффективные признаки для финансового NER охватывают несколько аспектов каждого токена:

  • Орфографические признаки: Написан ли токен с заглавной буквы? Полностью заглавными (характерно для тикеров)? Содержит цифры? Содержит пунктуацию (например, ”$”, ”%”)?
  • Форма слова: Сжатое представление, где заглавные буквы становятся “X”, строчные — “x”, цифры — “d” (например, “$12.5M” → “$dd.dX”)
  • Префиксы/суффиксы: Символьные n-граммы в начале и конце слова улавливают морфологические закономерности

Признаки контекстного окна

Предсказания NER выигрывают от окружающего контекста:

  • Соседние слова: Слова непосредственно до и после текущего токена дают сильные подсказки для разрешения неоднозначности. Слово “acquired” перед словом с заглавной буквы решительно указывает на B-ORG.
  • Контекст мешка слов: Более широкое окно (±5 токенов) передаёт тематический контекст. Слова “revenue”, “earnings”, “shares” указывают на финансовый контекст, где слова с заглавной буквы вероятнее всего являются организациями.

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

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

  • Определение формата тикера: Регулярные выражения, соответствующие типичным шаблонам тикеров (1-5 заглавных букв, возможно с точкой и суффиксом для классов акций)
  • Смежность с валютным символом: Токены, которым предшествуют ”$”, ”€”, ”£” или ”¥”, вероятно являются денежными значениями
  • Паттерны процентов: Токены, соответствующие \d+\.?\d*% или за которыми следует “percent” / “базисных пунктов”
  • Временные паттерны: Обнаружение ссылок на кварталы (Q1-Q4), упоминания фискального года, форматы дат
  • Близость к финансовым ключевым словам: Расстояние до якорных слов “acquired”, “reported”, “traded at”, “priced at”

Применения

Извлечение торговых сигналов

NER позволяет автоматически извлекать структурированные торговые сигналы из неструктурированных новостей:

  1. Связывание компания-событие: Определение, какая компания (сущность ORG) связана с каким событием (сущность EVENT) в новостной статье. “Apple announced a 4-for-1 stock split” → {ORG: Apple, EVENT: stock split}.
  2. Извлечение величин: Сопоставление денежных значений (MONEY) с контекстом для количественной оценки сигнала. “Revenue beat expectations by $1.2 billion” → величина: $1.2B, направление: положительное.
  3. Перекрёстное связывание: Сопоставление извлечённых сущностей ORG с тикерными символами для автоматической маршрутизации ордеров.

Мониторинг рисков

Непрерывный NER по потокам новостей и документов обеспечивает мониторинг рисков в реальном времени:

  • Картирование экспозиции: Идентификация всех организаций, упомянутых в негативных контекстах, и проверка портфельной экспозиции.
  • Обнаружение регуляторных событий: Отмечание упоминаний регуляторных действий (расследование SEC, отказ FDA), связанных с позициями в портфеле.
  • Отслеживание распространения: Когда сущность компании встречается совместно с терминами стресса, проверка контрагентской или цепочечной экспозиции.

Аналитика криптовалютного рынка

Для криптовалютных рынков и бирж типа Bybit:

  • Отслеживание упоминаний токенов: Идентификация названий и тикеров криптовалют в социальных сетях и новостях для оценки внимания.
  • Обнаружение событий бирж: Извлечение упоминаний о листингах, делистингах и добавлении торговых пар.
  • Мониторинг DeFi-протоколов: Распознавание названий DeFi-протоколов и связанных событий (взломы, обновления, голосования по управлению).

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

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

Типы токенов и сущностей

Перечисление EntityType определяет категории финансовых сущностей (ORG, TICKER, MONEY, PERCENT, DATE, EVENT, INSTRUMENT). Перечисление BioTag представляет схему BIO-тегирования. Структура Token хранит текстовое содержимое вместе с вычисленными признаками каждого токена.

FinancialNER

Структура FinancialNER реализует систему NER на основе правил и статистики для финансового текста. Она поддерживает газеттиры известных компаний, тикеров и финансовых терминов. Метод tokenize разбивает текст на токены с извлечением признаков. Метод predict присваивает BIO-теги каждому токену с использованием сопоставления паттернов и поиска в газеттирах в сочетании с контекстуальными правилами.

NERClassifier

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

BybitClient

Структура BybitClient обеспечивает асинхронный HTTP-доступ к API Bybit V5. Она извлекает данные свечей и информацию о тикерах, которая используется для построения динамических газеттиров активно торгуемых символов и для демонстрации NER на описаниях реальных рыночных данных.

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

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

  • Динамическое построение газеттиров: Эндпоинт /v5/market/tickers предоставляет список всех активно торгуемых символов. Эти символы добавляются в газеттир тикеров, повышая полноту NER на текстах, связанных с криптовалютами.
  • Генерация рыночного контекста: Данные свечей из /v5/market/kline используются для генерации реалистичного финансового текста (например, “BTCUSDT торгуется по $67,500 с объёмом 1,234 BTC”) для демонстрации и тестирования NER.

API Bybit хорошо подходит для приложений финансового NER, поскольку предоставляет:

  • Полные листинги символов для построения газеттиров
  • Данные цен в реальном времени для генерации контекстного финансового текста
  • Ответы с низкой задержкой, подходящие для конвейеров обработки текста в реальном времени

Ссылки

  1. Lample, G., Ballesteros, M., Subramanian, S., Kawakami, K., & Dyer, C. (2016). Neural architectures for named entity recognition. Proceedings of NAACL-HLT, 260-270.
  2. Huang, Z., Xu, W., & Yu, K. (2015). Bidirectional LSTM-CRF models for sequence tagging. arXiv preprint arXiv:1508.01991.
  3. Araci, D. (2019). FinBERT: Financial sentiment analysis with pre-trained language models. arXiv preprint arXiv:1908.10063.
  4. Salinas Alvarado, J. C., Verspoor, K., & Baldwin, T. (2015). Domain adaption of named entity recognition to support credit risk assessment. Proceedings of the Australasian Language Technology Association Workshop, 84-90.
  5. Akhtar, M. I., Nesi, P., & Pantaleo, G. (2023). A survey on named entity recognition in the financial domain. Information Processing & Management, 60(1), 103133.