Strukturoidun taloudellisen uutissyötteen luominen Pythonin, SpaCyn ja Streamlitin avulla

Lähdesolmu: 1876513

Strukturoidun taloudellisen uutissyötteen luominen Pythonin, SpaCyn ja Streamlitin avulla

NLP: n käytön aloittaminen rakentamalla NER (Named Entity Recognition) -sovellus.


By Hirveä Tyagi, Tietotieteen ohjaaja | Mentori | YouTuber


Strukturoidun taloudellisen uutissyötteen luominen Pythonin, SpaCyn ja Streamlitin avulla

Yksi erittäin mielenkiintoisista ja laajalti käytetyistä NLP -sovelluksista on NER (Named Entity Recognition).

Oivallusten saaminen raa'asta ja jäsentämättömästä datasta on elintärkeää. Asiakirjan lähettämistä ja tärkeiden tietojen hankkimista siitä kutsutaan tiedonhauksi.

Tiedonhaku on ollut NLP: n suuri tehtävä/haaste. Ja NER: tä (tai NEL-Named Entity Linking) käytetään useilla aloilla (rahoitus, huumeet, verkkokauppa jne.) Tiedonhakutarkoituksiin.

Tässä opetusvideossa näytän sinulle, kuinka voit hyödyntää NEL: ää kehittämään mukautetun osakemarkkinoiden uutissyötteen, jossa luetellaan Internetin surisevat osakkeet.

Edellytykset

 
 
Tällaisia ​​ennakkoehtoja sellaisenaan ei ole. Saatat joutua perehtymään pythoniin ja NLP: n perustehtäviin, kuten tokenisointiin, POS -koodaukseen, riippuvuuden jäsentämiseen jne.

Käsittelen tärkeitä kohtia yksityiskohtaisemmin, joten vaikka olisit täysin aloittelija, voit kietoa pään ympärille, mitä tapahtuu.

Joten, jatkakaamme sitä, seuraa ja saat minimaalisen uutissyötteen, jota voit alkaa tutkia.

Tarvittavat työkalut/asetukset:

 
 

  1. Google Colab tietojen ensimmäiseen testaamiseen ja tutkimiseen sekä SpaCy -kirjasto.
  2. VS -koodi (tai mikä tahansa editori) Streamlit -sovelluksen koodaamiseen.
  3. Lähde osakemarkkinatiedoista (uutiset), joista suoritamme NER ja myöhemmin NEL.
  4. Virtuaalinen python-ympäristö (käytän condaa) sekä kirjastot, kuten Pandas, SpaCy, Streamlit, Streamlit-Spacy (jos haluat näyttää joitain SpaCy-renderöintejä).

Tavoite

 
 
Tämän projektin tavoitteena on oppia ja soveltaa nimettyjen yhteisöjen tunnistusta tärkeiden yhteisöjen (esimerkissämme julkisesti noteeratut yritykset) poimimiseksi ja linkittää sitten jokainen kokonaisuus johonkin tietoon tietopohjan avulla (Nifty500 -yritysten luettelo).

Haemme tekstitiedot Internetin RSS -syötteistä, poimimme surisevien osakkeiden nimet ja otamme sitten niiden markkinahintatiedot testataksesi uutisten aitouden ennen kuin otamme kantaa näihin osakkeisiin.


Huomautus: NER ei välttämättä ole huippuluokan ongelma, mutta sillä on monia sovelluksia alalla.


Siirrymme Google Colabiin kokeilua ja testausta varten:

Vaihe 1: Poimivat trendit osakkeiden uutiset

 
 
Käytän saadakseni luotettavia aitoja osakemarkkinoiden uutisia Economic Times ja Rahan hallinta Tämän opetusohjelman RSS -syötteet, mutta voit myös käyttää/lisätä maasi RSS -syötteitä tai Twitter/Telegram (ryhmät) -tietoja, jotta voit tehdä syötteestäsi informatiivisemman/tarkemman.

Mahdollisuudet ovat valtavat. Tämän opetusohjelman pitäisi toimia askeleena NEL -sovelluksen rakentamiseen sovellusten luomiseen eri aloilla erilaisten tiedonhakuongelmien ratkaisemiseksi.

Jos jatkat RSS -syötteen tarkastelua, se näyttää suunnilleen tältä:

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


 

Tavoitteenamme on saada tekstimuotoiset otsikot tästä RSS -syötteestä, ja sitten käytämme SpaCy -ohjelmaa poimimaan pääyksiköt otsikoista.

Otsikot ovat läsnä XML -tunniste täällä.

Ensinnäkin meidän on kaapattava koko XML -asiakirja ja voimme käyttää requests kirjasto tekemään sen. Varmista, että nämä paketit on asennettu ajonaikaiseen ympäristöön Colabissa.

Voit suorittaa seuraavan komennon asentaaksesi melkein minkä tahansa paketin suoraan Colabin koodisolusta:

!pip install <package_name>

Lähetä GET pyyntö annetulla linkillä XML -asiakirjan kaappaamiseksi.

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

Suorita solu tarkistaaksesi, mitä saat vastausobjektista.

Sen pitäisi antaa sinulle onnistunut vastaus HTTP -koodilla 200 seuraavasti:



Nyt kun sinulla on tämä vastausobjekti, voimme siirtää sen sisällön BeautifulSoup -luokkaan jäsentämään XML -asiakirjan seuraavasti:

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

Tämän pitäisi antaa sinulle kaikki otsikot Python -luettelossa:



Kuva tekijältä

 

Mahtavaa, meillä on tekstitiedot, joista poimimme tärkeimmät yksiköt (jotka ovat tässä tapauksessa julkisesti noteerattuja yrityksiä) NLP: n avulla.

On aika ottaa NLP käyttöön.

Vaihe 2: Entiteettien poimiminen otsikoista

 
 
Tämä on jännittävä osa. Käytämme a esikoulutettu ydinkielen malli mistä spaCy kirjasto poimiakseen otsikon pääyksiköt.

Hieman spaCysta ja ydinmalleista.

spacy on avoimen lähdekoodin NLP-kirjasto, joka käsittelee tekstidataa erittäin nopeasti. Se on NLP-tutkimuksen johtava kirjasto, jota käytetään laajasti yritystason sovelluksissa. spaCy tunnetaan ongelman skaalaamisesta. Ja se tukee yli 64 kieltä ja toimii hyvin sekä TensorFlow että PyTorch kanssa.

Puhuessamme ydinmalleista spaCylla on kaksi pääluokkaa esivalmistettuja kielimalleja, jotka on koulutettu erikokoisille tekstitiedoille, jotta voimme antaa viimeisimpiä johtopäätöksiä.

  1. Ydinmallit-yleisiin NLP-perustehtäviin.
  2. Aloitusmallit - kapeisiin sovelluksiin, jotka edellyttävät siirron oppimista. Voimme hyödyntää mallin opittuja painoja hienosäätääksemme mukautettuja mallejamme ilman, että joudumme kouluttamaan mallia alusta alkaen.

Koska käyttötapa on perusasiat tässä opetusohjelmassa, aiomme pysyä en_core_web_sm ydinmalliputki.

Ladataan siis tämä muistikirjaan:

nlp = spacy.load("en_core_web_sm")

Huomautus: Colab on jo ladannut tämän meille, mutta jos yrität käyttää sitä paikallisessa järjestelmässä, sinun on ensin ladattava malli käyttämällä seuraavaa komentoa:

python -m spacy download en_core_web_sm

en_core_web_sm on pohjimmiltaan englanninkielinen putki, joka on optimoitu suorittimelle ja jossa on seuraavat komponentit:

  • tok2vec - token vektoreille (suorittaa tokenisoinnin tekstidatalle),
  • tagger - lisää asiaankuuluvat metatiedot jokaiseen tunnukseen. spaCy käyttää joitain tilastollisia malleja ennustaakseen kunkin merkin puheosan (POS). Lisää dokumentointi.
  • jäsennin - riippuvuusjäsennys luo suhteita merkkien välille.
  • Muita komponentteja ovat lähettäjä, ner, attribute_ruler, lemmatizer.

Nyt testatakseni, mitä tämä malli voi tehdä meille, kuljen yhden otsikon esillä olevan mallin läpi ja tarkistan sitten lauseen eri osat.

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

Putkilinja suorittaa kaikki tehtävät tokenisoinnista NER: ään. Tässä on ensin tunnukset:



Kuva tekijältä

 

Voit tarkastella merkittyä puheen osaa käyttämällä pos_ määrite.



Kuva tekijältä

 

Jokainen merkki on merkitty metatiedoilla. Esimerkiksi kauppa on oikea substantiivi, asetus on substantiivi, : on välimerkkejä ja niin edelleen. Koko luettelo tunnisteista on annettu tätä.

Ja sitten voit tarkastella, miten ne liittyvät toisiinsa, katsomalla riippuvuuskaaviota dep_ määrite:



Kuva tekijältä

 

Täällä kauppa on yhdistettä, asennus on juurta, näppärä on appos (asemanmuutos). Jälleen kaikki syntaktiset tunnisteet löytyvät tätä.

Voit myös visualisoida merkkien väliset suhde riippuvuudet käyttämällä seuraavaa siirtymää render() menetelmä:

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

joka antaa tämän kaavion:



Kuva tekijältä

 

Yksikön louhinta

 
 
Ja katsomaan lauseen tärkeitä kokonaisuuksia, voit siirtää 'ent’ tyylinä samassa koodissa:



Kuva kirjoittajalta - Käytin toista otsikkoa, koska yllä käyttämässämme otsikossa ei ollut kokonaisuuksia.

 

Meillä on erilaisia ​​tunnisteita eri yhteisöille, kuten päivä, jolloin päivämäärä on DATE, Glasscoatilla on GPE, joka voi olla maita/kaupunkeja/osavaltioita. Etsimme suurelta osin yrityksiä, joilla on ORG -tunniste, joka antaa meille yrityksiä, virastoja, laitoksia jne.

Pystymme nyt poimimaan kokonaisuuksia tekstistä. Aloitetaan organisaatioiden poimiminen kaikista otsikoista ORG -yksiköiden avulla.

Tämä palauttaa luettelon kaikista yrityksistä seuraavasti:



Kuva tekijältä

 

Niin helppoa, eikö?

Se on spaCyn taikuutta nyt!

Seuraava askel on etsiä kaikki nämä yritykset tietopohjasta poimiakseen oikean osakekuvan kyseiselle yritykselle ja käyttää sitten kirjastoja, kuten yahoo-finance, markkinoiden tietojen, kuten hinnan, tuoton jne.

Vaihe 3 - Nimetty entiteetin linkitys

 
 
Tämän projektin tavoitteena on oppia, mitä osakkeita markkinoilla on, ja saada niiden tiedot kojelautaan.

Meillä on yritysten nimet, mutta saadaksemme niiden kaupankäyntitiedot tarvitsemme yhtiön osakekuvauksen.

Koska otan esiin intialaisten yritysten tietoja ja uutisia, aion käyttää ulkopuolista tietokantaa Nifty 500 yritystä (CSV -tiedosto).

Etsimme jokaisen yrityksen sen pandoja käyttävien yritysten luettelosta ja keräämme sitten osakemarkkinoiden tilastot käyttämällä yahoo-rahoitus kirjasto.

Kuva tekijältä

 

Yksi asia, joka sinun pitäisi huomata tässä, on se, että olen lisännyt ”.NS” jokaisen osakesymbolin jälkeen ennen sen välittämistä Ticker luokka yfinance kirjasto. Tämä johtuu siitä, että intialaiset NSE -osakesymbolit tallennetaan .NS pääte sisään yfinance.

Ja surisevat osakkeet ilmestyisivät alla olevaan tietokehykseen:



Kuva tekijältä

 

Voila! eikö tämä ole hienoa? Tällainen yksinkertainen mutta syvällinen sovellus, joka voi osoittaa sinut oikeaan suuntaan oikeiden osakkeiden kanssa.

Nyt, jotta se olisi helpommin saavutettavissa, voimme luoda verkkosovelluksen koodistamme, jonka olemme juuri kirjoittaneet Streamlitin avulla.

Vaihe 4 - Verkkosovelluksen rakentaminen Streamlitillä

 
 
On aika siirtyä editoriin ja luoda uusi projekti ja virtuaalinen ympäristö NLP -sovellukselle.

Streamlitin käytön aloittaminen on erittäin helppoa tällaisissa esittelysovelluksissa. Varmista, että sinulla on streamlit asennettuna.

pip install Streamlit

Luodaan nyt uusi tiedosto nimeltä app.py ja aloitetaan toiminnallisen koodin kirjoittaminen sovelluksen valmistamiseksi.

Tuo kaikki tarvittavat kirjastot ylhäältä.

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

Lisää otsikko sovellukseesi:

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

Testaa sovellustasi suorittamalla streamlit run app.py päätelaitteessasi. Sen pitäisi avata sovellus selaimessasi.

Olen lisännyt lisätoimintoja tietojen keräämiseksi useista lähteistä. Nyt voit lisätä sovellukseen haluamasi RSS -syötteen URL -osoitteen, jolloin tiedot käsitellään ja trendikannat näkyvät tietokehyksessä.

Saadaksesi pääsyn koko koodikantaan voit tarkistaa arkistoni täältä:

 
GitHub - dswh/NER_News_Feed
 

Voit lisätä useita muotoiluelementtejä, erilaisia ​​tietolähteitä ja muita käsittelytapoja, jotta se olisi tehokkaampi ja hyödyllisempi.

Sovellukseni näyttää nykyisessä tilassaan bannerin kuvasta.

Jos haluat seurata minua askel askeleelta, katso, että koodin tämän sovelluksen täällä:

Seuraavat vaiheet!

 
 
Taloudellisen käyttötapauksen valitsemisen sijaan voit valita minkä tahansa muun sovelluksen. Terveydenhuolto, verkkokauppa, tutkimus ja monet muut. Kaikki toimialat edellyttävät asiakirjojen käsittelyä ja tärkeiden yksiköiden poimimista ja linkittämistä. Kokeile toista ideaa.

Yksinkertainen idea on poimia kaikki tutkimuspaperin kaikki tärkeät kokonaisuudet ja luoda sitten tietokaavio siitä käyttämällä Google -hakusovellusliittymää.

Lisäksi, jos haluat viedä osakeuutissovelluksen toiselle tasolle, voit lisätä kaupankäyntialgoritmeja myös osto- ja myyntisignaalien luomiseksi.

Kehotan sinua villiintymään mielikuvituksellasi.

Kuinka saat yhteyden minuun!

 
 
Jos pidit tästä postauksesta ja haluat nähdä lisää tällaista sisältöä, voit tilata sen uutiskirjeeni or minun YouTube-kanavani jossa jaan jatkuvasti hyödyllisiä ja nopeita projekteja, joita voi rakentaa.

Jos olet joku, joka on vasta aloittamassa ohjelmointia tai haluat perehtyä datatieteeseen tai ML: ään, voit tutustua kurssiini osoitteessa WIP Lane Academy.

Kiitos Elliot Gunnille.

 
Bio: Hirveä Tyagi on insinööri, jolla on yhdistetty kokemus verkkoteknologioista ja datatieteestä (aka full-stack data science). Hän on opastanut yli 1000 AI/Web/Data Science -hakijaa ja suunnittelee datatieteen ja ML -tekniikan oppimisraitoja. Aiemmin Harshit kehitti tietojenkäsittelyalgoritmeja Yalen, MIT: n ja UCLA: n tutkijoiden kanssa.

Alkuperäinen. Postitettu luvalla.

Related:

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

Aikaleima:

Lisää aiheesta KDnuggets