Construire un fil d'actualité financier structuré à l'aide de Python, SpaCy et Streamlit

Nœud source: 1876513

Construire un fil d'actualité financier structuré à l'aide de Python, SpaCy et Streamlit

Premiers pas avec la PNL en créant une application de reconnaissance d'entité nommée (NER).


By Harshit Tyagi, instructeur en science des données | Mentor | YouTubeur


Construire un fil d'actualité financier structuré à l'aide de Python, SpaCy et Streamlit

L'une des applications très intéressantes et largement utilisées de la PNL est la reconnaissance d'entités nommées (NER).

Obtenir des informations à partir de données brutes et non structurées est d'une importance vitale. Le téléchargement d'un document et l'obtention des informations importantes qu'il contient s'appelle la récupération d'informations.

La recherche d'informations a été une tâche/un défi majeur en PNL. Et NER (ou NEL — Named Entity Linking) est utilisé dans plusieurs domaines (finance, drogue, e-commerce, etc.) à des fins de recherche d'informations.

Dans ce tutoriel, je vais vous montrer comment tirer parti de NEL pour développer un fil d'actualités boursier personnalisé qui répertorie les actions en effervescence sur Internet.

Conditions préalables

 
 
Il n'y a pas de tels pré-requis en tant que tels. Vous devrez peut-être vous familiariser avec python et les tâches de base de la PNL comme la tokenisation, le balisage POS, l'analyse des dépendances, etc.

Je couvrirai les éléments importants plus en détail, donc même si vous êtes un débutant complet, vous serez en mesure de comprendre ce qui se passe.

Alors, allons-y, suivez-le et vous aurez un fil d'actualités minimal que vous pourrez commencer à rechercher.

Outils/configuration dont vous aurez besoin :

 
 

  1. Google Colab pour les tests initiaux et l'exploration des données et de la bibliothèque SpaCy.
  2. VS Code (ou n'importe quel éditeur) pour coder l'application Streamlit.
  3. Source d'information boursière sur laquelle nous effectuerons NER et plus tard NEL.
  4. Un environnement python virtuel (j'utilise conda) ainsi que des bibliothèques telles que Pandas, SpaCy, Streamlit, Streamlit-Spacy (si vous souhaitez afficher des rendus SpaCy.)

Objectif

 
 
L'objectif de ce projet est d'apprendre et d'appliquer la reconnaissance d'entité nommée pour extraire des entités importantes (sociétés cotées en bourse dans notre exemple), puis de lier chaque entité avec des informations à l'aide d'une base de connaissances (liste d'entreprises Nifty500).

Nous obtiendrons les données textuelles des flux RSS sur Internet, extrairons les noms des actions en effervescence, puis extrairons leurs données de prix du marché pour tester l'authenticité des nouvelles avant de prendre une position sur ces actions.


Remarque : le NER n'est peut-être pas un problème de pointe, mais il a de nombreuses applications dans l'industrie.


Passons à Google Colab pour l'expérimentation et les tests :

Étape 1 : Extraction des données d'actualités sur les actions de tendance

 
 
Pour obtenir des informations boursières authentiques et fiables, j'utiliserai Economic Times ainsi que Contrôle de l'argent Flux RSS pour ce didacticiel, mais vous pouvez également utiliser/ajouter les flux RSS de votre pays ou les données Twitter/Telegram (groupes) pour rendre votre flux plus informatif/précis.

Les opportunités sont immenses. Ce didacticiel devrait servir de tremplin pour appliquer NEL afin de créer des applications dans différents domaines résolvant différents types de problèmes de récupération d'informations.

Si vous continuez à regarder le flux RSS, il ressemble à ceci :

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


 

Notre objectif est d'obtenir les titres textuels de ce flux RSS, puis nous utiliserons SpaCy pour extraire les principales entités des titres.

Les titres sont présents à l'intérieur du balise du XML ici.

Premièrement, nous devons capturer l'intégralité du document XML et nous pouvons utiliser le requests bibliothèque pour le faire. Assurez-vous que ces packages sont installés dans votre environnement d'exécution dans colab.

Vous pouvez exécuter la commande suivante pour installer presque tous les packages directement à partir de la cellule de code d'un colab :

!pip install <package_name>

Envoyer nous GET demande au lien fourni pour capturer le document XML.

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

Exécutez la cellule pour vérifier ce que vous obtenez dans l'objet de réponse.

Il devrait vous donner une réponse réussie avec le code HTTP 200 comme suit :



Maintenant que vous avez cet objet de réponse, nous pouvons transmettre son contenu à la classe BeautifulSoup pour analyser le document XML comme suit :

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

Cela devrait vous donner tous les titres d'une liste Python :



Image par auteur

 

Génial, nous avons les données textuelles dont nous extrairons les principales entités (qui sont des sociétés cotées en bourse dans ce cas) en utilisant la PNL.

Il est temps de mettre la PNL en action.

Étape 2 : Extraire des entités des titres

 
 
C'est la partie passionnante. Nous utiliserons un modèle de langage de base pré-entraîné du spaCy bibliothèque pour extraire les principales entités d'un titre.

Un peu sur spaCy et les modèles de base.

SpaCy est une bibliothèque NLP open source qui traite les données textuelles à une vitesse ultra-rapide. Il s'agit de la principale bibliothèque de recherche en PNL qui est utilisée dans des applications d'entreprise à grande échelle. spaCy est bien connu pour faire évoluer le problème. Et il prend en charge plus de 64 langues et fonctionne bien avec TensorFlow et PyTorch.

En ce qui concerne les modèles de base, spaCy a deux classes principales de modèles de langage pré-entraînés qui sont entraînés sur différentes tailles de données textuelles pour nous donner des inférences de pointe.

  1. Modèles de base — pour les tâches de base de la PNL à usage général.
  2. Modèles de démarrage — pour les applications de niche qui nécessitent un apprentissage par transfert. Nous pouvons tirer parti des poids appris du modèle pour affiner nos modèles personnalisés sans avoir à entraîner le modèle à partir de zéro.

Étant donné que notre cas d'utilisation est basique dans ce tutoriel, nous allons nous en tenir au en_core_web_sm pipeline de modèle de base.

Alors, chargeons ceci dans notre notebook :

nlp = spacy.load("en_core_web_sm")

Remarque: Colab l'a déjà téléchargé pour nous, mais si vous essayez de l'exécuter sur votre système local, vous devrez d'abord télécharger le modèle à l'aide de la commande suivante :

python -m spacy download en_core_web_sm

en_core_web_sm est essentiellement un pipeline anglais optimisé pour le processeur qui comprend les composants suivants :

  • tok2vec — token to vectors (effectue une tokenisation sur les données textuelles),
  • tagger — ajoute des métadonnées pertinentes à chaque jeton. spaCy utilise certains modèles statistiques pour prédire la partie de la parole (POS) de chaque jeton. Plus dans le Documentation.
  • parser — l'analyseur de dépendance établit des relations entre les jetons.
  • Les autres composants incluent senter, ner, attribute_ruler, lemmatizer.

Maintenant, pour tester ce que ce modèle peut faire pour nous, je vais passer un seul titre à travers le modèle instancié, puis vérifier les différentes parties d'une phrase.

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

Le pipeline exécute toutes les tâches, de la tokenisation au NER. Ici, nous avons d'abord les jetons:



Image par auteur

 

Vous pouvez regarder la partie étiquetée du discours en utilisant le pos_ attribuer.



Image par auteur

 

Chaque jeton est étiqueté avec des métadonnées. Par exemple, Trade est un nom propre, Setup est un nom, : est la ponctuation, ainsi de suite, et ainsi de suite. La liste complète des Tags est donnée ici.

Et puis, vous pouvez voir comment ils sont liés en regardant le graphique de dépendance en utilisant dep_ attribut:



Image par auteur

 

Ici, Trade est un composé, Setup est Root, Nifty est appos (modificateur d'apposition). Encore une fois, toutes les balises syntaxiques peuvent être trouvées ici.

Vous pouvez également visualiser les dépendances des relations entre les jetons en utilisant le déplacement suivant render() méthode:

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

ce qui donnera ce graphique :



Image par auteur

 

Extraction d'entité

 
 
Et pour regarder les entités importantes de la phrase, vous pouvez passer 'ent’ comme style dans le même code :



Image de l'auteur — J'ai utilisé un autre titre parce que celui que nous avons utilisé ci-dessus n'avait aucune entité.

 

Nous avons différentes balises pour différentes entités comme le jour a DATE, Glasscoat a GPE qui peut être des pays/villes/états. Nous recherchons principalement des entités qui ont une balise ORG qui nous donnera des entreprises, des agences, des institutions, etc.

Nous sommes maintenant capables d'extraire des entités du texte. Passons à l'extraction des organisations de tous les titres à l'aide d'entités ORG.

Cela renverra une liste de toutes les entreprises comme suit :



Image par auteur

 

Si facile, non?

C'est la magie de spaCy maintenant !

L'étape suivante consiste à rechercher toutes ces entreprises dans une base de connaissances pour extraire le bon symbole boursier pour cette entreprise, puis à utiliser des bibliothèques comme Yahoo-finance pour extraire les détails de leur marché comme le prix, le rendement, etc.

Étape 3 - Liaison d'entités nommées

 
 
L'objectif de ce projet est de connaître les actions qui bourdonnent sur le marché et d'obtenir leurs détails sur votre tableau de bord.

Nous avons les noms des sociétés, mais pour obtenir leurs détails commerciaux, nous aurons besoin du symbole boursier de la société.

Puisque j'extrait les détails et les nouvelles des entreprises indiennes, je vais utiliser une base de données externe de Nifty 500 entreprises (un fichier CSV).

Pour chaque entreprise, nous la chercherons dans la liste des entreprises utilisant des pandas, puis nous saisirons les statistiques boursières à l'aide du Yahoo finance bibliothèque.

Image par auteur

 

Une chose que vous devriez remarquer ici est que j'ai ajouté un ".NS" après chaque symbole boursier avant de le passer au Ticker classe de la yfinance une bibliothèque. C'est parce que les symboles boursiers indiens NSE sont stockés avec un .NS suffixe dans yfinance.

Et les actions en effervescence apparaîtraient dans une base de données comme ci-dessous :



Image par auteur

 

Voila ! n'est-ce pas génial ? Une application si simple mais profonde qui pourrait vous orienter dans la bonne direction avec les bons stocks.

Maintenant, pour le rendre plus accessible, nous pouvons créer une application Web à partir du code que nous venons d'écrire à l'aide de Streamlit.

Étape 4 - Création d'une application Web à l'aide de Streamlit

 
 
Il est temps de passer à un éditeur et de créer un nouveau projet et un environnement virtuel pour l'application NLP.

Démarrer avec Streamlit est super facile pour de telles applications de données de démonstration. Assurez-vous que streamlit est installé.

pip install Streamlit

Créons maintenant un nouveau fichier appelé app.py et commençons à écrire du code fonctionnel pour préparer l'application.

Importez toutes les bibliothèques requises en haut.

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

Ajoutez un titre à votre candidature :

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

Testez votre application en exécutant streamlit run app.py dans votre terminal. Il devrait ouvrir une application dans votre navigateur Web.

J'ai ajouté des fonctionnalités supplémentaires pour capturer des données à partir de plusieurs sources. Maintenant, vous pouvez ajouter une URL de flux RSS de votre choix dans l'application et les données seront traitées et les actions tendances seront affichées dans un dataframe.

Pour accéder à l'intégralité de la base de code, vous pouvez consulter mon référentiel ici :

 
GitHub – dswh/NER_News_Feed
 

Vous pouvez ajouter plusieurs éléments de style, différentes sources de données et d'autres types de traitement pour le rendre plus efficace et utile.

Mon application dans son état actuel ressemble à l'image de la bannière.

Si vous voulez me suivre pas à pas, regardez-moi coder cette application ici :

Prochaines étapes!

 
 
Au lieu de choisir un cas d'utilisation financière, vous pouvez également choisir n'importe quelle autre application de votre choix. Santé, commerce électronique, recherche et bien d'autres. Toutes les industries exigent que des documents soient traités et que des entités importantes soient extraites et liées. Essayez une autre idée.

Une idée simple consiste à extraire toutes les entités importantes d'un document de recherche, puis à en créer un graphique de connaissances à l'aide de l'API de recherche Google.

De plus, si vous souhaitez amener l'application de flux d'actualités à un autre niveau, vous pouvez ajouter des algorithmes de trading pour générer également des signaux d'achat et de vente.

Je vous encourage à laisser libre cours à votre imagination.

Comment pouvez-vous vous connecter avec moi!

 
 
Si vous avez aimé cet article et souhaitez voir plus de ce contenu, vous pouvez vous abonner à ma newsletter or ma chaîne YouTube où je continuerai à partager des projets aussi utiles et rapides que l'on peut construire.

Si vous débutez dans la programmation ou si vous souhaitez vous lancer dans la science des données ou le ML, vous pouvez consulter mon cours sur Académie WIP Lane.

Merci à Elliot Gunn.

 
Bio: Harshit Tyagi est un ingénieur avec une expérience amalgamée dans les technologies Web et la science des données (alias science des données à pile complète). Il a encadré plus de 1000 XNUMX aspirants à l'IA/au Web/à la science des données et conçoit des pistes d'apprentissage en science des données et en ingénierie ML. Auparavant, Harshit a développé des algorithmes de traitement de données avec des chercheurs de Yale, du MIT et de l'UCLA.

ORIGINALE. Republié avec permission.

Connexe:

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

Horodatage:

Plus de KDnuggetsGenericName