Bygg en strukturert finansiell nyhetsfeed ved hjelp av Python, SpaCy og Streamlit

Kilde node: 1876513

Bygg en strukturert finansiell nyhetsfeed ved hjelp av Python, SpaCy og Streamlit

Komme i gang med NLP ved å bygge en Named Entity Recognition(NER)-applikasjon.


By Harshit Tyagi, Datavitenskapslærer | Mentor | YouTuber


Bygg en strukturert finansiell nyhetsfeed ved hjelp av Python, SpaCy og Streamlit

En av de veldig interessante og mye brukte applikasjonene til NLP er Named Entity Recognition (NER).

Å få innsikt fra rå og ustrukturert data er av avgjørende betydning. Å laste opp et dokument og hente de viktige informasjonsbitene fra det kalles informasjonsinnhenting.

Informasjonsinnhenting har vært en stor oppgave/utfordring i NLP. Og NER(eller NEL — Named Entity Linking) brukes i flere domener (finans, narkotika, e-handel, etc.) for informasjonsinnhentingsformål.

I dette veiledningsinnlegget skal jeg vise deg hvordan du kan utnytte NEL til å utvikle en tilpasset aksjemarkedsnyhetsfeed som viser en liste over de summende aksjene på internett.

Forutsetninger

 
 
Det er ingen slike forutsetninger som sådan. Du må kanskje ha litt kjennskap til python og de grunnleggende oppgavene til NLP som tokenisering, POS-tagging, avhengighetsanalyse, et cetera.

Jeg skal dekke de viktige bitene mer detaljert, så selv om du er en helt nybegynner vil du være i stand til å vikle hodet rundt det som skjer.

Så la oss fortsette med det, følg med og du vil ha en minimal aksjenyhetsfeed som du kan begynne å undersøke.

Verktøy/oppsett du trenger:

 
 

  1. Google Colab for innledende testing og utforskning av data og SpaCy-biblioteket.
  2. VS-kode (eller hvilken som helst editor) for å kode Streamlit-applikasjonen.
  3. Kilde til aksjemarkedsinformasjon (nyheter) som vi vil utføre NER og senere NEL på.
  4. Et virtuelt pythonmiljø (jeg bruker conda) sammen med biblioteker som Pandas, SpaCy, Streamlit, Streamlit-Spacy (hvis du vil vise noen SpaCy-gjengivelser.)

Målet

 
 
Målet med dette prosjektet er å lære og bruke Named Entity Recognition for å trekke ut viktige enheter (børsnoterte selskaper i vårt eksempel) og deretter koble hver enhet med litt informasjon ved å bruke en kunnskapsbase (Nifty500-selskapsliste).

Vi henter tekstdataene fra RSS-feeds på internett, trekker ut navnene på aktive aksjer, og deretter henter vi markedsprisdataene deres for å teste nyhetens autentisitet før vi tar noen posisjon i disse aksjene.


Merk: NER er kanskje ikke et toppmoderne problem, men det har mange bruksområder i bransjen.


Går videre til Google Colab for eksperimentering og testing:

Trinn 1: Trekk ut trendende aksjenyhetsdata

 
 
For å få noen pålitelige autentiske aksjemarkedsnyheter, vil jeg bruke Økonomiske tider og Pengekontroll RSS-feeder for denne opplæringen, men du kan også bruke/legge til landets RSS-feeder eller Twitter/Telegram(grupper)-data for å gjøre feeden din mer informativ/nøyaktig.

Mulighetene er enorme. Denne opplæringen skal tjene som et springbrett for å bruke NEL til å bygge apper i forskjellige domener som løser forskjellige typer informasjonshentingsproblemer.

Hvis du fortsetter å se på RSS-feeden, ser den omtrent slik ut:

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


 

Målet vårt er å hente tekstoverskriftene fra denne RSS-feeden, og deretter bruker vi SpaCy til å trekke ut hovedenhetene fra overskriftene.

Overskriftene er tilstede inne i taggen til XML her.

For det første må vi fange opp hele XML-dokumentet, og vi kan bruke requests biblioteket for å gjøre det. Sørg for at du har disse pakkene installert i kjøretidsmiljøet ditt i colab.

Du kan kjøre følgende kommando for å installere nesten hvilken som helst pakke rett fra en colabs kodecelle:

!pip install <package_name>

Send en GET forespørsel på den angitte lenken for å fange XML-dokumentet.

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

Kjør cellen for å sjekke hva du får i responsobjektet.

Det skal gi deg et vellykket svar med HTTP-kode 200 som følger:



Nå som du har dette svarobjektet, kan vi sende innholdet til BeautifulSoup-klassen for å analysere XML-dokumentet som følger:

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

Dette bør gi deg alle overskriftene i en Python-liste:



Bilde av forfatter

 

Fantastisk, vi har tekstdataene som vi vil trekke ut hovedenhetene (som er børsnoterte selskaper i dette tilfellet) ved å bruke NLP.

Det er på tide å sette NLP ut i livet.

Trinn 2: Trekk ut enheter fra overskriftene

 
 
Dette er den spennende delen. Vi skal bruke en forhåndsopplært kjernespråkmodell fra spaCy bibliotek for å trekke ut hovedenhetene i en overskrift.

Litt om spaCy og kjernemodellene.

spaCy er et åpen kildekode NLP-bibliotek som behandler tekstdata i superrask hastighet. Det er det ledende biblioteket innen NLP-forskning som brukes i applikasjoner i bedriftsklasse i stor skala. spaCy er kjent for å skalere med problemet. Og den støtter mer enn 64 språk og fungerer godt med både TensorFlow og PyTorch.

Når vi snakker om kjernemodeller, har spaCy to hovedklasser av forhåndstrente språkmodeller som er trent på forskjellige størrelser av tekstdata for å gi oss toppmoderne slutninger.

  1. Kjernemodeller – for generelle grunnleggende NLP-oppgaver.
  2. Startmodeller — for nisjeapplikasjoner som krever overføringslæring. Vi kan utnytte modellens lærte vekter for å finjustere våre tilpassede modeller uten å trene modellen fra bunnen av.

Siden vår brukstilfelle er grunnleggende i denne opplæringen, kommer vi til å holde oss til en_core_web_sm kjernemodellrørledning.

Så la oss laste dette inn i notatboken vår:

nlp = spacy.load("en_core_web_sm")

OBS: Colab har allerede lastet ned dette for oss, men hvis du prøver å kjøre det i ditt lokale system, må du først laste ned modellen ved å bruke følgende kommando:

python -m spacy download en_core_web_sm

en_core_web_sm er i utgangspunktet en engelsk pipeline optimalisert for CPU som har følgende komponenter:

  • tok2vec — token til vektorer (utfører tokenisering på tekstdataene),
  • tagger — legger til relevante metadata til hvert token. spaCy bruker noen statistiske modeller for å forutsi taledelen (POS) til hvert token. Mer i dokumentasjon.
  • parser - avhengighetsparser etablerer relasjoner mellom tokens.
  • Andre komponenter inkluderer senter, ner, attribute_ruler, lemmatizer.

Nå, for å teste hva denne modellen kan gjøre for oss, sender jeg en enkelt overskrift gjennom den instansierte modellen og sjekker deretter de forskjellige delene av en setning.

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

Rørledningen utfører alle oppgavene fra tokenisering til NER. Her har vi tokens først:



Bilde av forfatter

 

Du kan se på den merkede delen av talen ved å bruke pos_ attributt.



Bilde av forfatter

 

Hvert token er merket med noen metadata. For eksempel er handel et substantiv, oppsett er et substantiv, : er tegnsetting, så videre, og så videre. Hele listen over tags er gitt her..

Og så kan du se på hvordan de er relatert ved å se på avhengighetsgrafen ved å bruke dep_ Egenskap:



Bilde av forfatter

 

Her er handel en forbindelse, oppsett er rot, Nifty er appos (Apposisjonell modifikator). Igjen, alle syntaktiske tags kan bli funnet her..

Du kan også visualisere relasjonsavhengighetene mellom tokenene ved å bruke følgende forskyvning render() metode:

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

som vil gi denne grafen:



Bilde av forfatter

 

Enhetsutvinning

 
 
Og for å se på de viktige enhetene i setningen, kan du bestå 'ent’ som stil i samme kode:



Bilde av forfatter — Jeg brukte en annen overskrift fordi den vi brukte ovenfor ikke hadde noen enheter.

 

Vi har forskjellige tagger for forskjellige enheter som dagen har DATO, Glasscoat har GPE som kan være land/byer/stater. Vi ser hovedsakelig etter enheter som har ORG-tagg som vil gi oss selskaper, byråer, institusjoner osv.

Vi er nå i stand til å trekke ut enheter fra teksten. La oss begynne å trekke ut organisasjonene fra alle overskriftene ved å bruke ORG-enheter.

Dette vil returnere en liste over alle selskapene som følger:



Bilde av forfatter

 

Så lett, ikke sant?

Det er magien med spaCy nå!

Det neste trinnet er å slå opp alle disse selskapene i en kunnskapsbase for å trekke ut det riktige aksjesymbolet for det selskapet og deretter bruke biblioteker som yahoo-finance for å trekke ut markedsdetaljer som pris, avkastning osv.

Trinn 3 — Navngitt enhetskobling

 
 
Å lære om hvilke aksjer som surrer i markedet og få detaljene deres på dashbordet ditt er målet for dette prosjektet.

Vi har selskapsnavnene, men for å få handelsinformasjonen deres, trenger vi selskapets aksjesymbol.

Siden jeg trekker ut detaljene og nyhetene til indiske selskaper, kommer jeg til å bruke en ekstern database med Nifty 500 selskaper (en CSV-fil).

For hvert selskap vil vi slå det opp i listen over selskaper som bruker pandaer, og deretter fange opp aksjemarkedsstatistikken ved å bruke yahoo-finans bibliotek.

Bilde av forfatter

 

En ting du bør legge merke til her er at jeg har lagt til en ".NS" etter hvert aksjesymbol før jeg sender det til Ticker klasse av yfinance bibliotek. Det er fordi indiske NSE-aksjesymboler er lagret med en .NS suffiks i yfinance.

Og de summende aksjene vil dukke opp i en dataramme som nedenfor:



Bilde av forfatter

 

Voila! er ikke dette flott? En så enkel, men dyptgripende app som kan peke deg i riktig retning med de riktige aksjene.

Nå for å gjøre det mer tilgjengelig, kan vi lage en nettapplikasjon av koden vi nettopp har skrevet ved å bruke Streamlit.

Trinn 4 — Bygg en nettapp med Streamlit

 
 
Det er på tide å flytte til en redaktør og lage et nytt prosjekt og virtuelt miljø for NLP-applikasjonen.

Å komme i gang med Streamlit er superenkelt for slike demodataapplikasjoner. Sørg for at du har strømbelyst installert.

pip install Streamlit

La oss nå lage en ny fil kalt app.py og begynne å skrive funksjonell kode for å gjøre appen klar.

Importer alle nødvendige biblioteker øverst.

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

Legg til en tittel på søknaden din:

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

Test appen din ved å kjøre streamlit run app.py i terminalen din. Det skal åpne en app i nettleseren din.

Jeg har lagt til litt ekstra funksjonalitet for å fange data fra flere kilder. Nå kan du legge til en RSS-feed-URL etter eget valg i applikasjonen, og dataene vil bli behandlet og trendaksjene vil vises i en dataramme.

For å få tilgang til hele kodebasen kan du sjekke depotet mitt her:

 
GitHub – dswh/NER_News_Feed
 

Du kan legge til flere stilelementer, forskjellige datakilder og andre typer behandling for å gjøre det mer effektivt og nyttig.

Appen min i den nåværende tilstanden ser ut som bildet i banneret.

Hvis du vil følge meg steg-for-steg, se meg kode denne applikasjonen her:

Neste skritt!

 
 
I stedet for å velge et økonomisk bruksområde, kan du også velge hvilken som helst annen applikasjon du ønsker. Helsetjenester, e-handel, forskning og mange andre. Alle bransjer krever at dokumenter behandles og viktige enheter trekkes ut og kobles sammen. Prøv en annen idé.

En enkel idé er å trekke ut alle de viktige enhetene i en forskningsartikkel og deretter lage en kunnskapsgraf av den ved hjelp av Google Search API.

Hvis du vil ta aksjenyhetsfeed-appen til et annet nivå, kan du også legge til noen handelsalgoritmer for å generere kjøps- og salgssignaler.

Jeg oppfordrer deg til å gå vill med fantasien.

Hvordan du kan få kontakt med meg!

 
 
Hvis du likte dette innlegget og ønsker å se mer av slikt innhold, kan du abonnere på nyhetsbrevet mitt or min YouTube-kanal hvor jeg vil fortsette å dele slike nyttige og raske prosjekter som man kan bygge.

Hvis du er en som akkurat har begynt med programmering eller ønsker å komme inn i datavitenskap eller ML, kan du sjekke ut kurset mitt på WIP Lane Academy.

Takk til Elliot Gunn.

 
Bio: Harshit Tyagi er en ingeniør med sammenslått erfaring innen webteknologi og datavitenskap (aka full-stack data science). Han har veiledet over 1000 AI/Web/Data Science aspiranter, og designer data science og ML engineering learning tracks. Tidligere utviklet Harshit databehandlingsalgoritmer med forskere ved Yale, MIT og UCLA.

original. Ompostet med tillatelse.

Relatert:

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

Tidstempel:

Mer fra KDnuggets