Создание структурированной ленты финансовых новостей с использованием Python, SpaCy и Streamlit

Исходный узел: 1876513

Создание структурированной ленты финансовых новостей с использованием Python, SpaCy и Streamlit

Начало работы с NLP путем создания приложения для распознавания именованных сущностей (NER).


By Харшит Тяги, Инструктор по науке о данных | Наставник | YouTube


Создание структурированной ленты финансовых новостей с использованием Python, SpaCy и Streamlit

Одно из очень интересных и широко используемых приложений NLP - это распознавание именованных сущностей (NER).

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

Поиск информации был основной задачей / вызовом в НЛП. И NER (или NEL - Named Entity Linking) используется в нескольких областях (финансы, лекарства, электронная коммерция и т. Д.) Для целей поиска информации.

В этом учебном посте я покажу вам, как можно использовать NEL для разработки настраиваемой ленты новостей фондового рынка, в которой перечислены самые популярные акции в Интернете.

Предварительные условия

 
 
Таких предпосылок как таковых нет. Возможно, вам понадобится некоторое знакомство с python и основными задачами NLP, такими как токенизация, теги POS, синтаксический анализ зависимостей и т. Д.

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

Итак, давайте продолжим, проследим, и у вас будет минимальная лента новостей акций, которую вы можете начать исследовать.

Инструменты / настройки, которые вам понадобятся:

 
 

  1. Google Colab для первоначального тестирования и исследования данных и библиотеки SpaCy.
  2. VS Code (или любой редактор) для кодирования приложения Streamlit.
  3. Источник информации о фондовом рынке (новости), на основе которых мы будем выполнять NER, а затем NEL.
  4. Виртуальная среда 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 есть два основных класса предварительно обученных языковых моделей, которые обучены на текстовых данных разного размера, чтобы дать нам современные выводы.

  1. Базовые модели - для универсальных базовых задач НЛП.
  2. Стартовые модели - для нишевых приложений, требующих трансферного обучения. Мы можем использовать изученные веса модели для точной настройки наших пользовательских моделей без необходимости обучения модели с нуля.

Поскольку наш вариант использования является базовым в этом руководстве, мы собираемся придерживаться 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.py в вашем терминале. Он должен открыть приложение в вашем веб-браузере.

Я добавил некоторые дополнительные функции для сбора данных из нескольких источников. Теперь вы можете добавить URL-адрес RSS-канала по вашему выбору в приложение, и данные будут обработаны, а трендовые акции будут отображаться в фрейме данных.

Чтобы получить доступ ко всей базе кода, вы можете проверить мой репозиторий здесь:

 
GitHub - dswh / NER_News_Feed
 

Вы можете добавить несколько элементов стиля, разные источники данных и другие типы обработки, чтобы сделать его более эффективным и полезным.

Мое приложение в текущем состоянии выглядит как изображение в баннере.

Если вы хотите следовать за мной шаг за шагом, посмотрите, как я кодирую это приложение здесь:

Следующие шаги!

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

Простая идея - извлечь все важные сущности из исследовательской работы и затем создать граф их знаний с помощью Google Search API.

Кроме того, если вы хотите вывести приложение для подачи новостей по акциям на другой уровень, вы также можете добавить некоторые торговые алгоритмы для генерации сигналов покупки и продажи.

Я призываю вас разыграть свое воображение.

Как ты можешь связаться со мной!

 
 
Если вам понравился этот пост и вы хотите видеть больше такого контента, вы можете подписаться на моя новостная рассылка or мой канал YouTube где я продолжу делиться такими полезными и быстрыми проектами, которые можно построить.

Если вы только начинаете заниматься программированием или хотите заняться наукой о данных или машинным обучением, вы можете пройти мой курс на Академия ВИП Лейн.

Спасибо Эллиоту Ганну.

 
Bio: Харшит Тяги инженер с большим опытом работы в веб-технологиях и науке о данных (также известной как наука о данных с полным стеком). Он обучал более 1000 соискателей AI / Web / Data Science, а также занимается разработкой учебных курсов по науке о данных и машинному обучению. Ранее Харшит вместе с учеными из Йельского университета, Массачусетского технологического института и Калифорнийского университета в Лос-Анджелесе разрабатывал алгоритмы обработки данных.

Оригинал, Перемещено с разрешения.

Связанный:

Источник: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

Отметка времени:

Больше от КДнаггетс