Δημιουργία δομημένης χρηματοοικονομικής τροφοδοσίας ειδήσεων χρησιμοποιώντας Python, SpaCy και Streamlit

Κόμβος πηγής: 1876513

Δημιουργία δομημένης χρηματοοικονομικής τροφοδοσίας ειδήσεων χρησιμοποιώντας Python, SpaCy και Streamlit

Ετικέτες: Υπηρεσίες, NLP, Python, Spay, Ροή

Ξεκινώντας με το NLP δημιουργώντας μια εφαρμογή Αναγνώρισης Ονομασμένης Οντότητας (NER).


By Χάρσιτ Τιάγκι, Εκπαιδευτής Επιστήμης Δεδομένων | Μέντορας | YouTuber


Δημιουργία δομημένης χρηματοοικονομικής τροφοδοσίας ειδήσεων χρησιμοποιώντας Python, SpaCy και Streamlit

Μία από τις πολύ ενδιαφέρουσες και ευρέως χρησιμοποιούμενες εφαρμογές του NLP είναι το Named Entity Recognition (NER).

Η λήψη πληροφοριών από ακατέργαστα και μη δομημένα δεδομένα είναι ζωτικής σημασίας. Η μεταφόρτωση ενός εγγράφου και η λήψη σημαντικών τμημάτων πληροφοριών από αυτό ονομάζεται ανάκτηση πληροφοριών.

Η ανάκτηση πληροφοριών ήταν μια σημαντική εργασία/πρόκληση στο NLP. Και το NER (ή NEL — Σύνδεση με επωνυμία οντοτήτων) χρησιμοποιείται σε διάφορους τομείς (οικονομικά, φάρμακα, ηλεκτρονικό εμπόριο κ.λπ.) για σκοπούς ανάκτησης πληροφοριών.

Σε αυτήν την ανάρτηση εκμάθησης, θα σας δείξω πώς μπορείτε να αξιοποιήσετε τη NEL για να αναπτύξετε μια προσαρμοσμένη ροή ειδήσεων για το χρηματιστήριο που καταγράφει τις πολυσύχναστες μετοχές στο Διαδίκτυο.

Προϋποθέσεις

 
 
Δεν υπάρχουν τέτοιες προϋποθέσεις. Ίσως χρειαστεί να έχετε κάποια εξοικείωση με την python και τις βασικές εργασίες του NLP όπως το tokenization, η προσθήκη ετικετών POS, η ανάλυση εξαρτήσεων κ.λπ.

Θα καλύψω τα σημαντικά κομμάτια με περισσότερες λεπτομέρειες, έτσι ακόμα κι αν είστε εντελώς αρχάριοι, θα μπορείτε να τυλίξετε το κεφάλι σας γύρω από αυτό που συμβαίνει.

Λοιπόν, ας συνεχίσουμε με αυτό, ακολουθήστε και θα έχετε μια ελάχιστη ροή ειδήσεων στο stock που μπορείτε να ξεκινήσετε να ερευνάτε.

Εργαλεία/ρύθμιση που θα χρειαστείτε:

 
 

  1. Google Colab για αρχική δοκιμή και εξερεύνηση δεδομένων και της βιβλιοθήκης SpaCy.
  2. VS Code (ή οποιοδήποτε πρόγραμμα επεξεργασίας) για την κωδικοποίηση της εφαρμογής Streamlit.
  3. Πηγή πληροφοριών χρηματιστηριακής αγοράς (ειδήσεις) στις οποίες θα εκτελέσουμε NER και αργότερα NEL.
  4. Ένα εικονικό περιβάλλον python (χρησιμοποιώ conda) μαζί με βιβλιοθήκες όπως οι Pandas, SpaCy, Streamlit, Streamlit-Spacy (αν θέλετε να εμφανίσετε μερικές αποδόσεις SpaCy.)

Σκοπός

 
 
Ο στόχος αυτού του έργου είναι να μάθει και να εφαρμόσει την Αναγνώριση Επώνυμης Οντότητας για την εξαγωγή σημαντικών οντοτήτων (δημόσιες εταιρείες στο παράδειγμά μας) και στη συνέχεια να συνδέσει κάθε οντότητα με ορισμένες πληροφορίες χρησιμοποιώντας μια βάση γνώσεων (κατάλογος εταιρειών Nifty500).

Θα λάβουμε τα δεδομένα κειμένου από τις ροές RSS στο Διαδίκτυο, θα εξαγάγουμε τα ονόματα των μετοχών που βουίζουν και, στη συνέχεια, θα τραβήξουμε τα δεδομένα των τιμών αγοράς τους για να ελέγξουμε την αυθεντικότητα των ειδήσεων πριν πάρουμε οποιαδήποτε θέση σε αυτές τις μετοχές.


Σημείωση: Το NER μπορεί να μην είναι πρόβλημα τελευταίας τεχνολογίας, αλλά έχει πολλές εφαρμογές στον κλάδο.


Προχωρώντας στο Google Colab για πειραματισμούς και δοκιμές:

Βήμα 1: Εξαγωγή των δεδομένων ειδήσεων για τις τάσεις των μετοχών

 
 
Για να λάβω κάποια αξιόπιστα αυθεντικά νέα για το χρηματιστήριο, θα χρησιμοποιήσω Οικονομικοί Χρόνοι και  Έλεγχος χρημάτων Τροφοδοσίες RSS για αυτό το σεμινάριο, αλλά μπορείτε επίσης να χρησιμοποιήσετε/προσθέσετε τις ροές RSS της χώρας σας ή τα δεδομένα Twitter/Telegram(ομάδες) για να κάνετε τη ροή σας πιο ενημερωτική/ακριβή.

Οι ευκαιρίες είναι τεράστιες. Αυτό το σεμινάριο θα πρέπει να χρησιμεύσει ως σκαλοπάτι για την εφαρμογή του NEL για τη δημιουργία εφαρμογών σε διαφορετικούς τομείς που επιλύουν διαφορετικά είδη προβλημάτων ανάκτησης πληροφοριών.

Εάν συνεχίσετε να κοιτάζετε τη ροή RSS, φαίνεται κάπως έτσι:

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


 

Στόχος μας είναι να λάβουμε τους τίτλους κειμένου από αυτήν τη ροή RSS και στη συνέχεια θα χρησιμοποιήσουμε το SpaCy για να εξαγάγουμε τις κύριες οντότητες από τους τίτλους.

Οι τίτλοι είναι παρόντες μέσα στο ετικέτα του XML εδώ.

Πρώτον, πρέπει να καταγράψουμε ολόκληρο το έγγραφο XML και μπορούμε να το χρησιμοποιήσουμε requests βιβλιοθήκη για να το κάνει αυτό. Βεβαιωθείτε ότι έχετε εγκαταστήσει αυτά τα πακέτα στο περιβάλλον χρόνου εκτέλεσης στο colab.

Μπορείτε να εκτελέσετε την ακόλουθη εντολή για να εγκαταστήσετε σχεδόν οποιοδήποτε πακέτο απευθείας από το κελί κώδικα ενός colab:

!pip install <package_name>

Στείλτε a GET ζητήστε στον παρεχόμενο σύνδεσμο να καταγράψετε το έγγραφο XML.

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

Εκτελέστε το κελί για να ελέγξετε τι λαμβάνετε στο αντικείμενο απόκρισης.

Θα πρέπει να σας δώσει μια επιτυχημένη απόκριση με τον κωδικό HTTP 200 ως εξής:



Τώρα που έχετε αυτό το αντικείμενο απόκρισης, μπορούμε να περάσουμε το περιεχόμενό του στην κλάση BeautifulSoup για να αναλύσει το έγγραφο XML ως εξής:

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

Αυτό θα πρέπει να σας δώσει όλους τους τίτλους μέσα σε μια λίστα Python:



Εικόνα από συγγραφέα

 

Καταπληκτικό, έχουμε τα δεδομένα κειμένου από τα οποία θα εξαγάγουμε τις κύριες οντότητες (οι οποίες είναι εισηγμένες εταιρείες σε αυτήν την περίπτωση) χρησιμοποιώντας το NLP.

Ήρθε η ώρα να βάλετε το NLP σε δράση.

Βήμα 2: Εξαγωγή οντοτήτων από τους τίτλους

 
 
Αυτό είναι το συναρπαστικό μέρος. Θα χρησιμοποιήσουμε ένα προεκπαιδευμένο μοντέλο γλώσσας πυρήνα από το spaCy βιβλιοθήκη για να εξαγάγετε τις κύριες οντότητες σε μια επικεφαλίδα.

Λίγα λόγια για το spaCy και τα βασικά μοντέλα.

Spay είναι μια βιβλιοθήκη NLP ανοιχτού κώδικα που επεξεργάζεται δεδομένα κειμένου με εξαιρετικά γρήγορη ταχύτητα. Είναι η κορυφαία βιβλιοθήκη στην έρευνα NLP που χρησιμοποιείται σε εφαρμογές εταιρικού επιπέδου σε κλίμακα. Το spaCy είναι γνωστό για την κλιμάκωση του προβλήματος. Και υποστηρίζει περισσότερες από 64 γλώσσες και λειτουργεί καλά τόσο με το TensorFlow όσο και με το PyTorch.

Μιλώντας για βασικά μοντέλα, το spaCy διαθέτει δύο μεγάλες κατηγορίες προκαταρτισμένων μοντέλων γλώσσας που εκπαιδεύονται σε διαφορετικά μεγέθη κειμενικών δεδομένων για να μας δώσουν συμπεράσματα τελευταίας τεχνολογίας.

  1. Βασικά μοντέλα — για βασικές εργασίες NLP γενικής χρήσης.
  2. Μοντέλα εκκίνησης — για εξειδικευμένες εφαρμογές που απαιτούν εκμάθηση μεταφοράς. Μπορούμε να αξιοποιήσουμε τα μαθησιακά βάρη του μοντέλου για να βελτιστοποιήσουμε τα προσαρμοσμένα μοντέλα μας χωρίς να χρειάζεται να εκπαιδεύσουμε το μοντέλο από την αρχή.

Δεδομένου ότι η περίπτωση χρήσης μας είναι βασική σε αυτό το σεμινάριο, θα μείνουμε με το en_core_web_sm αγωγός βασικού μοντέλου.

Λοιπόν, ας το φορτώσουμε στο σημειωματάριό μας:

nlp = spacy.load("en_core_web_sm")

Σημείωση: Το Colab έχει ήδη κατεβάσει αυτό για εμάς, αλλά αν προσπαθήσετε να το εκτελέσετε στο τοπικό σας σύστημα, θα πρέπει πρώτα να κάνετε λήψη του μοντέλου χρησιμοποιώντας την ακόλουθη εντολή:

python -m spacy download en_core_web_sm

Το en_core_web_sm είναι βασικά μια αγγλική διοχέτευση βελτιστοποιημένη για CPU η οποία έχει τα ακόλουθα στοιχεία:

  • tok2vec — διακριτικό σε διανύσματα (εκτελεί tokenization στα δεδομένα κειμένου),
  • tagger — προσθέτει σχετικά μεταδεδομένα σε κάθε διακριτικό. Το spaCy χρησιμοποιεί ορισμένα στατιστικά μοντέλα για να προβλέψει το μέρος της ομιλίας (POS) κάθε διακριτικού. Περισσότερα στο τεκμηρίωση.
  • αναλυτής — ο αναλυτής εξάρτησης δημιουργεί σχέσεις μεταξύ των διακριτικών.
  • Άλλα στοιχεία περιλαμβάνουν αποστολέα, ner, χαρακτηριστικό_ruler, lemmatizer.

Τώρα, για να δοκιμάσω τι μπορεί να κάνει αυτό το μοντέλο για εμάς, θα περάσω έναν μόνο τίτλο μέσα από το υπόδειγμα που έχει δημιουργηθεί και στη συνέχεια θα ελέγξω τα διάφορα μέρη μιας πρότασης.

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

Ο αγωγός εκτελεί όλες τις εργασίες από το tokenization έως το NER. Εδώ έχουμε πρώτα τα διακριτικά:



Εικόνα από συγγραφέα

 

Μπορείτε να δείτε το τμήμα της ομιλίας με ετικέτα χρησιμοποιώντας το pos_ αποδίδουν.



Εικόνα από συγγραφέα

 

Κάθε διακριτικό επισημαίνεται με κάποια μεταδεδομένα. Για παράδειγμα, το Trade είναι ένα σωστό ουσιαστικό, το Setup είναι ένα ουσιαστικό, : είναι σημεία στίξης, ούτω καθεξής, και ούτω καθεξής. Δίνεται ολόκληρη η λίστα των ετικετών εδώ.

Και στη συνέχεια, μπορείτε να δείτε πώς σχετίζονται κοιτάζοντας το γράφημα εξάρτησης χρησιμοποιώντας dep_ Χαρακτηριστικό:



Εικόνα από συγγραφέα

 

Εδώ, το Trade είναι Σύνθετο, το Setup είναι Root, το Nifty είναι appos (Appositional modifier). Και πάλι, όλες οι συντακτικές ετικέτες μπορούν να βρεθούν εδώ.

Μπορείτε επίσης να απεικονίσετε τις εξαρτήσεις των σχέσεων μεταξύ των διακριτικών χρησιμοποιώντας την ακόλουθη μετατόπιση render() μέθοδος:

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

που θα δώσει αυτό το γράφημα:



Εικόνα από συγγραφέα

 

Εξαγωγή οντοτήτων

 
 
Και για να δείτε τις σημαντικές οντότητες της πρότασης, μπορείτε να περάσετε 'ent’ ως στυλ στον ίδιο κώδικα:



Εικόνα κατά συγγραφέα — Χρησιμοποίησα άλλη επικεφαλίδα επειδή αυτή που χρησιμοποιήσαμε παραπάνω δεν είχε οντότητες.

 

Έχουμε διαφορετικές ετικέτες για διαφορετικές οντότητες, όπως η ημέρα έχει DATE, η Glasscoat έχει GPE που μπορεί να είναι Χώρες/Πόλεις/Πολιτεία. Ψάχνουμε κυρίως για οντότητες που έχουν ετικέτα ORG που θα μας δίνουν Εταιρείες, πρακτορεία, ιδρύματα κ.λπ.

Είμαστε πλέον σε θέση να εξάγουμε οντότητες από το κείμενο. Ας αρχίσουμε να εξάγουμε τους οργανισμούς από όλους τους τίτλους χρησιμοποιώντας οντότητες ORG.

Αυτό θα επιστρέψει μια λίστα με όλες τις εταιρείες ως εξής:



Εικόνα από συγγραφέα

 

Τόσο εύκολο, έτσι;

Αυτή είναι η μαγεία του spaCy τώρα!

Το επόμενο βήμα είναι να αναζητήσετε όλες αυτές τις εταιρείες σε μια γνωσιακή βάση για να εξαγάγετε το σωστό σύμβολο μετοχών για αυτήν την εταιρεία και στη συνέχεια να χρησιμοποιήσετε βιβλιοθήκες όπως η yahoo-finance για να εξαγάγετε τα στοιχεία της αγοράς τους, όπως τιμή, απόδοση κ.λπ.

Βήμα 3 — Σύνδεση με όνομα οντότητας

 
 
Ο στόχος αυτού του έργου είναι να μάθετε ποιες μετοχές βουίζουν στην αγορά και να δείτε τα στοιχεία τους στον πίνακα ελέγχου σας.

Έχουμε τα ονόματα των εταιρειών, αλλά για να λάβουμε τα στοιχεία συναλλαγών τους, θα χρειαστούμε το σύμβολο συναλλαγών μετοχών της εταιρείας.

Εφόσον εξάγω τις λεπτομέρειες και τα νέα των ινδικών εταιρειών, πρόκειται να χρησιμοποιήσω μια εξωτερική βάση δεδομένων Nifty 500 εταιρείες (ένα αρχείο CSV).

Για κάθε εταιρεία, θα την αναζητήσουμε στη λίστα των εταιρειών που χρησιμοποιούν πάντα και, στη συνέχεια, θα καταγράψουμε τα στατιστικά στοιχεία του χρηματιστηρίου χρησιμοποιώντας το yahoo-finance βιβλιοθήκη.

Εικόνα από συγγραφέα

 

Ένα πράγμα που πρέπει να προσέξετε εδώ είναι ότι έχω προσθέσει ένα ".NS" μετά από κάθε σύμβολο μετοχής πριν το περάσω στο Ticker τάξη των yfinance βιβλιοθήκη. Είναι επειδή τα ινδικά σύμβολα μετοχών NSE αποθηκεύονται με α .NS επίθημα σε yfinance.

Και τα βουητά αποθέματα θα εμφανίζονταν σε ένα πλαίσιο δεδομένων όπως παρακάτω:



Εικόνα από συγγραφέα

 

Voila! δεν είναι υπέροχο αυτό; Μια τόσο απλή αλλά βαθιά εφαρμογή που θα μπορούσε να σας οδηγήσει στη σωστή κατεύθυνση με τις κατάλληλες μετοχές.

Τώρα για να το κάνουμε πιο προσιτό, μπορούμε να δημιουργήσουμε μια διαδικτυακή εφαρμογή από τον κώδικα που μόλις γράψαμε χρησιμοποιώντας το Streamlit.

Βήμα 4 — Δημιουργία μιας εφαρμογής Ιστού χρησιμοποιώντας το Streamlit

 
 
Ήρθε η ώρα να μεταβείτε σε ένα πρόγραμμα επεξεργασίας και να δημιουργήσετε ένα νέο έργο και εικονικό περιβάλλον για την εφαρμογή NLP.

Το ξεκίνημα με το Streamlit είναι εξαιρετικά εύκολο για τέτοιες εφαρμογές δεδομένων επίδειξης. Βεβαιωθείτε ότι έχετε εγκαταστήσει το streamlit.

pip install Streamlit

Τώρα, ας δημιουργήσουμε ένα νέο αρχείο που ονομάζεται app.py και ας αρχίσουμε να γράφουμε λειτουργικό κώδικα για να ετοιμάσουμε την εφαρμογή.

Εισαγάγετε όλες τις απαιτούμενες βιβλιοθήκες στο επάνω μέρος.

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

Προσθέστε έναν τίτλο στην αίτησή σας:

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

Δοκιμάστε την εφαρμογή σας εκτελώντας streamlit run app.py στο τερματικό σας. Θα πρέπει να ανοίξει μια εφαρμογή στο πρόγραμμα περιήγησής σας.

Έχω προσθέσει κάποιες επιπλέον λειτουργίες για τη λήψη δεδομένων από πολλές πηγές. Τώρα, μπορείτε να προσθέσετε μια διεύθυνση URL ροής RSS της επιλογής σας στην εφαρμογή και τα δεδομένα θα υποβληθούν σε επεξεργασία και οι ανερχόμενες μετοχές θα εμφανιστούν σε ένα πλαίσιο δεδομένων.

Για να αποκτήσετε πρόσβαση σε ολόκληρη τη βάση κώδικα, μπορείτε να ελέγξετε το αποθετήριο μου εδώ:

 
GitHub – dswh/NER_News_Feed
 

Μπορείτε να προσθέσετε πολλά στοιχεία στυλ, διαφορετικές πηγές δεδομένων και άλλους τύπους επεξεργασίας για να την κάνετε πιο αποτελεσματική και χρήσιμη.

Η εφαρμογή μου στην τρέχουσα κατάστασή της μοιάζει με την εικόνα στο banner.

Αν θέλετε να με ακολουθήσετε βήμα-βήμα, δείτε με να κωδικοποιώ αυτήν την εφαρμογή εδώ:

Επόμενα βήματα!

 
 
Αντί να επιλέξετε μια περίπτωση οικονομικής χρήσης, μπορείτε επίσης να επιλέξετε οποιαδήποτε άλλη εφαρμογή της επιλογής σας. Υγειονομική περίθαλψη, ηλεκτρονικό εμπόριο, έρευνα και πολλά άλλα. Όλες οι βιομηχανίες απαιτούν την επεξεργασία εγγράφων και την εξαγωγή και τη σύνδεση σημαντικών οντοτήτων. Δοκιμάστε μια άλλη ιδέα.

Μια απλή ιδέα είναι η εξαγωγή όλων των σημαντικών οντοτήτων μιας ερευνητικής εργασίας και στη συνέχεια η δημιουργία ενός γραφήματος γνώσης χρησιμοποιώντας το API Αναζήτησης Google.

Επίσης, εάν θέλετε να μεταφέρετε την εφαρμογή ροής ειδήσεων μετοχών σε άλλο επίπεδο, μπορείτε να προσθέσετε μερικούς αλγόριθμους συναλλαγών για να δημιουργήσετε επίσης σήματα αγοράς και πώλησης.

Σας ενθαρρύνω να τρελαθείτε με τη φαντασία σας.

Πώς μπορείτε να συνδεθείτε μαζί μου!

 
 
Αν σας άρεσε αυτή η ανάρτηση και θέλετε να δείτε περισσότερο τέτοιο περιεχόμενο, μπορείτε να εγγραφείτε το ενημερωτικό δελτίο μου or το κανάλι μου στο YouTube όπου θα συνεχίσω να μοιράζομαι τόσο χρήσιμα και γρήγορα έργα που μπορεί κανείς να φτιάξει.

Εάν είστε κάποιος που μόλις ξεκινάει με τον προγραμματισμό ή θέλετε να ασχοληθείτε με την επιστήμη δεδομένων ή την ML, μπορείτε να δείτε το μάθημά μου στο WIP Lane Academy.

Χάρη στον Elliot Gunn.

 
Bio: Χάρσιτ Τιάγκι είναι μηχανικός με συγχωνευμένη εμπειρία σε τεχνολογίες ιστού και επιστήμη δεδομένων (γνωστή και ως επιστήμη δεδομένων πλήρους στοίβας). Έχει καθοδηγήσει πάνω από 1000 υποψηφίους AI/Web/Data Science και σχεδιάζει κομμάτια εκμάθησης επιστήμης δεδομένων και μηχανικής ML. Προηγουμένως, ο Harshit ανέπτυξε αλγόριθμους επεξεργασίας δεδομένων με ερευνητές επιστήμονες στο Yale, το MIT και το UCLA.

Πρωτότυπο. Αναδημοσιεύτηκε με άδεια.

Συγγενεύων:



Κορυφαίες ιστορίες τις τελευταίες 30 ημέρες
Δημοφιλέστερα
  1. Διαβάζετε αρχεία Excel με Python; Υπάρχει 1000 φορές πιο γρήγορος τρόπος
  2. Οι επιστήμονες δεδομένων χωρίς δεξιότητες μηχανικής δεδομένων θα αντιμετωπίσουν τη σκληρή αλήθεια
  3. Ένα χαρτοφυλάκιο επιστήμης δεδομένων που θα σας προσφέρει τη δουλειά
  4. Αυτοματοποιήστε το Microsoft Excel και το Word χρησιμοποιώντας Python
  5. Πώς να δημιουργήσετε εκπληκτικές εφαρμογές Ιστού για τα έργα επιστήμης δεδομένων σας
Οι περισσότεροι Shared
  1. Τρόπος αντιμετώπισης μη ισορροπημένης ταξινόμησης, χωρίς επαναπροσδιορισμό των δεδομένων
  2. Πώς να βρείτε αδυναμίες στα μοντέλα μηχανικής εκμάθησης
  3. Το ανοιχτό βιβλίο της Συλλογής μηχανών και βαθιάς εκμάθησης
  4. Οι επιστήμονες δεδομένων χωρίς δεξιότητες μηχανικής δεδομένων θα αντιμετωπίσουν τη σκληρή αλήθεια
  5. Εξηγείται ο έλεγχος υποθέσεων

Πηγή: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

Σφραγίδα ώρας:

Περισσότερα από KDnuggets