Costruire un newsfeed finanziario strutturato utilizzando Python, SpaCy e Streamlit

Nodo di origine: 1876513

Costruire un newsfeed finanziario strutturato utilizzando Python, SpaCy e Streamlit

Iniziare con la PNL creando un'applicazione Named Entity Recognition (NER).


By Il duro Tyagi, Docente di Data Science | Mentore | YouTuber


Costruire un newsfeed finanziario strutturato utilizzando Python, SpaCy e Streamlit

Una delle applicazioni molto interessanti e ampiamente utilizzate della PNL è Named Entity Recognition (NER).

Ottenere informazioni da dati grezzi e non strutturati è di vitale importanza. Caricare un documento e ottenere le informazioni importanti da esso è chiamato recupero delle informazioni.

Il recupero delle informazioni è stato un compito/sfida importante nella PNL. E NER (o NEL - Named Entity Linking) viene utilizzato in diversi domini (finanza, farmaci, e-commerce, ecc.) per scopi di recupero delle informazioni.

In questo post tutorial, ti mostrerò come puoi sfruttare NEL per sviluppare un feed di notizie del mercato azionario personalizzato che elenchi le azioni in fermento su Internet.

Pre-requisiti

 
 
Non ci sono tali prerequisiti in quanto tali. Potrebbe essere necessario avere una certa familiarità con Python e le attività di base della PNL come tokenizzazione, tagging POS, analisi delle dipendenze, eccetera.

Tratterò i pezzi importanti in modo più dettagliato, quindi anche se sei un principiante assoluto sarai in grado di avvolgere la testa su ciò che sta succedendo.

Quindi, andiamo avanti, segui e avrai un feed di notizie di borsa minimo che puoi iniziare a ricercare.

Strumenti/configurazione di cui avrai bisogno:

 
 

  1. Google Colab per il test iniziale e l'esplorazione dei dati e la libreria SpaCy.
  2. VS Code (o qualsiasi editor) per codificare l'applicazione Streamlit.
  3. Fonte di informazioni di borsa (notizie) su cui eseguiremo NER e successivamente NEL.
  4. Un ambiente Python virtuale (sto usando conda) insieme a librerie come Pandas, SpaCy, Streamlit, Streamlit-Spacy (se vuoi mostrare alcuni rendering di SpaCy.)

Obiettivo

 
 
L'obiettivo di questo progetto è apprendere e applicare il riconoscimento di entità denominate per estrarre entità importanti (società quotate in borsa nel nostro esempio) e quindi collegare ciascuna entità con alcune informazioni utilizzando una base di conoscenza (elenco di società Nifty500).

Otterremo i dati testuali dai feed RSS su Internet, estrarremo i nomi dei titoli in movimento e quindi estrarremo i dati sui prezzi di mercato per testare l'autenticità delle notizie prima di prendere posizione su tali titoli.


Nota: NER potrebbe non essere un problema allo stato dell'arte, ma ha molte applicazioni nel settore.


Passando a Google Colab per la sperimentazione e il test:

Passaggio 1: estrazione dei dati delle notizie sulle azioni di tendenza

 
 
Per ottenere notizie affidabili e autentiche sul mercato azionario, userò Tempi economici ed Controllo del denaro Feed RSS per questo tutorial, ma puoi anche utilizzare/aggiungere i feed RSS del tuo paese o i dati di Twitter/Telegram (gruppi) per rendere il tuo feed più informativo/accurato.

Le opportunità sono immense. Questo tutorial dovrebbe servire come trampolino di lancio per applicare NEL per creare app in diversi domini risolvendo diversi tipi di problemi di recupero delle informazioni.

Se continui a guardare il feed RSS, ha un aspetto simile a questo:

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


 

Il nostro obiettivo è ottenere i titoli testuali da questo feed RSS e quindi utilizzeremo SpaCy per estrarre le entità principali dai titoli.

I titoli sono presenti all'interno del tag dell'XML qui.

In primo luogo, dobbiamo acquisire l'intero documento XML e possiamo usare il requests biblioteca per farlo. Assicurati di avere questi pacchetti installati nel tuo ambiente di runtime in colab.

Puoi eseguire il seguente comando per installare quasi tutti i pacchetti direttamente dalla cella di codice di una colab:

!pip install <package_name>

Invia un GET richiesta al collegamento fornito per acquisire il documento XML.

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

Esegui la cella per verificare cosa ottieni nell'oggetto risposta.

Dovrebbe darti una risposta corretta con il codice HTTP 200 come segue:



Ora che hai questo oggetto di risposta, possiamo passare il suo contenuto alla classe BeautifulSoup per analizzare il documento XML come segue:

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

Questo dovrebbe darti tutti i titoli all'interno di un elenco Python:



Immagine dell'autore

 

Fantastico, abbiamo i dati testuali dai quali estrarremo le principali entità (che in questo caso sono società quotate in borsa) utilizzando la PNL.

È tempo di mettere in azione la PNL.

Passaggio 2: estrazione di entità dai titoli

 
 
Questa è la parte eccitante. Useremo a modello linguistico di base pre-addestrato dal spaCy libreria per estrarre le entità principali in un titolo.

Un po' di spaCy e dei modelli principali.

spacy è una libreria NLP open source che elabora i dati testuali a una velocità superveloce. È la libreria leader nella ricerca sulla PNL che viene utilizzata in applicazioni di livello aziendale su larga scala. spaCy è noto per il ridimensionamento del problema. E supporta più di 64 lingue e funziona bene sia con TensorFlow che PyTorch.

Parlando di modelli di base, spaCy ha due classi principali di modelli linguistici pre-addestrati che vengono addestrati su diverse dimensioni di dati testuali per darci deduzioni all'avanguardia.

  1. Modelli di base: per attività di base della PNL di uso generale.
  2. Modelli di avviamento — per applicazioni di nicchia che richiedono l'apprendimento del trasferimento. Possiamo sfruttare i pesi appresi del modello per mettere a punto i nostri modelli personalizzati senza dover addestrare il modello da zero.

Poiché il nostro caso d'uso è di base in questo tutorial, continueremo con il en_core_web_sm pipeline del modello di base.

Quindi, carichiamo questo nel nostro notebook:

nlp = spacy.load("en_core_web_sm")

Nota: Colab ha già scaricato questo per noi, ma se provi a eseguirlo nel tuo sistema locale, dovrai prima scaricare il modello utilizzando il seguente comando:

python -m spacy download en_core_web_sm

en_core_web_sm è fondamentalmente una pipeline inglese ottimizzata per CPU che ha i seguenti componenti:

  • tok2vec — token to vectors (esegue la tokenizzazione sui dati testuali),
  • tagger: aggiunge metadati rilevanti a ciascun token. spaCy utilizza alcuni modelli statistici per prevedere la parte del discorso (POS) di ciascun token. Più in documentazione.
  • parser — il parser di dipendenza stabilisce relazioni tra i token.
  • Altri componenti includono sender, ner, attribute_ruler, lemmatizer.

Ora, per testare cosa può fare questo modello per noi, passerò un singolo titolo attraverso il modello istanziato e poi controllerò le diverse parti di una frase.

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

La pipeline esegue tutte le attività dalla tokenizzazione al NER. Qui abbiamo prima i token:



Immagine dell'autore

 

Puoi guardare la parte del discorso contrassegnata usando il pos_ attributo.



Immagine dell'autore

 

Ogni token è taggato con alcuni metadati. Ad esempio, Trade è un nome proprio, Setup è un nome, : è la punteggiatura, e così via. Viene fornito l'intero elenco di tag qui.

E poi, puoi vedere come sono correlati guardando il grafico delle dipendenze usando dep_ attributo:



Immagine dell'autore

 

Qui, Trade è un composto, Setup è Root, Nifty è appos (modificatore apposizionale). Di nuovo, si possono trovare tutti i tag sintattici qui.

Puoi anche visualizzare le dipendenze di relazione tra i token usando il seguente spiazzamento render() Metodo:

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

che darà questo grafico:



Immagine dell'autore

 

Estrazione di entità

 
 
E per guardare le entità importanti della frase, puoi passare 'ent’ come stile nello stesso codice:



Immagine per autore: ho usato un altro titolo perché quello che abbiamo usato sopra non aveva alcuna entità.

 

Abbiamo tag diversi per entità diverse come il giorno ha DATE, Glasscoat ha GPE che può essere Paesi/Città/Stati. Siamo principalmente alla ricerca di entità con tag ORG che ci forniscano aziende, agenzie, istituzioni, ecc.

Ora siamo in grado di estrarre entità dal testo. Passiamo all'estrazione delle organizzazioni da tutti i titoli utilizzando le entità ORG.

Ciò restituirà un elenco di tutte le società come segue:



Immagine dell'autore

 

Così facile, giusto?

Questa è la magia di spaCy ora!

Il prossimo passo è cercare tutte queste società in una base di conoscenza per estrarre il simbolo azionario giusto per quella società e quindi utilizzare librerie come yahoo-finance per estrarre i loro dettagli di mercato come prezzo, rendimento, ecc.

Passaggio 3 — Collegamento di entità denominate

 
 
L'obiettivo di questo progetto è conoscere quali azioni stanno ronzando nel mercato e ottenere i loro dettagli sulla tua dashboard.

Abbiamo i nomi delle società, ma per ottenere i loro dettagli commerciali, avremo bisogno del simbolo azionario commerciale della società.

Dal momento che sto estraendo i dettagli e le notizie delle aziende indiane, utilizzerò un database esterno di Nifty 500 aziende (un file CSV).

Per ogni azienda, la cercheremo nell'elenco delle aziende che utilizzano i panda, quindi cattureremo le statistiche del mercato azionario utilizzando il Yahoo Finanza biblioteca.

Immagine dell'autore

 

Una cosa che dovresti notare qui è che ho aggiunto un ".NS" dopo ogni simbolo azionario prima di passarlo al Ticker classe del yfinance biblioteca. È perché i simboli azionari indiani NSE sono memorizzati con a .NS suffisso in yfinance.

E i titoli ronzanti si presenterebbero in un dataframe come di seguito:



Immagine dell'autore

 

Ecco! non è fantastico? Un'app così semplice ma profonda che potrebbe indirizzarti nella giusta direzione con le azioni giuste.

Ora per renderlo più accessibile, possiamo creare un'applicazione web dal codice che abbiamo appena scritto usando Streamlit.

Passaggio 4: creazione di un'app Web utilizzando Streamlit

 
 
È ora di passare a un editor e creare un nuovo progetto e un ambiente virtuale per l'applicazione NLP.

Iniziare con Streamlit è semplicissimo per tali applicazioni di dati demo. Assicurati di aver installato streamlit.

pip install Streamlit

Ora creiamo un nuovo file chiamato app.py e iniziamo a scrivere il codice funzionale per preparare l'app.

Importa tutte le librerie richieste in alto.

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

Aggiungi un titolo alla tua domanda:

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

Testa la tua app eseguendo streamlit run app.py nel tuo terminale. Dovrebbe aprire un'app nel tuo browser web.

Ho aggiunto alcune funzionalità extra per acquisire dati da più fonti. Ora puoi aggiungere un URL di feed RSS a tua scelta nell'applicazione e i dati verranno elaborati e le azioni di tendenza verranno visualizzate in un frame di dati.

Per accedere all'intera base di codice, puoi controllare il mio repository qui:

 
GitHub – dswh/NER_News_Feed
 

Puoi aggiungere più elementi di stile, diverse origini dati e altri tipi di elaborazione per renderlo più efficiente e utile.

La mia app nel suo stato attuale ha l'aspetto dell'immagine nel banner.

Se vuoi seguirmi passo dopo passo, guardami codificare questa applicazione qui:

Prossimi passi!

 
 
Invece di scegliere un caso d'uso finanziario, puoi anche scegliere qualsiasi altra applicazione a tua scelta. Sanità, e-commerce, ricerca e molti altri. Tutti i settori richiedono l'elaborazione di documenti e l'estrazione e il collegamento di entità importanti. Prova un'altra idea.

Un'idea semplice è estrarre tutte le entità importanti di un documento di ricerca e quindi crearne un grafico della conoscenza utilizzando l'API di ricerca di Google.

Inoltre, se desideri portare l'app del feed di notizie di borsa a un altro livello, puoi aggiungere alcuni algoritmi di trading per generare anche segnali di acquisto e vendita.

Ti incoraggio a scatenarti con la tua immaginazione.

Come puoi connetterti con me!

 
 
Se ti è piaciuto questo post e desideri vedere più di tali contenuti, puoi iscriverti a la mia newsletter or il mio canale YouTube dove continuerò a condividere progetti così utili e veloci che si possono costruire.

Se sei una persona che ha appena iniziato con la programmazione o vuoi approfondire la scienza dei dati o il machine learning, puoi dare un'occhiata al mio corso all'indirizzo Accademia di corsia WIP.

Grazie a Elliot Gunn.

 
Bio: Il duro Tyagi è un ingegnere con un'esperienza mista nelle tecnologie web e nella scienza dei dati (nota anche come scienza dei dati full-stack). È stato mentore di oltre 1000 aspiranti AI/Web/Data Science e sta progettando percorsi di apprendimento di data science e ingegneria ML. In precedenza, Harshit ha sviluppato algoritmi di elaborazione dei dati con ricercatori di Yale, MIT e UCLA.

Originale. Ripubblicato con il permesso.

Correlato:

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

Timestamp:

Di più da KDnuggets