Автор Анзор Гозалишвили

Введение

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

Проблема

Данный образец новостей банка Англии с его веб-сайта:

Требуется извлечение показателей банковской ставки и количественного смягчения (QE). Банковская ставка: 0,75%, количественное смягчение: нет данных.

Решения

  • Regex — требует инженерных правил вручную и тестирования при каждом обновлении. Невозможно использовать контекстную информацию. Слова бывают разных форм, и сложно сгенерировать из них все шаблоны. Трудно обращаться со словами OOV (Out of Vocabulary).
  • Анализ зависимостей — подходит для этой задачи, так как тексты хорошо форматируются. Понимание контекста и отношений зависимости работы необходимо для понимания содержания. Сопоставление шаблонов может быть выполнено с помощью передовых методов (POS, LEMMA). Он может частично обрабатывать OOV.
  • QA — нуждается в обучении моделей глубокого обучения. Может иметь больше ошибок и ошибок, что делает его ненадежным для этой проблемы. Подготовка обучающих данных для этой модели очень сложна и требует слишком много усилий.

Как я подошел к проблеме

Я выбираю второй подход, так как требуется высокая точность и большая гибкость.

Используемые библиотеки НЛП

Я использовал библиотеки spaCy и NLTK для обработки текстов. Я использовал информацию о зависимостях от spaCy и подкласса класса NLTK-s Tree, чтобы иметь удобный просмотр сгенерированного дерева зависимостей.

шаги, которые я сделал:

  1. Генерировать дерево зависимостей предложений внутри текстов банковских новостей.
  2. Собирать ключевые слова из деревьев зависимостей
  3. Формировать общие закономерности в таких предложениях (Тексты банковских новостей строго форматированы и таких форматов 10–20)
  4. Построить деревья контекста для всех этих шаблонов
  5. Проверяйте информацию внутри деревьев зависимостей, используя контекстное дерево

Сгенерированные деревья зависимостей

Путем анализа таких древовидных паттернов я нашел всего их 10 штук.

Собирайте ключевые слова и находите закономерности

В основном шаблоны состояли из некоторых основных глаголов (увеличение, голосование, поддержание), Субъектов/Объектов (MPC-Комитет по денежно-кредитной политике, Банк Англии, Комитет) и чисел/процентов.

Создание общих шаблонов

В большинстве случаев предложение с некоторой значимой информацией начиналось с подлежащего, затем описывалось какое-то действие, которое могло быть выполнено при изменении банковской ставки или сумме количественного смягчения. Найдя эти закономерности, я смог написать всего 10–20 общих правил, которые работали на всех примерах со 100% точностью.

Стройте контекстные деревья

У меня было две абстракции: Дерево зависимостей, Дерево контекста и Сопоставление контекста. Дерево зависимостей представляло собой дерево предложений, содержащих зависимости, POS-теги, леммы и т. д. Деревья контекста содержали информацию для анализа таких деревьев зависимостей и поиска сгенерированных шаблонов. Context Matcher брал оба дерева, находил закономерности и анализировал необходимую информацию.
Context Tree имело несколько полей внутри:

  • Плохие токены поддерева: токены, которые не должны находиться в поддереве данного токена.
  • Кандидаты: несколько версий, которые были найдены в этом узле в проанализированном дереве зависимостей.
  • Дочерние элементы: дочерние узлы контекстного дерева.
  • Ярлык: имя данного узла контекстного дерева.
  • Родитель: родитель данного узла.
  • Валидатор (лемма, pos, хорошие токены поддерева): валидатор проверяет лемму, pos-теги и токены, которые должны быть в поддереве.

Могло быть и больше, но мне хватило и этого, чтобы что-то сделать.

Проверка информации в деревьях зависимостей

Принцип работы Context Matcher:

  1. Построить дерево зависимостей для текста.
  2. Создайте одно контекстное дерево для одного правила/шаблона.
  3. Полный перебор всех шаблонов из всех корней дерева зависимостей.

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

Пример запроса и ответа

Выводы и заключительные комментарии

  • Существуют новые, старые и сложные способы решения данной проблемы, и в зависимости от требований вы можете выбрать лучший, который соответствует вашим потребностям.
  • Использование библиотек NLP лучше, чем просто REGEX. Он включает в себя все возможности регулярных выражений и добавляет более продвинутый анализ текста. Единственное требование — наличие текстов на естественном языке.
  • Модели глубокого обучения очень хороши, если у вас нет критической потребности в идеальной точности и вы можете собирать размеченные данные.