Создание структурированной ленты финансовых новостей с использованием Python, SpaCy и Streamlit
Начало работы с NLP путем создания приложения для распознавания именованных сущностей (NER).
By Харшит Тяги, Инструктор по науке о данных | Наставник | YouTube
Одно из очень интересных и широко используемых приложений NLP - это распознавание именованных сущностей (NER).
Получение информации из необработанных и неструктурированных данных имеет жизненно важное значение. Загрузка документа и получение из него важной информации называется поиском информации.
Поиск информации был основной задачей / вызовом в НЛП. И NER (или NEL - Named Entity Linking) используется в нескольких областях (финансы, лекарства, электронная коммерция и т. Д.) Для целей поиска информации.
В этом учебном посте я покажу вам, как можно использовать NEL для разработки настраиваемой ленты новостей фондового рынка, в которой перечислены самые популярные акции в Интернете.
Предварительные условия
Таких предпосылок как таковых нет. Возможно, вам понадобится некоторое знакомство с python и основными задачами NLP, такими как токенизация, теги POS, синтаксический анализ зависимостей и т. Д.
Я расскажу о важных моментах более подробно, так что даже если вы полный новичок, вы сможете понять, что происходит.
Итак, давайте продолжим, проследим, и у вас будет минимальная лента новостей акций, которую вы можете начать исследовать.
Инструменты / настройки, которые вам понадобятся:
- Google Colab для первоначального тестирования и исследования данных и библиотеки SpaCy.
- VS Code (или любой редактор) для кодирования приложения Streamlit.
- Источник информации о фондовом рынке (новости), на основе которых мы будем выполнять NER, а затем NEL.
- Виртуальная среда Python (я использую conda) вместе с такими библиотеками, как Pandas, SpaCy, Streamlit, Streamlit-Spacy (если вы хотите показать некоторые рендеры SpaCy).
Цель
Цель этого проекта - изучить и применить распознавание именованных сущностей для извлечения важных сущностей (в нашем примере это публичные компании), а затем связать каждую сущность с некоторой информацией с помощью базы знаний (список компаний Nifty500).
Мы будем получать текстовые данные из RSS-каналов в Интернете, извлекать названия оживленных акций, а затем извлекать данные об их рыночных ценах, чтобы проверить подлинность новостей, прежде чем открывать какую-либо позицию по этим акциям.
Примечание: NER не может быть проблемой современного уровня, но он имеет множество приложений в отрасли.
Переходим к Google Colab для экспериментов и тестирования:
Шаг 1. Извлечение данных о трендовых новостях по акциям
Чтобы получать достоверные и достоверные новости фондового рынка, я буду использовать Economic Times и Управление деньгами RSS-каналы для этого руководства, но вы также можете использовать / добавлять RSS-каналы вашей страны или данные Twitter / Telegram (группы), чтобы сделать ваш канал более информативным / точным.
Возможности огромны. Это руководство должно послужить отправной точкой для применения NEL для создания приложений в различных доменах, решающих различные виды проблем с поиском информации.
Если вы продолжите смотреть RSS-канал, он будет выглядеть примерно так:
https://economictimes.indiatimes.com/markets/rssfeeds/1977021501.cms
Наша цель - получить текстовые заголовки из этого RSS-канала, а затем мы будем использовать SpaCy для извлечения основных сущностей из заголовков.
Заголовки присутствуют внутри тег XML здесь.
Во-первых, нам нужно захватить весь XML-документ, и мы можем использовать requests
библиотека для этого. Убедитесь, что эти пакеты установлены в среде выполнения в colab.
Вы можете запустить следующую команду, чтобы установить практически любой пакет прямо из ячейки кода colab:
!pip install <package_name>
Отправить GET
запрос по предоставленной ссылке для захвата XML-документа.
import requestsresp = requests.get("https://economictimes.indiatimes.com/markets/stocks/rssfeeds/2146842.cms")
Запустите ячейку, чтобы проверить, что вы получили в объекте ответа.
Он должен дать вам успешный ответ с HTTP-кодом 200 следующим образом:
Теперь, когда у вас есть этот объект ответа, мы можем передать его содержимое классу BeautifulSoup для анализа XML-документа следующим образом:
from bs4 import BeautifulSoupsoup = BeautifulSoup(resp.content, features='xml')
soup.findAll('title')
Это должно дать вам все заголовки внутри списка Python:
Изображение автора
Замечательно, у нас есть текстовые данные, из которых мы будем извлекать основные сущности (которые в данном случае являются публично торгуемыми компаниями) с помощью НЛП.
Пришло время применить НЛП в действии.
Шаг 2. Извлечение сущностей из заголовков
Это захватывающая часть. Мы будем использовать предварительно обученная базовая языковая модель из spaCy
библиотека для извлечения основных сущностей в заголовке.
Немного о spaCy и основных моделях.
ошалевший - это библиотека НЛП с открытым исходным кодом, которая обрабатывает текстовые данные со сверхбыстрой скоростью. Это ведущая библиотека в исследованиях НЛП, которая широко используется в приложениях корпоративного уровня. spaCy хорошо известен тем, что решает эту проблему. И он поддерживает более 64 языков и хорошо работает как с TensorFlow, так и с PyTorch.
Говоря об основных моделях, в spaCy есть два основных класса предварительно обученных языковых моделей, которые обучены на текстовых данных разного размера, чтобы дать нам современные выводы.
- Базовые модели - для универсальных базовых задач НЛП.
- Стартовые модели - для нишевых приложений, требующих трансферного обучения. Мы можем использовать изученные веса модели для точной настройки наших пользовательских моделей без необходимости обучения модели с нуля.
Поскольку наш вариант использования является базовым в этом руководстве, мы собираемся придерживаться en_core_web_sm
основная модель конвейера.
Итак, загрузим это в нашу записную книжку:
nlp = spacy.load("en_core_web_sm")
Примечание: Colab уже загрузил это для нас, но если вы попытаетесь запустить его в своей локальной системе, вам придется сначала загрузить модель, используя следующую команду:
python -m spacy download en_core_web_sm
en_core_web_sm - это, по сути, англоязычный конвейер, оптимизированный для ЦП, который имеет следующие компоненты:
- tok2vec - токен для векторов (выполняет токенизацию текстовых данных),
- tagger - добавляет соответствующие метаданные к каждому токену. spaCy использует некоторые статистические модели для прогнозирования части речи (POS) каждого токена. Больше в документации.
- parser - парсер зависимостей устанавливает отношения между токенами.
- Другие компоненты включают senter, ner, attribute_ruler, lemmatizer.
Теперь, чтобы проверить, что эта модель может сделать для нас, я пропущу один заголовок через созданную модель, а затем проверю различные части предложения.
# make sure you extract the text out of <title> tagsprocessed_hline = nlp(headlines[4].text)
Конвейер выполняет все задачи от токенизации до NER. Сначала у нас есть токены:
Изображение автора
Вы можете посмотреть на отмеченную часть речи, используя pos_
атрибутов.
Изображение автора
Каждый токен помечен некоторыми метаданными. Например, Trade - существительное собственное, Setup - существительное, :
знаки препинания и т. д. Приведен весь список тегов здесь.
А затем вы можете посмотреть, как они связаны, посмотрев на график зависимостей, используя dep_
атрибут:
Изображение автора
Здесь Trade - это соединение, Setup - это Root, Nifty - это appos (модификатор Appositional). Опять же, все синтаксические теги можно найти здесь.
Вы также можете визуализировать зависимости отношений между токенами, используя следующее отображение render()
Метод:
spacy.displacy.render(processed_hline, style='dep',jupyter=True, options={'distance': 120})
что даст этот график:
Изображение автора
Извлечение сущности
И чтобы посмотреть на важные элементы предложения, вы можете передать 'ent’
как стиль в том же коде:
Изображение автора - я использовал другой заголовок, потому что в том, который мы использовали выше, не было никаких сущностей.
У нас есть разные теги для разных сущностей, например, у дня есть ДАТА, у Glasscoat есть GPE, которые могут быть странами / городами / штатами. Мы в основном ищем компании, у которых есть тег ORG, который даст нам компании, агентства, учреждения и т. Д.
Теперь мы можем извлекать сущности из текста. Давайте приступим к извлечению организаций из всех заголовков с помощью сущностей ORG.
Это вернет список всех компаний следующим образом:
Изображение автора
Так легко, не так ли?
Теперь это волшебство spaCy!
Следующим шагом является поиск всех этих компаний в базе знаний, чтобы извлечь правильный символ акций для этой компании, а затем использовать библиотеки, такие как yahoo-financial, для извлечения их рыночных данных, таких как цена, доходность и т. Д.
Шаг 3 - Связывание именованных объектов
Цель этого проекта - узнать о том, какие акции ходят на рынке, и получить информацию о них на своей панели инструментов.
У нас есть названия компаний, но для получения информации об их торговле нам понадобится торговый символ компании.
Поскольку я извлекаю детали и новости индийских компаний, я собираюсь использовать внешнюю базу данных Nifty 500 компаний (файл CSV).
Для каждой компании мы найдем ее в списке компаний, использующих pandas, а затем запишем статистику фондового рынка, используя Yahoo-Finance библиотека.
Изображение автора
Вы должны обратить внимание на то, что я добавил «.NS» после каждого символа акции, прежде чем передавать его в Ticker
класс yfinance
библиотека. Это потому, что символы акций индийской NSE хранятся с .NS
суффикс в yfinance
.
И оживленные акции появятся во фрейме данных, как показано ниже:
Изображение автора
Вуаля! разве это не здорово? Такое простое, но глубокое приложение, которое может указать вам правильное направление с правильными акциями.
Теперь, чтобы сделать его более доступным, мы можем создать веб-приложение из кода, который мы только что написали с помощью Streamlit.
Шаг 4 - Создание веб-приложения с помощью Streamlit
Пришло время перейти к редактору и создать новый проект и виртуальную среду для приложения НЛП.
Начать работу со Streamlit для таких приложений с демонстрационными данными очень просто. Убедитесь, что у вас установлен Streamlit.
pip install Streamlit
Теперь давайте создадим новый файл с именем app.py и начнем писать функциональный код, чтобы подготовить приложение.
Импортируйте все необходимые библиотеки вверху.
import pandas as pdimport requestsimport spacyimport streamlit as stfrom bs4 import BeautifulSoupimport yfinance as yf
Добавьте заголовок в свое приложение:
st.title('Buzzing Stocks :zap:')
Протестируйте свое приложение, запустив streamlit run app.p
y в вашем терминале. Он должен открыть приложение в вашем веб-браузере.
Я добавил некоторые дополнительные функции для сбора данных из нескольких источников. Теперь вы можете добавить URL-адрес RSS-канала по вашему выбору в приложение, и данные будут обработаны, а трендовые акции будут отображаться в фрейме данных.
Чтобы получить доступ ко всей базе кода, вы можете проверить мой репозиторий здесь:
Вы можете добавить несколько элементов стиля, разные источники данных и другие типы обработки, чтобы сделать его более эффективным и полезным.
Мое приложение в текущем состоянии выглядит как изображение в баннере.
Если вы хотите следовать за мной шаг за шагом, посмотрите, как я кодирую это приложение здесь:
Следующие шаги!
Вместо того, чтобы выбирать финансовый вариант использования, вы также можете выбрать любое другое приложение по вашему выбору. Здравоохранение, электронная коммерция, исследования и многое другое. Все отрасли требуют обработки документов, извлечения и связывания важных сущностей. Попробуйте другую идею.
Простая идея - извлечь все важные сущности из исследовательской работы и затем создать граф их знаний с помощью Google Search API.
Кроме того, если вы хотите вывести приложение для подачи новостей по акциям на другой уровень, вы также можете добавить некоторые торговые алгоритмы для генерации сигналов покупки и продажи.
Я призываю вас разыграть свое воображение.
Как ты можешь связаться со мной!
Если вам понравился этот пост и вы хотите видеть больше такого контента, вы можете подписаться на моя новостная рассылка or мой канал YouTube где я продолжу делиться такими полезными и быстрыми проектами, которые можно построить.
Если вы только начинаете заниматься программированием или хотите заняться наукой о данных или машинным обучением, вы можете пройти мой курс на Академия ВИП Лейн.
Спасибо Эллиоту Ганну.
Bio: Харшит Тяги инженер с большим опытом работы в веб-технологиях и науке о данных (также известной как наука о данных с полным стеком). Он обучал более 1000 соискателей AI / Web / Data Science, а также занимается разработкой учебных курсов по науке о данных и машинному обучению. Ранее Харшит вместе с учеными из Йельского университета, Массачусетского технологического института и Калифорнийского университета в Лос-Анджелесе разрабатывал алгоритмы обработки данных.
Оригинал, Перемещено с разрешения.
Связанный:
- '
- "
- &
- доступ
- Действие
- алгоритмы
- Все
- среди
- API
- приложение
- Применение
- Приложения
- Программы
- около
- аутентичный
- подлинность
- автоматический
- браузер
- строить
- Строительство
- купить
- жужжание
- классификация
- код
- Компании
- Компания
- Соединение
- содержание
- Создающий
- Текущий
- Текущее состояние
- приборная панель
- данным
- обработка данных
- наука о данных
- База данных
- день
- сделка
- глубокое обучение
- подробность
- развивать
- расстояние
- Документация
- доменов
- Наркотики
- электронная коммерция
- редактор
- инженер
- Проект и
- Английский
- Окружающая среда
- и т.д
- Excel
- опыт
- исследование
- Face
- финансы
- финансовый
- Во-первых,
- следовать
- Google Поиск
- большой
- Последние новости
- здравоохранение
- здесь
- Как
- HTTPS
- идея
- изображение
- промышленности
- промышленность
- информация
- размышления
- учреждения
- Интернет
- IT
- знания
- язык
- Языки
- ведущий
- УЧИТЬСЯ
- узнали
- изучение
- уровень
- Кредитное плечо
- Библиотека
- LINK
- Список
- Списки
- загрузка
- локальным
- обучение с помощью машины
- основной
- рынок
- Новости рынка
- средний
- Microsoft
- MIT
- ML
- модель
- двигаться
- имена
- Новости
- НЛП
- открытый
- Возможности
- заказ
- Другое
- Другое
- бумага & картон
- игрок
- «портфель»
- PoS
- представить
- цена
- Программирование
- Проект
- проектов
- Питон
- pytorch
- Сырье
- Отношения
- исследованиям
- ответ
- Run
- Шкала
- масштабирование
- Наука
- Ученые
- Поиск
- продаем
- просто
- навыки
- So
- РЕШАТЬ
- скорость
- Начало
- и политические лидеры
- Область
- статистика
- акции
- фондовый рынок
- Акции
- Истории
- успешный
- Поддержка
- система
- технологии
- tensorflow
- тестXNUMX
- Тестирование
- время
- знак
- лексемизацию
- Лексемы
- топ
- торговать
- Торговля
- трендов
- учебник
- Лос-Анджелесе
- us
- Видео
- Виртуальный
- Смотреть
- Web
- веб-браузер
- КТО
- работает
- письмо
- X
- XML
- YouTube