Автор Анзор Гозалишвили
Введение
Банковские новости очень важны для отслеживания последних изменений акций. Это очень важная проблема, поскольку бизнес-решения зависят от этих цифр. Автоматизация этих решений может быть очень полезна для многих банков и организаций.
Проблема
Данный образец новостей банка Англии с его веб-сайта:
Требуется извлечение показателей банковской ставки и количественного смягчения (QE). Банковская ставка: 0,75%, количественное смягчение: нет данных.
Решения
- Regex — требует инженерных правил вручную и тестирования при каждом обновлении. Невозможно использовать контекстную информацию. Слова бывают разных форм, и сложно сгенерировать из них все шаблоны. Трудно обращаться со словами OOV (Out of Vocabulary).
- Анализ зависимостей — подходит для этой задачи, так как тексты хорошо форматируются. Понимание контекста и отношений зависимости работы необходимо для понимания содержания. Сопоставление шаблонов может быть выполнено с помощью передовых методов (POS, LEMMA). Он может частично обрабатывать OOV.
- QA — нуждается в обучении моделей глубокого обучения. Может иметь больше ошибок и ошибок, что делает его ненадежным для этой проблемы. Подготовка обучающих данных для этой модели очень сложна и требует слишком много усилий.
Как я подошел к проблеме
Я выбираю второй подход, так как требуется высокая точность и большая гибкость.
Используемые библиотеки НЛП
Я использовал библиотеки spaCy и NLTK для обработки текстов. Я использовал информацию о зависимостях от spaCy и подкласса класса NLTK-s Tree, чтобы иметь удобный просмотр сгенерированного дерева зависимостей.
шаги, которые я сделал:
- Генерировать дерево зависимостей предложений внутри текстов банковских новостей.
- Собирать ключевые слова из деревьев зависимостей
- Формировать общие закономерности в таких предложениях (Тексты банковских новостей строго форматированы и таких форматов 10–20)
- Построить деревья контекста для всех этих шаблонов
- Проверяйте информацию внутри деревьев зависимостей, используя контекстное дерево
Сгенерированные деревья зависимостей
Путем анализа таких древовидных паттернов я нашел всего их 10 штук.
Собирайте ключевые слова и находите закономерности
В основном шаблоны состояли из некоторых основных глаголов (увеличение, голосование, поддержание), Субъектов/Объектов (MPC-Комитет по денежно-кредитной политике, Банк Англии, Комитет) и чисел/процентов.
Создание общих шаблонов
В большинстве случаев предложение с некоторой значимой информацией начиналось с подлежащего, затем описывалось какое-то действие, которое могло быть выполнено при изменении банковской ставки или сумме количественного смягчения. Найдя эти закономерности, я смог написать всего 10–20 общих правил, которые работали на всех примерах со 100% точностью.
Стройте контекстные деревья
У меня было две абстракции: Дерево зависимостей, Дерево контекста и Сопоставление контекста. Дерево зависимостей представляло собой дерево предложений, содержащих зависимости, POS-теги, леммы и т. д. Деревья контекста содержали информацию для анализа таких деревьев зависимостей и поиска сгенерированных шаблонов. Context Matcher брал оба дерева, находил закономерности и анализировал необходимую информацию.
Context Tree имело несколько полей внутри:
- Плохие токены поддерева: токены, которые не должны находиться в поддереве данного токена.
- Кандидаты: несколько версий, которые были найдены в этом узле в проанализированном дереве зависимостей.
- Дочерние элементы: дочерние узлы контекстного дерева.
- Ярлык: имя данного узла контекстного дерева.
- Родитель: родитель данного узла.
- Валидатор (лемма, pos, хорошие токены поддерева): валидатор проверяет лемму, pos-теги и токены, которые должны быть в поддереве.
Могло быть и больше, но мне хватило и этого, чтобы что-то сделать.
Проверка информации в деревьях зависимостей
Принцип работы Context Matcher:
- Построить дерево зависимостей для текста.
- Создайте одно контекстное дерево для одного правила/шаблона.
- Полный перебор всех шаблонов из всех корней дерева зависимостей.
После выполнения поиска из каждого корня контекстные деревья сохраняли информацию о поиске во внутренних узлах, и после успешного выполнения всех правил проверки гарантировались действительные числа.
Пример запроса и ответа
Выводы и заключительные комментарии
- Существуют новые, старые и сложные способы решения данной проблемы, и в зависимости от требований вы можете выбрать лучший, который соответствует вашим потребностям.
- Использование библиотек NLP лучше, чем просто REGEX. Он включает в себя все возможности регулярных выражений и добавляет более продвинутый анализ текста. Единственное требование — наличие текстов на естественном языке.
- Модели глубокого обучения очень хороши, если у вас нет критической потребности в идеальной точности и вы можете собирать размеченные данные.