Opbygning af et struktureret finansielt nyhedsfeed ved hjælp af Python, SpaCy og Streamlit

Kildeknude: 1876513

Opbygning af et struktureret finansielt nyhedsfeed ved hjælp af Python, SpaCy og Streamlit

Kom godt i gang med NLP ved at bygge en Named Entity Recognition(NER)-applikation.


By Harshit Tyagi, Data Science Instruktør | Mentor | YouTuber


Opbygning af et struktureret finansielt nyhedsfeed ved hjælp af Python, SpaCy og Streamlit

En af de meget interessante og udbredte anvendelser af NLP er Named Entity Recognition(NER).

At få indsigt fra rå og ustrukturerede data er af vital betydning. At uploade et dokument og hente de vigtige informationer fra det kaldes informationssøgning.

Informationssøgning har været en stor opgave/udfordring i NLP. Og NER (eller NEL — Named Entity Linking) bruges i flere domæner (finans, medicin, e-handel osv.) til informationssøgningsformål.

I dette vejledningsindlæg vil jeg vise dig, hvordan du kan udnytte NEL til at udvikle et tilpasset aktiemarkedsnyhedsfeed, der viser de summende aktier på internettet.

Forudsætninger

 
 
Der er ingen sådanne forudsætninger som sådan. Du skal muligvis have et vist kendskab til python og de grundlæggende opgaver i NLP som tokenisering, POS-tagging, afhængighedsparsing, et cetera.

Jeg vil dække de vigtige stykker mere detaljeret, så selvom du er helt nybegynder, vil du være i stand til at pakke dit hoved omkring, hvad der foregår.

Så lad os komme videre med det, følg med, og du vil have et minimalt aktienyhedsfeed, som du kan begynde at undersøge.

Værktøjer/opsætning du skal bruge:

 
 

  1. Google Colab til indledende test og udforskning af data og SpaCy-biblioteket.
  2. VS-kode (eller en hvilken som helst editor) til at kode Streamlit-applikationen.
  3. Kilde til aktiemarkedsinformation (nyheder), som vi vil udføre NER og senere NEL på.
  4. Et virtuelt pythonmiljø (jeg bruger conda) sammen med biblioteker som Pandas, SpaCy, Streamlit, Streamlit-Spacy (hvis du vil vise nogle SpaCy-gengivelser.)

Objektiv

 
 
Målet med dette projekt er at lære og anvende Named Entity Recognition til at udtrække vigtige enheder (offentligt handlede virksomheder i vores eksempel) og derefter forbinde hver enhed med nogle oplysninger ved hjælp af en vidensbase (Nifty500-virksomhedsliste).

Vi henter tekstdata fra RSS-feeds på internettet, udtrækker navnene på summende aktier og trækker derefter deres markedsprisdata for at teste nyhedernes ægthed, før vi tager stilling i disse aktier.


Bemærk: NER er muligvis ikke et state-of-the-art problem, men det har mange anvendelser i branchen.


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

Trin 1: Udtræk de trendy aktienyhedsdata

 
 
For at få nogle pålidelige autentiske aktiemarkedsnyheder, vil jeg bruge Økonomiske tider , Pengekontrol RSS-feeds til denne tutorial, men du kan også bruge/tilføje dit lands RSS-feeds eller Twitter/Telegram(grupper) data for at gøre dit feed mere informativt/nøjagtigt.

Mulighederne er enorme. Denne tutorial skal tjene som et springbræt til at anvende NEL til at bygge apps i forskellige domæner, der løser forskellige slags informationssøgningsproblemer.

Hvis du fortsætter med at se på RSS-feedet, ser det nogenlunde sådan ud:

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


 

Vores mål er at få tekstoverskrifterne fra dette RSS-feed, og så bruger vi SpaCy'en til at udtrække hovedenhederne fra overskrifterne.

Overskrifterne er til stede inde i -tagget af XML her.

For det første skal vi fange hele XML-dokumentet, og vi kan bruge requests bibliotek til at gøre det. Sørg for, at du har disse pakker installeret i dit runtime-miljø i colab.

Du kan køre følgende kommando for at installere næsten enhver pakke direkte fra en colabs kodecelle:

!pip install <package_name>

Send en GET anmodning på det medfølgende link for at hente XML-dokumentet.

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

Kør cellen for at kontrollere, hvad du får i svarobjektet.

Det skulle give dig et vellykket svar med HTTP-kode 200 som følger:



Nu hvor du har dette svarobjekt, kan vi videregive dets indhold til BeautifulSoup-klassen for at parse XML-dokumentet som følger:

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

Dette skulle give dig alle overskrifterne i en Python-liste:



Billede af forfatter

 

Fantastisk, vi har tekstdata, hvorfra vi vil udtrække hovedenhederne (som er børsnoterede virksomheder i dette tilfælde) ved hjælp af NLP.

Det er tid til at sætte NLP ud i livet.

Trin 2: Udtræk enheder fra overskrifterne

 
 
Dette er den spændende del. Vi bruger en foruddannet kernesprogmodel fra spaCy bibliotek for at udtrække de vigtigste enheder i en overskrift.

Lidt om spaCy og kernemodellerne.

spaCy er et open source NLP-bibliotek, der behandler tekstdata med en superhurtig hastighed. Det er det førende bibliotek inden for NLP-forskning, som bliver brugt i enterprise-grade applikationer i stor skala. spaCy er kendt for at skalere med problemet. Og den understøtter mere end 64 sprog og fungerer godt med både TensorFlow og PyTorch.

Når vi taler om kernemodeller, har spaCy to hovedklasser af fortrænede sprogmodeller, der er trænet i forskellige størrelser af tekstdata for at give os avancerede slutninger.

  1. Kernemodeller — til generelle NLP-opgaver.
  2. Startmodeller — til nicheapplikationer, der kræver overførselslæring. Vi kan udnytte modellens lærte vægte til at finjustere vores brugerdefinerede modeller uden at skulle træne modellen fra bunden.

Da vores use case er grundlæggende i denne tutorial, vil vi holde os til en_core_web_sm kernemodelpipeline.

Så lad os indlæse dette i vores notesbog:

nlp = spacy.load("en_core_web_sm")

Bemærk: Colab har allerede dette downloadet til os, men hvis du prøver at køre det i dit lokale system, skal du først downloade modellen ved at bruge følgende kommando:

python -m spacy download en_core_web_sm

en_core_web_sm er grundlæggende en engelsk pipeline optimeret til CPU, som har følgende komponenter:

  • tok2vec — token til vektorer (udfører tokenisering på tekstdataene),
  • tagger — tilføjer relevante metadata til hvert token. spaCy gør brug af nogle statistiske modeller til at forudsige den del af tale (POS) af hvert token. Mere i dokumentation.
  • parser — afhængighedsparser etablerer relationer mellem tokens.
  • Andre komponenter omfatter senter, ner, attribute_ruler, lemmatizer.

For nu at teste, hvad denne model kan gøre for os, sender jeg en enkelt overskrift gennem den instansierede model og tjekker derefter de forskellige dele af en sætning.

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

Pipelinen udfører alle opgaverne fra tokenisering til NER. Her har vi tokens først:



Billede af forfatter

 

Du kan se på den taggede del af tale ved hjælp af pos_ attribut.



Billede af forfatter

 

Hvert token er tagget med nogle metadata. F.eks. er handel et egennavn, opsætning er et navneord, : er tegnsætning, så videre, og så videre. Hele listen over tags er givet link..

Og så kan du se på, hvordan de er relateret ved at se på afhængighedsgrafen vha dep_ attribut:



Billede af forfatter

 

Her er handel en sammensætning, opsætning er rod, Nifty er appos (appositionel modifier). Igen kan alle de syntaktiske tags findes link..

Du kan også visualisere forholdsafhængighederne mellem tokens ved hjælp af følgende forskydning render() metode:

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

hvilket vil give denne graf:



Billede af forfatter

 

Enhedsudvinding

 
 
Og for at se på de vigtige enheder i sætningen, kan du bestå 'ent’ som stil i samme kode:



Billede af forfatter - Jeg brugte en anden overskrift, fordi den, vi brugte ovenfor, ikke havde nogen enheder.

 

Vi har forskellige tags for forskellige enheder, såsom dagen har DATE, Glasscoat har GPE, som kan være lande/byer/stater. Vi leder hovedsageligt efter enheder, der har ORG-tag, der giver os virksomheder, agenturer, institutioner osv.

Vi er nu i stand til at udtrække enheder fra teksten. Lad os komme i gang med at udtrække organisationerne fra alle overskrifterne ved hjælp af ORG-enheder.

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



Billede af forfatter

 

Så let, ikke?

Det er magien ved spaCy nu!

Det næste trin er at slå alle disse virksomheder op i en videnbase for at udtrække det rigtige aktiesymbol for den virksomhed og derefter bruge biblioteker som yahoo-finance til at udtrække deres markedsdetaljer som pris, afkast osv.

Trin 3 — Navngivet enhedsforbindelse

 
 
At lære om, hvilke aktier der summer på markedet og få deres detaljer på dit dashboard er målet for dette projekt.

Vi har firmanavnene, men for at få deres handelsoplysninger har vi brug for virksomhedens handelsaktiesymbol.

Da jeg udtrækker detaljerne og nyhederne fra indiske virksomheder, vil jeg bruge en ekstern database med Fine 500 virksomheder (en CSV-fil).

For hver virksomhed slår vi det op på listen over virksomheder, der bruger pandaer, og derefter fanger vi aktiemarkedsstatistikken ved hjælp af yahoo-finans bibliotek.

Billede af forfatter

 

En ting, du bør bemærke her, er, at jeg har tilføjet et ".NS" efter hvert aktiesymbol, før jeg sender det til Ticker klasse af yfinance bibliotek. Det er fordi indiske NSE aktiesymboler er gemt med en .NS suffiks i yfinance.

Og de summende aktier ville dukke op i en dataramme som nedenfor:



Billede af forfatter

 

Voila! er dette ikke fantastisk? Sådan en enkel, men dybtgående app, der kunne pege dig i den rigtige retning med de rigtige aktier.

For at gøre det mere tilgængeligt kan vi oprette en webapplikation ud fra den kode, som vi lige har skrevet ved hjælp af Streamlit.

Trin 4 — Opbygning af en webapp ved hjælp af Streamlit

 
 
Det er tid til at flytte til en redaktør og oprette et nyt projekt og virtuelt miljø til NLP-applikationen.

Det er super nemt at komme i gang med Streamlit for sådanne demodataapplikationer. Sørg for, at du har streamlit installeret.

pip install Streamlit

Lad os nu oprette en ny fil kaldet app.py og begynde at skrive funktionel kode for at gøre appen klar.

Importer alle de nødvendige biblioteker øverst.

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

Tilføj en titel til din ansøgning:

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

Test din app ved at køre streamlit run app.py i din terminal. Det skulle åbne en app i din webbrowser.

Jeg har tilføjet noget ekstra funktionalitet til at fange data fra flere kilder. Nu kan du tilføje en RSS-feed-URL efter eget valg i applikationen, og dataene vil blive behandlet, og trendaktier vil blive vist i en dataramme.

For at få adgang til hele kodebasen kan du tjekke mit lager her:

 
GitHub – dswh/NER_News_Feed
 

Du kan tilføje flere stilelementer, forskellige datakilder og andre typer behandling for at gøre det mere effektivt og nyttigt.

Min app i dens nuværende tilstand ligner billedet på banneret.

Hvis du vil følge mig trin-for-trin, så se mig kode denne applikation her:

Næste skridt!

 
 
I stedet for at vælge en økonomisk brugssag, kan du også vælge en hvilken som helst anden applikation efter eget valg. Sundhedspleje, e-handel, forskning og mange andre. Alle industrier kræver, at dokumenter behandles, og vigtige enheder skal udtrækkes og sammenkædes. Prøv en anden idé.

En simpel idé er at udtrække alle de vigtige enheder i et forskningspapir og derefter oprette en vidensgraf af det ved hjælp af Google Search API.

Hvis du vil tage aktienyhedsfeed-appen til et andet niveau, kan du også tilføje nogle handelsalgoritmer til også at generere købs- og salgssignaler.

Jeg opfordrer dig til at gå vild med din fantasi.

Hvordan du kan komme i kontakt med mig!

 
 
Hvis du kunne lide dette indlæg og gerne vil se mere af sådant indhold, kan du abonnere på mit nyhedsbrev or min YouTube-kanal hvor jeg bliver ved med at dele så nyttige og hurtige projekter, som man kan bygge.

Hvis du er en, der lige er i gang med programmering eller gerne vil ind i data science eller ML, kan du tjekke mit kursus på WIP Lane Academy.

Tak til Elliot Gunn.

 
Bio: Harshit Tyagi er en ingeniør med samlet erfaring inden for webteknologier og datavidenskab (også kendt som full-stack data science). Han har vejledt over 1000 AI/Web/Data Science-aspiranter og designer datavidenskab og ML-ingeniørlæringsspor. Tidligere har Harshit udviklet databehandlingsalgoritmer sammen med forskere ved Yale, MIT og UCLA.

Original. Genopslået med tilladelse.

Relateret:

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

Tidsstempel:

Mere fra KDnuggets