Tworzenie uporządkowanego źródła informacji finansowych za pomocą Python, SpaCy i Streamlit

Węzeł źródłowy: 1876513

Tworzenie uporządkowanego źródła informacji finansowych za pomocą Python, SpaCy i Streamlit

Rozpoczęcie pracy z NLP przez utworzenie aplikacji Named Entity Recognition(NER).


By Twardy Tyagi, instruktor nauki o danych | Mentor | YouTuber


Tworzenie uporządkowanego źródła informacji finansowych za pomocą Python, SpaCy i Streamlit

Jedną z bardzo interesujących i szeroko stosowanych aplikacji NLP jest Named Entity Recognition (NER).

Uzyskiwanie wglądu z nieprzetworzonych i nieustrukturyzowanych danych ma kluczowe znaczenie. Przesyłanie dokumentu i pobieranie z niego ważnych informacji nazywa się wyszukiwaniem informacji.

Pozyskiwanie informacji było głównym zadaniem/wyzwaniem w NLP. A NER (lub NEL — Named Entity Linking) jest używany w kilku domenach (finanse, narkotyki, e-commerce itp.) do celów wyszukiwania informacji.

W tym samouczku pokażę, jak możesz wykorzystać NEL do opracowania niestandardowego kanału wiadomości giełdowych, który zawiera listę giełdowych akcji w Internecie.

Wymagania wstępne

 
 
Nie ma takich warunków wstępnych jako takich. Być może będziesz potrzebować pewnej znajomości Pythona i podstawowych zadań NLP, takich jak tokenizacja, tagowanie POS, parsowanie zależności itp.

Omówię te ważne rzeczy bardziej szczegółowo, więc nawet jeśli jesteś kompletnym początkującym, będziesz w stanie zrozumieć, co się dzieje.

Więc zabierajmy się za to, śledź dalej, a będziesz miał minimalny kanał wiadomości giełdowych, który możesz zacząć badać.

Potrzebne narzędzia/konfiguracje:

 
 

  1. Google Colab do wstępnego testowania i eksploracji danych oraz biblioteki SpaCy.
  2. VS Code (lub dowolny edytor) do kodowania aplikacji Streamlit.
  3. Źródło informacji giełdowych (newsy), na których będziemy wykonywać NER, a później NEL.
  4. Wirtualne środowisko Pythona (używam conda) wraz z bibliotekami takimi jak Pandas, SpaCy, Streamlit, Streamlit-Spacy (jeśli chcesz pokazać niektóre rendery SpaCy.)

Cel

 
 
Celem tego projektu jest poznanie i zastosowanie Rozpoznawania Podmiotów Nazwanych do wyodrębniania ważnych podmiotów (w naszym przykładzie spółek notowanych na giełdzie), a następnie powiązania każdego podmiotu z pewnymi informacjami za pomocą bazy wiedzy (lista spółek Nifty500).

Pozyskamy dane tekstowe z kanałów RSS w Internecie, wyodrębnimy nazwy aktywnych akcji, a następnie pobierzemy ich dane o cenach rynkowych, aby przetestować autentyczność wiadomości, zanim zajmiemy jakąkolwiek pozycję w tych akcjach.


Uwaga: NER może nie jest nowoczesnym problemem, ale ma wiele zastosowań w branży.


Przechodząc do Google Colab w celu eksperymentowania i testowania:

Krok 1: Wyodrębnienie danych o trendach giełdowych

 
 
Aby uzyskać wiarygodne, autentyczne wiadomości giełdowe, będę używał Economic Times i Kontrola pieniędzy Kanały RSS dla tego samouczka, ale możesz również użyć/dodać kanały RSS swojego kraju lub dane z Twittera/Telegramu (grup), aby uczynić swój kanał bardziej informacyjnym/dokładnym.

Możliwości są ogromne. Ten samouczek powinien służyć jako odskocznia do zastosowania NEL do tworzenia aplikacji w różnych domenach, rozwiązujących różne rodzaje problemów z wyszukiwaniem informacji.

Jeśli przejdziesz dalej, aby spojrzeć na kanał RSS, wygląda to mniej więcej tak:

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


 

Naszym celem jest pobranie nagłówków tekstowych z tego kanału RSS, a następnie użyjemy SpaCy do wyodrębnienia głównych jednostek z nagłówków.

Nagłówki są obecne wewnątrz znacznik XML tutaj.

Po pierwsze, musimy przechwycić cały dokument XML i możemy użyć requests biblioteka, aby to zrobić. Upewnij się, że masz zainstalowane te pakiety w środowisku wykonawczym w colab.

Możesz uruchomić następujące polecenie, aby zainstalować prawie każdy pakiet bezpośrednio z komórki kodu colab:

!pip install <package_name>

Wyślij GET żądanie pod podanym linkiem, aby przechwycić dokument XML.

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

Uruchom komórkę, aby sprawdzić, co otrzymasz w obiekcie odpowiedzi.

Powinien dać pomyślną odpowiedź z kodem HTTP 200 w następujący sposób:



Teraz, gdy masz już ten obiekt odpowiedzi, możemy przekazać jego zawartość do klasy BeautifulSoup, aby przeanalizować dokument XML w następujący sposób:

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

To powinno dać ci wszystkie nagłówki wewnątrz listy Pythona:



Zdjęcie autora

 

Wspaniale, mamy dane tekstowe, z których wydobędziemy główne podmioty (które w tym przypadku są spółkami giełdowymi) za pomocą NLP.

Czas wprowadzić NLP do akcji.

Krok 2: Wyodrębnianie podmiotów z nagłówków

 
 
To jest ekscytująca część. Będziemy używać wstępnie wytrenowany podstawowy model języka spaCy biblioteka do wyodrębniania głównych jednostek w nagłówku.

Trochę o spaCy i podstawowych modelach.

Przestronny to biblioteka NLP o otwartym kodzie źródłowym, która przetwarza dane tekstowe z superszybką prędkością. Jest to wiodąca biblioteka w badaniach NLP, która jest wykorzystywana w aplikacjach klasy korporacyjnej na dużą skalę. spaCy jest dobrze znane z tego, że skaluje się z problemem. Obsługuje ponad 64 języki i działa dobrze zarówno z TensorFlow, jak i PyTorch.

Mówiąc o modelach podstawowych, spaCy ma dwie główne klasy wstępnie wytrenowanych modeli językowych, które są wytrenowane na różnych rozmiarach danych tekstowych, aby zapewnić nam najnowocześniejsze wnioski.

  1. Modele podstawowe — do podstawowych zadań NLP ogólnego przeznaczenia.
  2. Modele startowe — do zastosowań niszowych, które wymagają uczenia się transferu. Możemy wykorzystać wyuczone wagi modelu, aby dostroić nasze niestandardowe modele bez konieczności trenowania modelu od zera.

Ponieważ nasz przypadek użycia jest podstawowy w tym samouczku, będziemy trzymać się en_core_web_sm potok modelu podstawowego.

Załadujmy więc to do naszego notatnika:

nlp = spacy.load("en_core_web_sm")

Uwaga: Colab ma już to pobrane dla nas, ale jeśli spróbujesz uruchomić go w swoim lokalnym systemie, musisz najpierw pobrać model za pomocą następującego polecenia:

python -m spacy download en_core_web_sm

en_core_web_sm to w zasadzie angielski potok zoptymalizowany pod kątem procesora, który składa się z następujących komponentów:

  • tok2vec — token do wektorów(wykonuje tokenizację na danych tekstowych),
  • tagger — dodaje odpowiednie metadane do każdego tokena. spaCy wykorzystuje niektóre modele statystyczne do przewidywania części mowy (POS) każdego tokena. Więcej w dokumentacja.
  • parser — parser zależności ustanawia relacje między tokenami.
  • Inne komponenty to senter, ner, attribute_ruler, lemmatizer.

Teraz, aby przetestować, co ten model może dla nas zrobić, przekażę jeden nagłówek przez skonkretyzowany model, a następnie sprawdzę różne części zdania.

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

Potok wykonuje wszystkie zadania od tokenizacji do NER. Tutaj najpierw mamy tokeny:



Zdjęcie autora

 

Możesz spojrzeć na oznaczoną część mowy, używając pos_ atrybutów.



Zdjęcie autora

 

Każdy token jest oznaczony pewnymi metadanymi. Na przykład Trade to rzeczownik właściwy, Setup to rzeczownik, : jest interpunkcja, i tak dalej. Podana jest cała lista tagów tutaj.

Następnie możesz przyjrzeć się, jak są ze sobą powiązane, patrząc na wykres zależności za pomocą dep_ atrybut:



Zdjęcie autora

 

Tutaj Trade to związek, Setup to root, Nifty to appos (modyfikator apozycji). Ponownie, wszystkie znaczniki składniowe można znaleźć tutaj.

Możesz również zwizualizować zależności relacji między tokenami za pomocą następującego wyświetlacza render() metoda:

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

co da ten wykres:



Zdjęcie autora

 

Ekstrakcja podmiotu

 
 
A żeby spojrzeć na ważne elementy zdania, możesz przekazać 'ent’ jako styl w tym samym kodzie:



Obraz autorstwa autora — użyłem innego nagłówka, ponieważ ten, którego użyliśmy powyżej, nie zawierał żadnych jednostek.

 

Mamy różne tagi dla różnych podmiotów, na przykład dzień ma DATE, Glasscoat ma GPE, które mogą być Krajami / Miastami / Stanami. Głównie poszukujemy podmiotów, które posiadają tag ORG, który poda nam firmy, agencje, instytucje itp.

Jesteśmy teraz w stanie wyodrębnić byty z tekstu. Przejdźmy do wyodrębnienia organizacji ze wszystkich nagłówków za pomocą jednostek ORG.

Spowoduje to wyświetlenie listy wszystkich firm w następujący sposób:



Zdjęcie autora

 

Tak proste, prawda?

To teraz magia spaCy!

Następnym krokiem jest wyszukanie wszystkich tych firm w bazie wiedzy w celu wyodrębnienia odpowiedniego symbolu giełdowego dla tej firmy, a następnie wykorzystanie bibliotek, takich jak yahoo-finance, do wyodrębnienia ich danych rynkowych, takich jak cena, zwrot itp.

Krok 3 — Łączenie nazwanych jednostek

 
 
Celem tego projektu jest dowiedzenie się, jakie akcje budzą na rynku i uzyskanie ich szczegółów na pulpicie nawigacyjnym.

Mamy nazwy firm, ale aby uzyskać szczegóły dotyczące ich transakcji, potrzebujemy symbolu giełdowego firmy.

Ponieważ wyodrębniam szczegóły i wiadomości o firmach indyjskich, zamierzam korzystać z zewnętrznej bazy danych Nifty 500 firm (plik CSV).

Dla każdej firmy wyszukamy ją na liście firm używających pandy, a następnie przechwycimy statystyki giełdowe za pomocą Finanse yahoo biblioteka.

Zdjęcie autora

 

Jedną rzeczą, którą powinieneś zauważyć, jest to, że dodałem „.NS” po każdym symbolu giełdowym przed przekazaniem go do Ticker klasa yfinance Biblioteka. Dzieje się tak, ponieważ indyjskie symbole giełdowe NSE są przechowywane z .NS przyrostek w yfinance.

A buczące zapasy pojawiłyby się w ramce danych, jak poniżej:



Zdjęcie autora

 

Voila! czy to nie jest wspaniałe? Taka prosta, ale głęboka aplikacja, która może wskazać ci właściwy kierunek dzięki odpowiednim akcjom.

Teraz, aby uczynić go bardziej dostępnym, możemy stworzyć aplikację internetową z kodu, który właśnie napisaliśmy za pomocą Streamlit.

Krok 4 — Budowanie aplikacji internetowej za pomocą Streamlit

 
 
Czas przejść do edytora i stworzyć nowy projekt i środowisko wirtualne dla aplikacji NLP.

Rozpoczęcie pracy ze Streamlitem jest bardzo łatwe w przypadku takich aplikacji danych demonstracyjnych. Upewnij się, że zainstalowałeś streamlit.

pip install Streamlit

Teraz utwórzmy nowy plik o nazwie app.py i zacznijmy pisać funkcjonalny kod, aby przygotować aplikację.

Zaimportuj wszystkie wymagane biblioteki u góry.

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

Dodaj tytuł do swojej aplikacji:

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

Przetestuj swoją aplikację, uruchamiając streamlit run app.py w terminalu. Powinien otworzyć aplikację w przeglądarce internetowej.

Dodałem kilka dodatkowych funkcji do przechwytywania danych z wielu źródeł. Teraz możesz dodać wybrany adres URL kanału RSS do aplikacji, a dane zostaną przetworzone, a notowania giełdowe będą wyświetlane w ramce danych.

Aby uzyskać dostęp do całej bazy kodu, możesz sprawdzić moje repozytorium tutaj:

 
Github - DSWH/NER_NEWS_FEED
 

Możesz dodać wiele elementów stylu, różne źródła danych i inne rodzaje przetwarzania, aby uczynić go bardziej wydajnym i użytecznym.

Moja aplikacja w obecnym stanie wygląda jak obrazek na banerze.

Jeśli chcesz śledzić mnie krok po kroku, zobacz, jak koduję tę aplikację tutaj:

Następne kroki!

 
 
Zamiast wybierać finansowy przypadek użycia, możesz również wybrać dowolną inną wybraną aplikację. Opieka zdrowotna, e-commerce, badania i wiele innych. Wszystkie branże wymagają przetwarzania dokumentów oraz wyodrębniania i łączenia ważnych podmiotów. Wypróbuj inny pomysł.

Prostym pomysłem jest wyodrębnienie wszystkich ważnych elementów artykułu badawczego, a następnie utworzenie na jego temat wykresu wiedzy za pomocą Google Search API.

Ponadto, jeśli chcesz przenieść aplikację z wiadomościami giełdowymi na inny poziom, możesz dodać kilka algorytmów handlowych, aby generować również sygnały kupna i sprzedaży.

Zachęcam do szaleństwa z wyobraźnią.

Jak możesz się ze mną połączyć!

 
 
Jeśli podobał Ci się ten post i chciałbyś zobaczyć więcej takich treści, możesz zasubskrybować mój biuletyn or mój kanał YouTube gdzie będę dalej dzielić się takimi przydatnymi i szybkimi projektami, które można zbudować.

Jeśli jesteś kimś, kto dopiero zaczyna programować lub chcesz zająć się nauką o danych lub ML, możesz sprawdzić mój kurs na Akademia WIP Lane.

Dzięki Elliotowi Gunnowi.

 
Bio: Twardy Tyagi jest inżynierem z połączonym doświadczeniem w technologiach internetowych i data science (znany również jako full-stack data science). Doradzał ponad 1000 kandydatom na sztuczną inteligencję/siecię/naukę danych i projektuje ścieżki szkoleniowe z zakresu nauki o danych i inżynierii ML. Wcześniej Harshit opracował algorytmy przetwarzania danych z naukowcami z Yale, MIT i UCLA.

Oryginalny. Przesłane za zgodą.

Związane z:

Źródło: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

Znak czasu:

Więcej z Knuggety