Ustvarjanje strukturiranega vira finančnih novic z uporabo Pythona, SpaCyja in Streamlita

Izvorno vozlišče: 1876513

Ustvarjanje strukturiranega vira finančnih novic z uporabo Pythona, SpaCyja in Streamlita

Začetek NLP z izdelavo aplikacije za prepoznavanje imenovanih entitet (NER).


By Harshit Tyagi, inštruktor znanosti o podatkih | Mentor | YouTuber


Ustvarjanje strukturiranega vira finančnih novic z uporabo Pythona, SpaCyja in Streamlita

Ena izmed zelo zanimivih in pogosto uporabljanih aplikacij NLP je prepoznavanje imenovanih entitet (NER).

Pridobivanje vpogledov iz neobdelanih in nestrukturiranih podatkov je ključnega pomena. Nalaganje dokumenta in pridobivanje pomembnih informacij iz njega se imenuje iskanje informacij.

Pridobivanje informacij je bila glavna naloga/izziv v NLP. In NER (ali NEL – Named Entity Linking) se uporablja na več področjih (finance, zdravila, e-trgovina itd.) za namene iskanja informacij.

V tem prispevku z vadnico vam bom pokazal, kako lahko izkoristite NEL za razvoj vira borznih novic po meri, ki navaja brenčeče delnice na internetu.

Predpogoji

 
 
Takih predpogojev kot takih ni. Morda boste morali imeti nekaj znanja o pythonu in osnovnih nalogah NLP, kot so tokenizacija, označevanje POS, razčlenjevanje odvisnosti itd.

Pomembne dele bom obravnaval podrobneje, tako da si boste lahko zamislili, kaj se dogaja, tudi če ste popolni začetnik.

Torej, nadaljujmo s tem, sledite naprej in imeli boste minimalen vir novic o delnicah, ki jih lahko začnete raziskovati.

Orodja/nastavitev, ki jih potrebujete:

 
 

  1. Google Colab za začetno testiranje in raziskovanje podatkov ter knjižnica SpaCy.
  2. Koda VS (ali kateri koli urejevalnik) za kodiranje aplikacije Streamlit.
  3. Vir borznih informacij (novic), na katerih bomo izvajali NER in kasneje NEL.
  4. Virtualno okolje python (uporabljam conda) skupaj s knjižnicami, kot so Pandas, SpaCy, Streamlit, Streamlit-Spacy (če želite prikazati nekaj upodobitev SpaCy.)

Cilj

 
 
Cilj tega projekta je naučiti se in uporabiti prepoznavanje poimenovanih subjektov za ekstrahiranje pomembnih subjektov (podjetja, ki kotirajo na borzi v našem primeru) in nato povezati vsako entiteto z nekaterimi informacijami z uporabo baze znanja (seznam podjetij Nifty500).

Pridobili bomo besedilne podatke iz virov RSS na internetu, izluščili imena brnečih delnic in nato pridobili podatke o njihovih tržnih cenah, da preizkusimo pristnost novic, preden zavzamemo kakršen koli položaj v teh delnicah.


Opomba: NER morda ni najsodobnejši problem, vendar ima veliko aplikacij v industriji.


Prehod na Google Colab za eksperimentiranje in testiranje:

1. korak: Izvleček podatkov o trendnih borzah

 
 
Za pridobitev zanesljivih verodostojnih novic o borzi bom uporabil Gospodarski časi in Nadzor denarja Viri RSS za to vadnico, lahko pa uporabite/dodate tudi vire RSS svoje države ali podatke Twitterja/Telegrama (skupine), da bo vaš vir bolj informativen/natančnejši.

Priložnosti je ogromno. Ta vadnica bi morala služiti kot odskočna deska za uporabo NEL za izdelavo aplikacij v različnih domenah, ki rešujejo različne vrste težav pri iskanju informacij.

Če pogledate vir RSS, je videti nekako takole:

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


 

Naš cilj je pridobiti besedilne naslove iz tega vira RSS, nato pa bomo uporabili SpaCy za ekstrahiranje glavnih entitet iz naslovov.

Naslovi so prisotni znotraj oznako XML tukaj.

Najprej moramo zajeti celoten dokument XML in ga lahko uporabimo requests knjižnica za to. Prepričajte se, da imate te pakete nameščene v svojem izvajalnem okolju v colabu.

Naslednji ukaz lahko zaženete za namestitev skoraj katerega koli paketa neposredno iz celice kode colab:

!pip install <package_name>

Pošlji a GET zahtevajte na navedeni povezavi za zajem dokumenta XML.

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

Zaženite celico, da preverite, kaj dobite v odgovornem predmetu.

Moral bi vam zagotoviti uspešen odgovor s kodo HTTP 200, kot sledi:



Zdaj, ko imate ta odzivni objekt, lahko njegovo vsebino posredujemo razredu BeautifulSoup za razčlenitev dokumenta XML na naslednji način:

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

To bi vam moralo dati vse naslove znotraj seznama Python:



Slika avtorja

 

Super, imamo besedilne podatke, iz katerih bomo z uporabo NLP izluščili glavne entitete (ki so v tem primeru družbe, ki kotirajo na borzi).

Čas je, da NLP začnemo delovati.

2. korak: Izvleček entitet iz naslovov

 
 
To je vznemirljiv del. Uporabili bomo a vnaprej usposobljen model jedrnega jezika Iz spaCy knjižnico za ekstrahiranje glavnih entitet v naslovu.

Nekaj ​​o spaCyju in osnovnih modelih.

prostoren je odprtokodna NLP knjižnica, ki besedilne podatke obdeluje z izjemno hitrostjo. Je vodilna knjižnica v raziskavah NLP, ki se uporablja v velikih aplikacijah za podjetja. spaCy je dobro znan po skaliranju s težavo. Podpira več kot 64 jezikov in dobro deluje s TensorFlow in PyTorch.

Ko govorimo o osnovnih modelih, spaCy ima dva glavna razreda vnaprej usposobljenih jezikovnih modelov, ki se urijo na različnih velikostih besedilnih podatkov, da nam dajo najsodobnejše sklepe.

  1. Osnovni modeli — za osnovne NLP naloge splošnega namena.
  2. Začetni modeli — za nišne aplikacije, ki zahtevajo prenos učenja. Naučene uteži modela lahko uporabimo za natančno nastavitev naših modelov po meri, ne da bi morali učiti model od začetka.

Ker je naš primer uporabe v tej vadnici osnovni, se bomo držali en_core_web_sm cevovod jedrnega modela.

Torej, naložimo tole v našo beležnico:

nlp = spacy.load("en_core_web_sm")

Opomba: Colab nam je to že prenesel, a če ga poskusite zagnati v lokalnem sistemu, boste morali model najprej prenesti z naslednjim ukazom:

python -m spacy download en_core_web_sm

en_core_web_sm je v bistvu angleški cevovod, optimiziran za CPE, ki ima naslednje komponente:

  • tok2vec — žeton v vektorje (izvaja tokenizacijo besedilnih podatkov),
  • označevalnik — doda ustrezne metapodatke vsakemu žetonu. spaCy uporablja nekatere statistične modele za napovedovanje dela govora (POS) vsakega žetona. Več v Dokumentacija.
  • razčlenjevalnik — razčlenjevalnik odvisnosti vzpostavlja razmerja med žetoni.
  • Druge komponente vključujejo senter, ner, attribute_ruler, lemmatizer.

Zdaj, da bi preizkusil, kaj lahko ta model stori za nas, bom skozi instancirani model podal en sam naslov in nato preveril različne dele stavka.

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

Cevovod opravlja vse naloge od tokenizacije do NER. Tukaj imamo najprej žetone:



Slika avtorja

 

Označeni del govora si lahko ogledate z uporabo pos_ atribut.



Slika avtorja

 

Vsak žeton je označen z nekaterimi metapodatki. Na primer, Trade je lastni samostalnik, Setup je samostalnik, : je ločilo, tako naprej, in tako naprej. Podan je celoten seznam oznak tukaj.

Nato si lahko ogledate, kako sta povezana, tako da pogledate graf odvisnosti z uporabo dep_ atribut:



Slika avtorja

 

Tu je Trade spojina, Setup je Root, Nifty je appos (apozicijski modifikator). Spet je mogoče najti vse sintaktične oznake tukaj.

Z naslednjim prikazom lahko tudi vizualizirate odvisnosti odnosov med žetoni render() metoda:

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

kar bo dalo ta graf:



Slika avtorja

 

Ekstrakcija entitete

 
 
In če si želite ogledati pomembne entitete stavka, lahko prenesete 'ent’ kot slog v isti kodi:



Slika avtorja — Uporabil sem drug naslov, ker tisti, ki smo ga uporabili zgoraj, ni imel nobenih entitet.

 

Imamo različne oznake za različne entitete, na primer dan ima DATUM, Glasscoat ima GPE, ki so lahko države/mesta/zvezne države. Večinoma iščemo subjekte, ki imajo oznako ORG, ki nam bo dala podjetja, agencije, institucije itd.

Sedaj smo sposobni ekstrahirati entitete iz besedila. Začnimo z izvlečkom organizacij iz vseh naslovov z uporabo entitet ORG.

To bo vrnilo seznam vseh podjetij, kot sledi:



Slika avtorja

 

Tako enostavno, kajne?

To je zdaj čar spaCyja!

Naslednji korak je poiskati vsa ta podjetja v bazi znanja, da izvlečete pravi delniški simbol za to podjetje, nato pa uporabite knjižnice, kot je yahoo-finance, da izvlečete njihove tržne podrobnosti, kot so cena, donos itd.

3. korak — Povezovanje imenovane entitete

 
 
Cilj tega projekta je izvedeti, katere delnice se vrtijo na trgu, in pridobiti njihove podrobnosti na nadzorni plošči.

Imamo imena podjetij, a če želimo pridobiti njihove podatke o trgovanju, potrebujemo simbol trgovalne delnice podjetja.

Ker pridobivam podrobnosti in novice o indijskih podjetjih, bom uporabil zunanjo bazo podatkov Nifty 500 podjetij (datoteka CSV).

Za vsako podjetje bomo poiskali na seznamu podjetij, ki uporabljajo pande, nato pa bomo zajeli borzno statistiko z uporabo yahoo-finance knjižnica.

Slika avtorja

 

Ena stvar, ki bi jo morali opaziti, je, da sem dodal ».NS« za vsak delniški simbol, preden ga posredujem Ticker razred od yfinance knjižnica. To je zato, ker so indijski delniški simboli NSE shranjeni z a .NS pripona in yfinance.

In brenčeče delnice bi se pojavile v podatkovnem okviru, kot je spodaj:



Slika avtorja

 

Voila! ali ni to super? Tako preprosta, a globoka aplikacija, ki bi vas lahko usmerila v pravo smer s pravimi delnicami.

Zdaj, da bi bilo bolj dostopno, lahko ustvarimo spletno aplikacijo iz kode, ki smo jo pravkar napisali s Streamlitom.

4. korak — Izdelava spletne aplikacije s Streamlitom

 
 
Čas je, da se premaknete v urejevalnik in ustvarite nov projekt in virtualno okolje za aplikacijo NLP.

Začetek s Streamlitom je zelo enostaven za takšne demo podatkovne aplikacije. Prepričajte se, da imate nameščen streamlit.

pip install Streamlit

Zdaj pa ustvarimo novo datoteko z imenom app.py in začnimo pisati funkcionalno kodo, da pripravimo aplikacijo.

Na vrhu uvozite vse zahtevane knjižnice.

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

Vlogi dodajte naslov:

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

Preizkusite svojo aplikacijo z zagonom streamlit run app.py v vašem terminalu. V vašem spletnem brskalniku bi se moralo odpreti aplikacija.

Dodal sem nekaj dodatnih funkcij za zajemanje podatkov iz več virov. Zdaj lahko v aplikacijo dodate URL vira RSS po svoji izbiri in podatki bodo obdelani, delnice v trendu pa bodo prikazane v podatkovnem okviru.

Za dostop do celotne kodne baze si lahko ogledate moje skladišče tukaj:

 
GitHub – dswh/NER_News_Feed
 

Dodate lahko več slogovnih elementov, različne vire podatkov in druge vrste obdelav, da postanejo bolj učinkoviti in uporabni.

Moja aplikacija v trenutnem stanju izgleda kot slika na pasici.

Če mi želite slediti korak za korakom, opazujte, kako kodiram to aplikacijo tukaj:

Naslednji koraki!

 
 
Namesto da izberete primer finančne uporabe, lahko izberete tudi katero koli drugo aplikacijo po vaši izbiri. Zdravstvo, e-trgovina, raziskave in mnogi drugi. Vse industrije zahtevajo obdelavo dokumentov ter ekstrahiranje in povezovanje pomembnih entitet. Preizkusite drugo idejo.

Preprosta zamisel je ekstrahiranje vseh pomembnih entitet raziskovalnega prispevka in nato ustvarjanje grafa znanja z uporabo Google Search API.

Poleg tega, če želite aplikacijo za vir novic o delnicah dvigniti na drugo raven, lahko dodate nekaj algoritmov trgovanja, da ustvarite tudi signale za nakup in prodajo.

Spodbujam vas, da podivjate svojo domišljijo.

Kako se lahko povežete z mano!

 
 
Če vam je bila ta objava všeč in bi radi videli več tovrstnih vsebin, se lahko naročite moje glasilo or moj kanal YouTube kjer bom še naprej delil tako uporabne in hitre projekte, ki jih je mogoče zgraditi.

Če ste nekdo, ki šele začenja s programiranjem ali se želite ukvarjati s podatkovno znanostjo ali ML, si lahko ogledate moj tečaj na Akademija WIP Lane.

Hvala Elliotu Gunnu.

 
Bio: Harshit Tyagi je inženir z združenimi izkušnjami na področju spletnih tehnologij in znanosti o podatkih (imenovanih tudi znanost o podatkih v celoti). Bil je mentor več kot 1000 kandidatom za umetno inteligenco/splet/podatkovno znanost in oblikuje učne poti za podatkovno znanost in inženiring ML. Pred tem je Harshit razvil algoritme za obdelavo podatkov z raziskovalci na Yaleu, MIT in UCLA.

prvotni. Poročeno z dovoljenjem.

Povezano:

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

Časovni žig:

Več od KDnuggets