Construirea unui flux de știri financiare structurat folosind Python, SpaCy și Streamlit

Nodul sursă: 1876513

Construirea unui flux de știri financiare structurat folosind Python, SpaCy și Streamlit

Începeți cu NLP prin construirea unei aplicații Named Entity Recognition (NER).


By Harshit Tyagi, Instructor Data Science | Mentor | YouTuber


Construirea unui flux de știri financiare structurat folosind Python, SpaCy și Streamlit

Una dintre aplicațiile foarte interesante și utilizate pe scară largă ale NLP este Named Entity Recognition (NER).

Obținerea de informații din date brute și nestructurate este de o importanță vitală. Încărcarea unui document și obținerea informațiilor importante din acesta se numește regăsire informații.

Găsirea informațiilor a fost o sarcină/provocare majoră în NLP. Și NER (sau NEL — Named Entity Linking) este utilizat în mai multe domenii (finanțe, medicamente, comerț electronic etc.) în scopuri de regăsire a informațiilor.

În această postare tutorial, vă voi arăta cum puteți utiliza NEL pentru a dezvolta un flux de știri personalizat pe piața de valori care enumeră acțiunile în creștere de pe internet.

Pre-rechizite

 
 
Nu există astfel de condiții prealabile ca atare. S-ar putea să fie nevoie să fiți familiarizat cu python și cu sarcinile de bază ale NLP, cum ar fi tokenizarea, etichetarea POS, analizarea dependențelor etc.

Voi acoperi părțile importante mai detaliat, așa că, chiar dacă ești un începător complet, vei putea să-ți înțelegi ce se întâmplă.

Așadar, haideți să mergem mai departe, să urmăriți și veți avea un flux minim de știri pe care îl puteți începe să cercetați.

Instrumente/configurare de care veți avea nevoie:

 
 

  1. Google Colab pentru testarea inițială și explorarea datelor și a bibliotecii SpaCy.
  2. VS Code (sau orice editor) pentru a codifica aplicația Streamlit.
  3. Sursa informațiilor bursiere (știri) pe care vom efectua NER și ulterior NEL.
  4. Un mediu python virtual (folosesc conda) împreună cu biblioteci precum Pandas, SpaCy, Streamlit, Streamlit-Spacy (dacă doriți să afișați unele randări SpaCy.)

Obiectiv

 
 
Scopul acestui proiect este de a învăța și de a aplica Recunoașterea entităților denumite pentru a extrage entități importante (companii tranzacționate public în exemplul nostru) și apoi conectați fiecare entitate cu unele informații folosind o bază de cunoștințe (lista de companii Nifty500).

Vom obține datele textuale din fluxurile RSS de pe internet, vom extrage numele acțiunilor în zgomot și apoi vom extrage datele despre prețul pieței pentru a testa autenticitatea știrilor înainte de a lua orice poziție în acele acțiuni.


Notă: NER poate să nu fie o problemă de ultimă generație, dar are multe aplicații în industrie.


Trecerea la Google Colab pentru experimentare și testare:

Pasul 1: Extragerea datelor de știri privind stocurile în tendințe

 
 
Pentru a obține niște știri de încredere autentice de pe piața de valori, voi folosi Economic Times și Controlul banilor Fluxuri RSS pentru acest tutorial, dar puteți, de asemenea, să utilizați/adăugați fluxurile RSS din țara dvs. sau datele Twitter/Telegram(grupuri) pentru a face fluxul dvs. mai informativ/corecte.

Oportunitățile sunt imense. Acest tutorial ar trebui să servească drept o piatră de temelie pentru a aplica NEL pentru a construi aplicații în diferite domenii care rezolvă diferite tipuri de probleme de regăsire a informațiilor.

Dacă continuați să vă uitați la fluxul RSS, arată cam așa:

https://economictimes.indiatimes.com/markets/rssfeeds/1977021501.cms


 

Scopul nostru este să obținem titlurile textuale din acest flux RSS și apoi vom folosi SpaCy pentru a extrage principalele entități din titluri.

Titlurile sunt prezente în interiorul eticheta XML aici.

În primul rând, trebuie să captăm întregul document XML și putem folosi requests bibliotecă să facă asta. Asigurați-vă că aveți aceste pachete instalate în mediul dvs. de execuție în colab.

Puteți rula următoarea comandă pentru a instala aproape orice pachet direct din celula de cod a unei colab:

!pip install <package_name>

Trimite o GET solicitați la linkul furnizat pentru a captura documentul XML.

import requestsresp = requests.get("https://economictimes.indiatimes.com/markets/stocks/rssfeeds/2146842.cms")

Rulați celula pentru a verifica ce obțineți în obiectul răspuns.

Ar trebui să vă ofere un răspuns de succes cu codul HTTP 200, după cum urmează:



Acum că aveți acest obiect de răspuns, putem transmite conținutul său clasei BeautifulSoup pentru a analiza documentul XML după cum urmează:

from bs4 import BeautifulSoupsoup = BeautifulSoup(resp.content, features='xml')
soup.findAll('title')

Acest lucru ar trebui să vă ofere toate titlurile dintr-o listă Python:



Imagine a autorului

 

Minunat, avem datele textuale din care vom extrage principalele entități (care sunt companii cotate la bursă în acest caz) folosind NLP.

Este timpul să punem NLP în acțiune.

Pasul 2: Extragerea entităților din titluri

 
 
Aceasta este partea interesantă. Vom folosi un model de limbaj de bază pre-instruit de la spaCy bibliotecă pentru a extrage principalele entități dintr-un titlu.

Câteva despre spaCy și modelele de bază.

spațios este o bibliotecă NLP cu sursă deschisă care procesează datele textuale la o viteză super rapidă. Este biblioteca lider în cercetarea NLP, care este utilizată în aplicații de nivel enterprise la scară. spaCy este binecunoscut pentru scalarea cu problema. Și acceptă mai mult de 64 de limbi și funcționează bine atât cu TensorFlow, cât și cu PyTorch.

Vorbind despre modelele de bază, spaCy are două clase majore de modele de limbaj preantrenate care sunt antrenate pe diferite dimensiuni de date textuale pentru a ne oferi inferențe de ultimă generație.

  1. Modele de bază — pentru sarcini de bază NLP de uz general.
  2. Modele de pornire — pentru aplicații de nișă care necesită învățare prin transfer. Putem folosi greutățile învățate ale modelului pentru a ne ajusta modelele personalizate fără a fi nevoie să antrenăm modelul de la zero.

Deoarece cazul nostru de utilizare este de bază în acest tutorial, vom rămâne cu en_core_web_sm pipeline model de bază.

Deci, să încărcăm asta în caietul nostru de note:

nlp = spacy.load("en_core_web_sm")

Notă: Colab a descărcat deja acest lucru pentru noi, dar dacă încercați să îl rulați în sistemul dvs. local, mai întâi va trebui să descărcați modelul folosind următoarea comandă:

python -m spacy download en_core_web_sm

en_core_web_sm este practic o conductă engleză optimizată pentru CPU care are următoarele componente:

  • tok2vec — simbol către vectori (realizează tokenizarea datelor textuale),
  • tagger — adaugă metadate relevante la fiecare token. spaCy folosește unele modele statistice pentru a prezice partea de vorbire (POS) a fiecărui simbol. Mai multe în documentaţie.
  • parser — analizatorul de dependență stabilește relații între jetoane.
  • Alte componente includ sentr, ner, attribute_ruler, lematizer.

Acum, pentru a testa ce poate face acest model pentru noi, voi trece un singur titlu prin modelul instanțiat și apoi voi verifica diferitele părți ale unei propoziții.

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

Conducta îndeplinește toate sarcinile de la tokenizare la NER. Aici avem mai întâi jetoanele:



Imagine a autorului

 

Puteți privi partea etichetată a discursului folosind pos_ atribut.



Imagine a autorului

 

Fiecare simbol este etichetat cu niște metadate. De exemplu, Trade este un substantiv propriu, Setup este un substantiv, : este punctuația, așa mai departe și așa mai departe. Este oferită întreaga listă de etichete aici.

Și apoi, puteți vedea modul în care acestea sunt legate uitându-vă la graficul de dependență folosind dep_ atribut:



Imagine a autorului

 

Aici, Comerțul este un compus, Configurarea este rădăcină, Nifty este apos (modificator apozițional). Din nou, toate etichetele sintactice pot fi găsite aici.

De asemenea, puteți vizualiza dependențele relațiilor dintre jetoane folosind următoarea afișare render() metodă:

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

care va da acest grafic:



Imagine a autorului

 

Extragerea entităților

 
 
Și să te uiți la entitățile importante ale propoziției, poți trece 'ent’ ca stil în același cod:



Imagine după autor — Am folosit un alt titlu, deoarece cel pe care l-am folosit mai sus nu avea nicio entitate.

 

Avem diferite etichete pentru diferite entități, cum ar fi ziua are DATA, Glasscoat are GPE care poate fi Țări/Orase/State. Căutăm în principal entități care au eticheta ORG care ne vor oferi Companii, agenții, instituții etc.

Acum suntem capabili să extragem entități din text. Să trecem la extragerea organizațiilor din toate titlurile folosind entități ORG.

Aceasta va returna o listă a tuturor companiilor, după cum urmează:



Imagine a autorului

 

Atât de ușor, nu?

Aceasta este magia spaCy acum!

Următorul pas este să căutați toate aceste companii într-o bază de cunoștințe pentru a extrage simbolul bursier potrivit pentru compania respectivă și apoi să folosiți biblioteci precum yahoo-finance pentru a extrage detaliile pieței lor, cum ar fi prețul, randamentul etc.

Pasul 3 — Conectarea entității denumite

 
 
Scopul acestui proiect este să aflați despre ce acțiuni sunt în plin pe piață și să obțineți detaliile lor pe tabloul de bord.

Avem numele companiilor, dar pentru a obține detaliile lor de tranzacționare, vom avea nevoie de simbolul stocului de tranzacționare al companiei.

Deoarece extrag detaliile și știrile companiilor indiene, voi folosi o bază de date externă a Nifty 500 de companii (un fișier CSV).

Pentru fiecare companie, o vom căuta în lista de companii care folosesc panda și apoi vom captura statisticile bursiere folosind yahoo-finanţe bibliotecă.

Imagine a autorului

 

Un lucru pe care ar trebui să-l observați aici este că am adăugat un „.NS” după fiecare simbol bursier înainte de a-l transmite către Ticker clasa a yfinance bibliotecă. Acest lucru se datorează faptului că simbolurile bursiere indiene NSE sunt stocate cu a .NS sufix în yfinance.

Și acțiunile zgomotoase ar apărea într-un cadru de date ca mai jos:



Imagine a autorului

 

Voila! nu este grozav? O aplicație atât de simplă, dar profundă, care te-ar putea îndruma în direcția corectă cu stocurile potrivite.

Acum, pentru a-l face mai accesibil, putem crea o aplicație web din codul pe care tocmai l-am scris folosind Streamlit.

Pasul 4 — Crearea unei aplicații web folosind Streamlit

 
 
Este timpul să treceți la un editor și să creați un nou proiect și un mediu virtual pentru aplicația NLP.

Începeți cu Streamlit este foarte ușor pentru astfel de aplicații de date demonstrative. Asigurați-vă că aveți instalat streamlit.

pip install Streamlit

Acum, să creăm un nou fișier numit app.py și să începem să scriem cod funcțional pentru a pregăti aplicația.

Importați toate bibliotecile necesare în partea de sus.

import pandas as pdimport requestsimport spacyimport streamlit as stfrom bs4 import BeautifulSoupimport yfinance as yf

Adăugați un titlu aplicației dvs.:

st.title('Buzzing Stocks :zap:')

Testează-ți aplicația rulând streamlit run app.py în terminalul dvs. Ar trebui să deschidă o aplicație în browserul dvs. web.

Am adăugat câteva funcționalități suplimentare pentru a captura date din mai multe surse. Acum, puteți adăuga o adresă URL de feed RSS la alegere în aplicație, iar datele vor fi procesate, iar stocurile în tendințe vor fi afișate într-un cadru de date.

Pentru a avea acces la întreaga bază de cod, puteți consulta depozitul meu aici:

 
GitHub – dswh/NER_News_Feed
 

Puteți adăuga mai multe elemente de stil, diferite surse de date și alte tipuri de procesare pentru a o face mai eficientă și mai utilă.

Aplicația mea în starea ei actuală arată ca imaginea din banner.

Dacă vrei să mă urmărești pas cu pas, urmărește-mă să codific această aplicație aici:

Pasii urmatori!

 
 
În loc să alegeți un caz de utilizare financiară, puteți alege și orice altă aplicație la alegere. Asistență medicală, comerț electronic, cercetare și multe altele. Toate industriile necesită procesarea documentelor și extragerea și legarea unor entități importante. Încearcă o altă idee.

O idee simplă este extragerea tuturor entităților importante ale unei lucrări de cercetare și apoi crearea unui grafic de cunoștințe al acestuia folosind API-ul de căutare Google.

De asemenea, dacă doriți să duceți aplicația de flux de știri la un alt nivel, puteți adăuga niște algoritmi de tranzacționare pentru a genera și semnale de cumpărare și vânzare.

Vă încurajez să vă dezlănțuiți cu imaginația.

Cum te poți conecta cu mine!

 
 
Dacă ți-a plăcut această postare și vrei să vezi mai mult astfel de conținut, te poți abona la buletinul meu de știri or canalul meu YouTube unde voi continua să împărtășesc proiecte atât de utile și rapide pe care cineva le poate construi.

Dacă sunteți o persoană care abia a început cu programarea sau doriți să intrați în știința datelor sau ML, puteți consulta cursul meu la Academia WIP Lane.

Mulțumesc lui Elliot Gunn.

 
Bio: Harshit Tyagi este un inginer cu experiență combinată în tehnologiile web și știința datelor (alias știința datelor full-stack). El a îndrumat peste 1000 de aspiranți AI/Web/Data Science și proiectează piste de învățare pentru știința datelor și inginerie ML. Anterior, Harshit a dezvoltat algoritmi de procesare a datelor cu cercetători de la Yale, MIT și UCLA.

Original. Repostat cu permisiunea.

Related:

Sursa: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

Timestamp-ul:

Mai mult de la KDnuggets