Створення структурованої стрічки фінансових новин за допомогою Python, SpaCy та Streamlit

Вихідний вузол: 1876513

Створення структурованої стрічки фінансових новин за допомогою Python, SpaCy та Streamlit

Початок роботи з NLP зі створення програми розпізнавання іменованих сутностей (NER).


By Харшіт Тягі, Інструктор з даних | Наставник | YouTube


Створення структурованої стрічки фінансових новин за допомогою Python, SpaCy та Streamlit

Одним із дуже цікавих і широко використовуваних застосувань НЛП є розпізнавання іменованих сутностей (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.

Ви можете виконати таку команду, щоб установити майже будь-який пакет безпосередньо з комірки коду спільної роботи:

!pip install <package_name>

Відправити a 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:



Зображення автора

 

Чудово, у нас є текстові дані, з яких ми витягнемо основні сутності (які в даному випадку є публічними компаніями) за допомогою NLP.

Настав час запустити НЛП в дію.

Крок 2: Вилучення сутностей із заголовків

 
 
Це захоплююча частина. Ми будемо використовувати a попередньо підготовлена ​​базова модель мови від spaCy бібліотека для вилучення основних сутностей із заголовка.

Трохи про spaCy та основні моделі.

просторий це бібліотека NLP з відкритим вихідним кодом, яка обробляє текстові дані на надвисокій швидкості. Це провідна бібліотека досліджень НЛП, яка широко використовується в додатках корпоративного рівня. 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 — маркер для векторів (виконує токенізацію текстових даних),
  • тег — додає відповідні метадані до кожного токена. spaCy використовує деякі статистичні моделі для прогнозування частини мови (POS) кожного токена. Більше в документація.
  • аналізатор — аналізатор залежностей встановлює зв’язки між токенами.
  • Інші компоненти включають senter, ner, attribute_ruler, lemmatizer.

Тепер, щоб перевірити, що ця модель може зробити для нас, я пропущу один заголовок через екземпляр моделі, а потім перевірю різні частини речення.

# make sure you extract the text out of <title> tagsprocessed_hline = nlp(headlines[4].text)

Конвеєр виконує всі завдання від токенізації до NER. Тут у нас спочатку є жетони:



Зображення автора

 

Ви можете переглянути позначену частину мови за допомогою pos_ атрибут.



Зображення автора

 

Кожен токен позначено деякими метаданими. Наприклад, Торгівля — це іменник власний, Setup — іменник, : є розділові знаки тощо, і так далі. Наведено весь список тегів тут.

А потім ви можете подивитися, як вони пов’язані, подивившись на графік залежностей за допомогою dep_ атрибут:



Зображення автора

 

Тут Trade — це Compound, Setup — Root, Nifty — appos (апозиційний модифікатор). Знову ж таки, усі синтаксичні теги можна знайти тут.

Ви також можете візуалізувати залежності відношень між токенами за допомогою наступного відображення render() метод:

spacy.displacy.render(processed_hline, style='dep',jupyter=True, options={'distance': 120})

що дасть цей графік:



Зображення автора

 

Вилучення сутності

 
 
І щоб подивитися на важливі сутності пропозиції, ви можете пройти 'ent’ як стиль у тому самому коді:



Зображення від автора — я використав інший заголовок, оскільки той, який ми використали вище, не мав жодних сутностей.

 

У нас є різні теги для різних об’єктів, наприклад, день має ДАТУ, Glasscoat має GPE, який може бути країнами/містами/штатами. Ми в основному шукаємо організації, які мають тег ORG, який дасть нам компанії, агентства, установи тощо.

Тепер ми можемо витягувати сутності з тексту. Давайте приступимо до вилучення організацій з усіх заголовків за допомогою сутностей ORG.

Це поверне список усіх компаній таким чином:



Зображення автора

 

Так легко, правда?

Ось тепер магія spaCy!

Наступним кроком є ​​пошук усіх цих компаній у базі знань, щоб отримати правильний символ акцій для цієї компанії, а потім використання бібліотек, як-от yahoo-finance, щоб отримати інформацію про їхній ринок, як-от ціна, прибутковість тощо.

Крок 3 — Зв’язування іменованих сутностей

 
 
Метою цього проекту є дізнатися про те, які акції торгуються на ринку, і отримати інформацію про них на вашій інформаційній панелі.

У нас є назви компаній, але щоб отримати інформацію про їхню торгівлю, нам потрібен торговий символ акцій компанії.

Оскільки я збираю деталі та новини індійських компаній, я збираюся використовувати зовнішню базу даних Nifty 500 компаній (файл CSV).

Ми шукатимемо кожну компанію в списку компаній, які використовують pandas, а потім збиратимемо статистику фондового ринку за допомогою yahoo-фінанси бібліотека

Зображення автора

 

Одне, на що ви повинні звернути увагу, це те, що я додав «.NS» після кожного символу акцій перед тим, як передати його в Ticker класу yfinance бібліотека. Це тому, що символи акцій індійської NSE зберігаються з a .NS суфікс в yfinance.

А активні акції з’являться у фреймі даних, як показано нижче:



Зображення автора

 

Вуаля! хіба це не чудово? Така проста, але глибока програма, яка може скерувати вас у правильному напрямку з потрібними акціями.

Тепер, щоб зробити його більш доступним, ми можемо створити веб-додаток із коду, який ми щойно написали за допомогою Streamlit.

Крок 4 — Створення веб-додатку за допомогою Streamlit

 
 
Настав час перейти до редактора та створити новий проект та віртуальне середовище для програми NLP.

Початок роботи зі 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
 

Ви можете додати кілька елементів стилю, різні джерела даних та інші типи обробки, щоб зробити його більш ефективним і корисним.

Мій додаток у поточному стані виглядає як зображення на банері.

Якщо ви хочете стежити за мною крок за кроком, подивіться, як я кодую цю програму тут:

Наступні кроки!

 
 
Замість того, щоб вибирати варіант фінансового використання, ви також можете вибрати будь-яку іншу програму на свій вибір. Охорона здоров’я, електронна комерція, дослідження та багато іншого. Усі галузі потребують обробки документів, виділення та зв’язування важливих об’єктів. Спробуйте іншу ідею.

Проста ідея полягає в тому, щоб витягти всі важливі сутності дослідницької статті, а потім створити для неї графік знань за допомогою API пошуку Google.

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

Я закликаю вас проявити свою уяву.

Як ви можете зв'язатися зі мною!

 
 
Якщо вам сподобався цей пост і ви хочете бачити більше такого вмісту, ви можете підписатися на нього мій бюлетень or мій канал YouTube де я буду продовжувати ділитися такими корисними та швидкими проектами, які можна побудувати.

Якщо ви тільки починаєте займатися програмуванням або хочете потрапити в науку про дані чи машинне навчання, ви можете переглянути мій курс на Академія WIP Lane.

Дякую Еліоту Ганну.

 
Біо: Харшіт Тягі є інженером з накопиченим досвідом у веб-технологіях та науці про дані (він же повний стек даних). Він був наставником понад 1000 претендентів на штучний інтелект/Інтернет/науку про дані та розробляє треки для вивчення даних та інженерного навчання. Раніше Харшіт розробив алгоритми обробки даних разом із дослідниками з Єльського університету, Массачусетського технологічного інституту та Каліфорнійського університету.

Оригінал. Повідомлено з дозволу.

За темою:

Джерело: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

Часова мітка:

Більше від KDnuggets