Struktureeritud finantsuudistevoo loomine Pythoni, SpaCy ja Streamliti abil

Allikasõlm: 1876513

Struktureeritud finantsuudistevoo loomine Pythoni, SpaCy ja Streamliti abil

NLP-ga alustamiseks koostage nimega üksuse tuvastamise (NER) rakendus.


By Karm Tyagi, andmeteaduse juhendaja | Mentor | YouTuber


Struktureeritud finantsuudistevoo loomine Pythoni, SpaCy ja Streamliti abil

Üks väga huvitavaid ja laialdaselt kasutatavaid NLP rakendusi on Named Entity Recognition (NER).

Toorandmetest ja struktureerimata andmetest ülevaate saamine on ülioluline. Dokumendi üleslaadimist ja sealt oluliste infokildude hankimist nimetatakse infootsinguks.

Infootsing on NLP-s olnud suur ülesanne/väljakutse. Ja NER-i (või NEL-i – nimega üksuste linkimist) kasutatakse teabe hankimise eesmärgil mitmes valdkonnas (rahandus, ravimid, e-kaubandus jne).

Selles õpetuspostituses näitan teile, kuidas saate NEL-i kasutada, et töötada välja kohandatud börsiuudiste voog, mis loetleb Interneti sumisevad aktsiad.

Eeltingimused

 
 
Selliseid eeldusi kui selliseid pole. Võimalik, et peate veidi tundma pythonit ja NLP põhiülesandeid, nagu tokeniseerimine, POS-i märgistamine, sõltuvuse sõelumine jne.

Ma käsitlen olulisi punkte üksikasjalikumalt, nii et isegi kui olete täiesti algaja, saate toimuva ümber pöörata.

Niisiis, jätkame asjaga, järgige teksti ja teil on minimaalne aktsiauudiste voog, mida saate uurida.

Tööriistad/seadistus, mida vajate:

 
 

  1. Google Colab andmete ja SpaCy teegi esmaseks testimiseks ja uurimiseks.
  2. VS-kood (või mis tahes redaktor) Streamliti rakenduse kodeerimiseks.
  3. Börsiteabe (uudiste) allikas, mille põhjal teostame NER-i ja hiljem NEL-i.
  4. Virtuaalne pythoni keskkond (kasutan condat) koos teekidega nagu Pandas, SpaCy, Streamlit, Streamlit-Spacy (kui soovite näidata mõnda SpaCy renderdust.)

Eesmärk

 
 
Selle projekti eesmärk on õppida ja rakendada nimega üksuste tuvastamist, et eraldada olulised üksused (meie näites avalikult kaubeldavad ettevõtted) ja seejärel siduda iga olem teadmistebaasi (Nifty500 ettevõtete loend) abil teabega.

Me hangime tekstilised andmed Interneti RSS-kanalitest, eraldame sumisevate aktsiate nimed ja tõmbame seejärel nende turuhindade andmed, et testida uudiste autentsust, enne kui võtame nendes aktsiates positsiooni.


Märkus. NER ei pruugi olla kaasaegne probleem, kuid sellel on tööstuses palju rakendusi.


Google Colabi katsetamiseks ja testimiseks liikumine:

1. samm: suunduvate aktsiate uudiste andmete ekstraheerimine

 
 
Usaldusväärsete autentsete aktsiaturuuudiste saamiseks kasutan seda Majanduslikud ajad ja Rahakontroll Selle õpetuse RSS-kanalid, kuid saate kasutada/lisada ka oma riigi RSS-vooge või Twitteri/Telegrami(rühmade) andmeid, et muuta oma voog informatiivsemaks/täpsemaks.

Võimalused on tohutud. See õpetus peaks olema hüppelauaks NEL-i rakendamisel, et luua rakendusi erinevates domeenides, lahendades erinevaid teabeotsingu probleeme.

Kui vaatate edasi RSS-i, näeb see välja umbes selline:

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


 

Meie eesmärk on saada sellest RSS-kanalist tekstilised pealkirjad ja seejärel kasutame SpaCy-d, et eraldada pealkirjadest peamised olemid.

Pealkirjad on sees XML-i silt siin.

Esiteks peame jäädvustama kogu XML-dokumendi ja saame seda kasutada requests raamatukogu seda teha. Veenduge, et need paketid oleksid installitud colabi käituskeskkonda.

Peaaegu iga paketi installimiseks otse colabi koodilahtrist saate käivitada järgmise käsu:

!pip install <package_name>

Saada GET XML-dokumendi jäädvustamise taotlus esitatud lingil.

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

Käivitage lahter, et kontrollida, mis vastuseobjektis on.

See peaks andma teile eduka vastuse HTTP-koodiga 200 järgmiselt:



Nüüd, kui teil on see vastuseobjekt olemas, saame selle sisu edastada klassile BeautifulSoup, et sõeluda XML-dokument järgmiselt:

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

See peaks andma teile kõik Pythoni loendi pealkirjad:



Autori pilt

 

Suurepärane, meil on tekstilised andmed, millest eraldame NLP abil peamised üksused (mis on antud juhul börsil noteeritud ettevõtted).

On aeg NLP ellu viia.

2. samm: pealkirjadest olemite eraldamine

 
 
See on põnev osa. Me kasutame a eelkoolitatud põhikeele mudel alates spaCy teek, et eraldada pealkirja peamised olemid.

Natuke spaCyst ja põhimudelitest.

ruumiline on avatud lähtekoodiga NLP teek, mis töötleb tekstiandmeid ülikiire kiirusega. See on NLP-uuringute juhtiv raamatukogu, mida kasutatakse laialdaselt ettevõtte tasandi rakendustes. spaCy on probleemiga skaleerimise poolest tuntud. Ja see toetab enam kui 64 keelt ja töötab hästi nii TensorFlow kui ka PyTorchiga.

Põhimudelitest rääkides on spaCyl kaks peamist eelkoolitatud keelemudelite klassi, mis on koolitatud erineva suurusega tekstiandmete põhjal, et teha meile tipptasemel järeldusi.

  1. Põhimudelid – üldotstarbeliste põhiliste NLP-ülesannete jaoks.
  2. Stardimudelid — niširakenduste jaoks, mis nõuavad ülekandeõpet. Saame oma kohandatud mudelite viimistlemiseks kasutada mudeli õpitud kaalu, ilma et peaksime mudelit nullist koolitama.

Kuna meie kasutusjuhtum on selles õpetuses põhiline, jääme juurde en_core_web_sm põhimudeli torujuhe.

Niisiis, laadime selle oma märkmikusse:

nlp = spacy.load("en_core_web_sm")

Märge: Colab on selle meie jaoks juba alla laadinud, kuid kui proovite seda oma kohalikus süsteemis käivitada, peate mudeli esmalt alla laadima, kasutades järgmist käsku:

python -m spacy download en_core_web_sm

en_core_web_sm on põhiliselt ingliskeelne protsessori jaoks optimeeritud konveier, millel on järgmised komponendid:

  • tok2vec — token vektoriteks (teostab tekstiandmete tokeniseerimist),
  • sildistaja – lisab igale märgile asjakohased metaandmed. spaCy kasutab mõningaid statistilisi mudeleid, et ennustada iga märgi kõneosa (POS). Rohkem lehel dokumentatsioon.
  • parser – sõltuvusparser loob märkide vahel seosed.
  • Muude komponentide hulka kuuluvad saatja, ner, atribuudi_joonlaud, lemmatiseerija.

Nüüd, et testida, mida see mudel meie heaks teha saab, annan instantseeritud mudelist läbi ühe pealkirja ja seejärel kontrollin lause erinevaid osi.

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

Torujuhe täidab kõiki ülesandeid alates tokeniseerimisest kuni NER-i. Siin on meil kõigepealt märgid:



Autori pilt

 

Saate vaadata märgistatud kõneosa kasutades pos_ atribuut.



Autori pilt

 

Iga märk on märgistatud teatud metaandmetega. Näiteks Trade on pärisnimi, Setup on nimisõna, : on kirjavahemärgid jne jne. Antud on kogu siltide loend siin.

Ja seejärel saate vaadata, kuidas need on seotud, vaadates sõltuvuse graafikut kasutades dep_ atribuut:



Autori pilt

 

Siin on Trade ühend, seadistus on juur, Nifty on appos (positsioonimuutja). Jällegi on kõik süntaktilised sildid leitavad siin.

Saate visualiseerida ka märkide vahelisi seoseid, kasutades järgmist nihet render() meetod:

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

mis annab selle graafiku:



Autori pilt

 

Üksuste väljavõtmine

 
 
Ja lause oluliste üksuste vaatamiseks võite läbida 'ent’ stiilina samas koodis:



Pilt autorilt – kasutasin teist pealkirja, kuna ülal kasutatud pealkirjal ei olnud üksusi.

 

Meil on erinevate üksuste jaoks erinevad sildid, näiteks päeval on KUUPÄEV, Glasscoatil on GPE, mis võib olla riigid/linnad/osariigid. Otsime peamiselt üksusi, millel on ORG-märgend, mis annab meile ettevõtted, agentuurid, asutused jne.

Nüüd oleme võimelised tekstist üksusi eraldama. Alustame organisatsioonide väljavõtmist kõigist pealkirjadest ORG-üksuste abil.

See tagastab kõigi ettevõtete loendi järgmiselt:



Autori pilt

 

Nii lihtne, eks?

See on nüüd spaCy võlu!

Järgmine samm on otsida üles kõik need ettevõtted teadmistebaasist, et eraldada selle ettevõtte jaoks õige aktsiasümbol, ja seejärel kasutada selliseid teeke nagu yahoo-finance, et hankida nende turuandmed, nagu hind, tootlus jne.

3. samm – nimega üksuse linkimine

 
 
Selle projekti eesmärk on saada teavet selle kohta, millised aktsiad turul sumisevad, ja saada nende üksikasjad oma armatuurlauale.

Meil on ettevõtete nimed, kuid nende kauplemisandmete saamiseks vajame ettevõtte kauplemisaktsia sümbolit.

Kuna ma hankin India ettevõtete üksikasju ja uudiseid, kasutan välist andmebaasi Tubli 500 ettevõtet (CSV-fail).

Iga ettevõtte kohta otsime selle pandasid kasutavate ettevõtete nimekirjast ja seejärel jäädvustame aktsiaturu statistika, kasutades yahoo-finance raamatukogu.

Autori pilt

 

Üks asi, mida peaksite siin tähele panema, on see, et olen lisanud iga aktsiasümboli järele ".NS" enne selle edastamist Ticker klassist yfinance raamatukogu. Selle põhjuseks on asjaolu, et India NSE aktsiasümboleid hoitakse koos a .NS järelliide sisse yfinance.

Ja sumisevad aktsiad ilmuksid allpool olevas andmeraamis:



Autori pilt

 

Voila! kas pole suurepärane? Selline lihtne, kuid põhjalik rakendus, mis võib õigete aktsiatega suunata teid õiges suunas.

Nüüd, et muuta see juurdepääsetavamaks, saame luua veebirakenduse koodist, mille oleme just Streamliti abil kirjutanud.

4. samm – veebirakenduse loomine Streamliti abil

 
 
On aeg liikuda toimetaja juurde ja luua NLP rakenduse jaoks uus projekt ja virtuaalne keskkond.

Streamlitiga alustamine on selliste demoandmete rakenduste jaoks ülilihtne. Veenduge, et vooluvalgustus oleks installitud.

pip install Streamlit

Nüüd loome uue faili nimega app.py ja alustame funktsionaalse koodi kirjutamist, et rakendus oleks valmis.

Importige kõik vajalikud teegid ülaosas.

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

Lisage oma taotlusele pealkiri:

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

Testige oma rakendust käivitades streamlit run app.py oma terminalis. See peaks teie veebibrauseris avama rakenduse.

Olen lisanud mõned lisafunktsioonid andmete kogumiseks mitmest allikast. Nüüd saate rakendusse lisada oma valitud RSS-kanali URL-i ja andmeid töödeldakse ning trendiaktsiaid kuvatakse andmeraamis.

Kogu koodibaasile juurdepääsu saamiseks võite vaadata minu hoidlat siin:

 
GitHub – dswh/NER_News_Feed
 

Saate lisada mitu stiilielementi, erinevaid andmeallikaid ja muud tüüpi töötlemist, et muuta see tõhusamaks ja kasulikumaks.

Minu rakendus näeb praeguses olekus välja nagu bänneril olev pilt.

Kui soovite mind samm-sammult jälgida, vaadake, kuidas ma seda rakendust siin kodeerin:

Järgmised sammud!

 
 
Rahalise kasutusjuhtumi valimise asemel saate valida ka mis tahes muu oma valitud rakenduse. Tervishoid, e-kaubandus, teadusuuringud ja paljud teised. Kõik tööstusharud nõuavad dokumentide töötlemist ning oluliste üksuste väljavõtmist ja linkimist. Proovige teist ideed.

Lihtne idee on eraldada uurimistööst kõik olulised üksused ja luua sellest Google Search API abil teadmiste graafik.

Samuti, kui soovite viia aktsiauudiste voo rakenduse teisele tasemele, saate lisada mõned kauplemisalgoritmid, et genereerida ka ostu- ja müügisignaale.

Soovitan teil oma kujutlusvõimega metsikuks minna.

Kuidas saate minuga ühendust võtta!

 
 
Kui teile see postitus meeldis ja soovite sellist sisu rohkem näha, võite selle tellida minu uudiskiri or minu YouTube'i kanal kus ma jagan selliseid kasulikke ja kiireid projekte, mida saab ehitada.

Kui olete keegi, kes alles alustab programmeerimisega või soovite asuda andmeteaduse või ML-i juurde, saate vaadata minu kursust aadressil WIP Lane Akadeemia.

Aitäh Elliot Gunnile.

 
Bio: Karm Tyagi on insener, kellel on ühendatud kogemused veebitehnoloogiate ja andmeteaduse (teise nimega full-stack data science) alal. Ta on juhendanud üle 1000 tehisintellekti/veebi/andmeteaduse aspiranti ning kavandab andmeteaduse ja ML-inseneri õpperadasid. Varem töötas Harshit Yale'i, MIT-i ja UCLA teadlastega välja andmetöötlusalgoritme.

Originaal. Loaga uuesti postitatud.

Seotud:

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

Ajatempel:

Veel alates KDnuggets