Python, SpaCy ve Streamlit Kullanarak Yapılandırılmış Bir Finansal Haber Kaynağı Oluşturma

Kaynak Düğüm: 1876513

Python, SpaCy ve Streamlit Kullanarak Yapılandırılmış Bir Finansal Haber Kaynağı Oluşturma

Adlandırılmış Varlık Tanıma(NER) uygulaması oluşturarak NLP'yi kullanmaya başlama.


By harshit tyagi, Veri Bilimi Eğitmeni | Mentor | YouTuber


Python, SpaCy ve Streamlit Kullanarak Yapılandırılmış Bir Finansal Haber Kaynağı Oluşturma

NLP'nin çok ilginç ve yaygın olarak kullanılan uygulamalarından biri Named Entity Recognition(NER)'dir.

Ham ve yapılandırılmamış verilerden içgörü elde etmek hayati önem taşımaktadır. Bir belgeyi karşıya yüklemeye ve ondan önemli bilgi parçalarını almaya bilgi alma denir.

Bilgi alımı, NLP'de önemli bir görev/zorluk olmuştur. Ve NER(veya NEL — Adlandırılmış Varlık Bağlantısı) çeşitli alanlarda (finans, ilaçlar, e-ticaret, vb.) bilgi alma amacıyla kullanılır.

Bu eğitim yazısında, internette hareketli hisse senetlerini listeleyen özel bir borsa haber beslemesi geliştirmek için NEL'den nasıl yararlanabileceğinizi göstereceğim.

Ön koşul

 
 
Böyle bir ön koşul yoktur. Python ve tokenizasyon, POS etiketleme, bağımlılık ayrıştırma ve benzeri gibi NLP'nin temel görevlerine biraz aşina olmanız gerekebilir.

Önemli kısımları daha ayrıntılı olarak ele alacağım, böylece yeni başlayan biri olsanız bile, neler olup bittiğini anlayabilirsiniz.

Öyleyse devam edelim, takip edin ve araştırmaya başlayabileceğiniz minimum bir hisse senedi haber akışına sahip olacaksınız.

İhtiyacınız olacak araçlar/kurulum:

 
 

  1. Verilerin ve SpaCy kitaplığının ilk testi ve keşfi için Google Colab.
  2. Streamlit uygulamasını kodlamak için VS Kodu (veya herhangi bir düzenleyici).
  3. NER ve daha sonra NEL gerçekleştireceğimiz borsa bilgilerinin (haberlerin) kaynağı.
  4. Pandas, SpaCy, Streamlit, Streamlit-Spacy gibi kitaplıklarla birlikte sanal bir python ortamı (conda kullanıyorum) (bazı SpaCy işlemelerini göstermek istiyorsanız.)

Nesnel

 
 
Bu projenin amacı, önemli varlıkları (örneğimizde halka açık şirketler) çıkarmak için Adlandırılmış Varlık Tanıma'yı öğrenmek ve uygulamak ve ardından bir bilgi tabanını (Nifty500 şirket listesi) kullanarak her varlığı bazı bilgilerle ilişkilendirmektir.

İnternetteki RSS beslemelerinden metinsel verileri alacağız, hareketli hisse senetlerinin isimlerini çıkaracağız ve ardından bu hisse senetlerinde herhangi bir pozisyon almadan önce haberlerin gerçekliğini test etmek için piyasa fiyat verilerini çekeceğiz.


Not: NER son teknoloji bir problem olmayabilir, ancak endüstride birçok uygulaması vardır.


Deneme ve test için Google Colab'a geçiş:

Adım 1: Trend olan hisse senedi haber verilerini çıkarma

 
 
Bazı güvenilir otantik borsa haberleri almak için Ekonomik Zamanlar ve Para Kontrolü Bu eğitim için RSS beslemeleri, ancak beslemenizi daha bilgilendirici/doğru hale getirmek için ülkenizin RSS beslemelerini veya Twitter/Telegram(gruplar) verilerini de kullanabilir/ekleyebilirsiniz.

Fırsatlar çok büyük. Bu öğretici, farklı türlerde bilgi alma sorunlarını çözen farklı etki alanlarında uygulamalar oluşturmak için NEL'yi uygulamak için bir adım taşı olarak hizmet etmelidir.

RSS beslemesine bakmaya devam ederseniz, şöyle görünür:

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


 

Amacımız bu RSS beslemesinden metinsel başlıkları almak ve ardından ana varlıkları başlıklardan çıkarmak için SpaCy'yi kullanacağız.

Başlıklar içinde mevcut XML etiketi burada.

İlk olarak, tüm XML belgesini yakalamamız gerekiyor ve bunu kullanabiliriz. requests Bunu yapmak için kütüphane. Colab'deki çalışma zamanı ortamınızda bu paketlerin kurulu olduğundan emin olun.

Hemen hemen her paketi doğrudan bir işbirliğinin kod hücresinden yüklemek için aşağıdaki komutu çalıştırabilirsiniz:

!pip install <package_name>

Gönder GET XML belgesini yakalamak için sağlanan bağlantıdaki istek.

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

Yanıt nesnesinde ne elde ettiğinizi kontrol etmek için hücreyi çalıştırın.

Aşağıdaki gibi HTTP kodu 200 ile size başarılı bir yanıt vermelidir:



Artık bu yanıt nesnesine sahip olduğunuza göre, XML belgesini aşağıdaki gibi ayrıştırmak için içeriğini BeautifulSoup sınıfına aktarabiliriz:

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

Bu size bir Python listesinin içindeki tüm başlıkları vermelidir:



Yazara göre resim

 

Müthiş, NLP kullanarak ana varlıkları (bu durumda halka açık şirketler olan) çıkaracağımız metinsel verilere sahibiz.

NLP'yi harekete geçirmenin zamanı geldi.

2. Adım: Başlıklardan varlıkları çıkarma

 
 
Bu heyecan verici kısım. bir kullanacağız önceden eğitilmiş çekirdek dil modeli itibaren spaCy bir başlıktaki ana varlıkları çıkarmak için kitaplık.

SpaCy ve çekirdek modeller hakkında biraz.

spacy metinsel verileri süper hızlı bir şekilde işleyen açık kaynaklı bir NLP kitaplığıdır. Ölçekte kurumsal düzeyde uygulamalarda kullanılan NLP araştırmalarında lider kütüphanedir. spaCy, sorunu ölçeklendirmesiyle ünlüdür. 64'ten fazla dili destekler ve hem TensorFlow hem de PyTorch ile iyi çalışır.

Çekirdek modellerden bahsedecek olursak, spaCy bize en gelişmiş çıkarımları sağlamak için farklı boyutlardaki metin verileri üzerinde eğitilmiş iki ana önceden eğitilmiş dil modeli sınıfına sahiptir.

  1. Çekirdek Modeller — genel amaçlı temel NLP görevleri için.
  2. Başlangıç ​​Modelleri — transfer öğrenimi gerektiren niş uygulamalar için. Modeli sıfırdan eğitmek zorunda kalmadan özel modellerimizde ince ayar yapmak için modelin öğrenilen ağırlıklarından yararlanabiliriz.

Bu eğitimde kullanım durumumuz temel olduğundan, en_core_web_sm çekirdek model boru hattı.

O halde bunu defterimize yükleyelim:

nlp = spacy.load("en_core_web_sm")

Not: Colab bunu bizim için zaten indirdi, ancak yerel sisteminizde çalıştırmayı denerseniz, önce aşağıdaki komutu kullanarak modeli indirmeniz gerekir:

python -m spacy download en_core_web_sm

en_core_web_sm temel olarak aşağıdaki bileşenlere sahip CPU için optimize edilmiş bir İngilizce işlem hattıdır:

  • tok2vec — token to vectors(metinsel veriler üzerinde tokenleştirme gerçekleştirir),
  • etiketleyici — her simgeye ilgili meta veriler ekler. spaCy, her jetonun konuşma kısmını (POS) tahmin etmek için bazı istatistiksel modellerden yararlanır. Daha fazlası belgeleme.
  • ayrıştırıcı — bağımlılık ayrıştırıcısı, belirteçler arasında ilişkiler kurar.
  • Diğer bileşenler, gönderici, ner, öznitelik_ruler, lemmatizer içerir.

Şimdi, bu modelin bizim için neler yapabileceğini test etmek için, somutlaştırılmış modelden tek bir başlık geçireceğim ve ardından bir cümlenin farklı kısımlarını kontrol edeceğim.

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

İşlem hattı, belirteçleştirmeden NER'ye kadar tüm görevleri gerçekleştirir. Burada önce belirteçlere sahibiz:



Yazara göre resim

 

kullanarak konuşmanın etiketli kısmına bakabilirsiniz. pos_ özniteliği.



Yazara göre resim

 

Her belirteç bazı meta verilerle etiketlenir. Örneğin, Ticaret Özel Bir İsimdir, Kurulum bir İsimdir, : noktalama işaretleri, vb. Tüm Etiketler listesi verilir okuyun.

Ardından, bağımlılık grafiğine bakarak bunların nasıl ilişkili olduğuna bakabilirsiniz. dep_ özellik:



Yazara göre resim

 

Burada Ticaret Bileşiktir, Kurulum Köktür, Nifty appos'tur (Appozisyonel değiştirici). Yine, tüm sözdizimsel etiketler bulunabilir okuyun.

Aşağıdaki gösterimi kullanarak belirteçler arasındaki ilişki bağımlılıklarını da görselleştirebilirsiniz. render() yöntem:

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

bu grafiği verecek olan:



Yazara göre resim

 

varlık çıkarma

 
 
Ve cümlenin önemli varlıklarına bakmak için 'ent’ aynı kodda stil olarak:



Yazarın resmi — Yukarıda kullandığımız başlığın herhangi bir varlığı olmadığı için başka bir başlık kullandım.

 

Günün TARİH, Glasscoat'ın Ülkeler/Şehirler/Eyalet olabilen GPE'si gibi farklı varlıklar için farklı etiketlerimiz var. Bize Şirketler, ajanslar, kurumlar vb. verecek ORG etiketine sahip varlıkları arıyoruz.

Artık metinden varlıkları çıkarabiliyoruz. ORG varlıklarını kullanarak tüm manşetlerden kuruluşları çıkarmaya başlayalım.

Bu, tüm şirketlerin bir listesini aşağıdaki gibi döndürür:



Yazara göre resim

 

Çok kolay, değil mi?

İşte şimdi spaCy'nin büyüsü!

Bir sonraki adım, o şirket için doğru hisse senedi sembolünü çıkarmak için tüm bu şirketleri bir bilgi tabanında aramak ve ardından fiyat, getiri vb. gibi pazar ayrıntılarını çıkarmak için yahoo-finance gibi kütüphaneleri kullanmaktır.

Adım 3 — Adlandırılmış Varlık Bağlantısı

 
 
Bu projenin amacı, piyasada hangi hisse senetlerinin hareketli olduğunu öğrenmek ve bunların ayrıntılarını gösterge tablonuzda görmektir.

Elimizde şirket isimleri var, ancak işlem detaylarını almak için şirketin hisse senedi sembolüne ihtiyacımız var.

Hint Şirketlerinin ayrıntılarını ve haberlerini çıkardığım için harici bir veri tabanı kullanacağım. Nifty 500 şirket (bir CSV dosyası).

Her şirket için, onu panda kullanan şirketler listesinde arayacağız ve ardından aşağıdakileri kullanarak borsa istatistiklerini yakalayacağız. Yahoo Finans kütüphane.

Yazara göre resim

 

Burada dikkat etmeniz gereken bir şey, her hisse senedi sembolünden sonra, onu borsaya geçirmeden önce bir “.NS” eklediğimdir. Ticker sınıfı yfinance kütüphane. Bunun nedeni, Hint NSE hisse senedi sembollerinin bir .NS son ek yfinance.

Ve vızıldayan hisse senetleri aşağıdaki gibi bir veri çerçevesinde ortaya çıkacaktır:



Yazara göre resim

 

İşte! bu harika değil mi? Doğru hisse senetleri ile sizi doğru yöne yönlendirebilecek kadar basit ama derin bir uygulama.

Şimdi daha erişilebilir hale getirmek için, Streamlit kullanarak az önce yazdığımız koddan bir web uygulaması oluşturabiliriz.

Adım 4 — Streamlit kullanarak bir web uygulaması oluşturma

 
 
Bir editöre geçmenin ve NLP uygulaması için yeni bir proje ve sanal ortam yaratmanın zamanı geldi.

Streamlit'i kullanmaya başlamak, bu tür demo veri uygulamaları için son derece kolaydır. Streamlit'in kurulu olduğundan emin olun.

pip install Streamlit

Şimdi app.py adında yeni bir dosya oluşturalım ve uygulamayı hazır hale getirmek için fonksiyonel kod yazmaya başlayalım.

Gerekli tüm kitaplıkları en üstte içe aktarın.

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

Uygulamanıza bir başlık ekleyin:

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

Çalıştırarak uygulamanızı test edin streamlit run app.py terminalinizde. Web tarayıcınızda bir uygulama açmalıdır.

Birden çok kaynaktan veri yakalamak için bazı ekstra işlevler ekledim. Artık uygulamaya istediğiniz bir RSS besleme URL'sini ekleyebilirsiniz ve veriler işlenecek ve trend olan hisse senetleri bir veri çerçevesinde görüntülenecektir.

Tüm kod tabanına erişmek için depoma buradan göz atabilirsiniz:

 
GitHub – dswh/NER_News_Feed
 

Daha verimli ve kullanışlı hale getirmek için birden çok stil öğesi, farklı veri kaynağı ve diğer işleme türleri ekleyebilirsiniz.

Uygulamam şu anki durumunda banner'daki resme benziyor.

Beni adım adım takip etmek istiyorsanız, bu uygulamayı burada kodladığımı izleyin:

Sonraki adımlar!

 
 
Bir finansal kullanım senaryosu seçmek yerine, istediğiniz başka bir uygulamayı da seçebilirsiniz. Sağlık, e-ticaret, araştırma ve diğerleri. Tüm endüstriler belgelerin işlenmesini ve önemli varlıkların çıkarılmasını ve bağlanmasını gerektirir. Başka bir fikir deneyin.

Basit bir fikir, bir araştırma makalesinin tüm önemli varlıklarını çıkarmak ve ardından Google Arama API'sını kullanarak bir bilgi grafiği oluşturmaktır.

Ayrıca, hisse senedi haber akışı uygulamasını başka bir düzeye taşımak istiyorsanız, alım satım sinyalleri oluşturmak için bazı ticaret algoritmaları da ekleyebilirsiniz.

Seni hayal gücünle vahşi olmaya teşvik ediyorum.

Benimle nasıl bağlantı kurabilirsin!

 
 
Bu gönderiyi beğendiyseniz ve bu tür içeriklerin daha fazlasını görmek istiyorsanız, abone olabilirsiniz. bültenim or benim YouTube kanalım İnsanın inşa edebileceği çok faydalı ve hızlı projeleri paylaşmaya devam edeceğim.

Programlamaya yeni başlayan biriyseniz veya veri bilimi veya makine öğrenimi alanına girmek istiyorsanız, adresindeki kursuma göz atabilirsiniz. WIP Lane Akademisi.

Elliot Gunn'a teşekkürler.

 
Bio: harshit tyagi web teknolojileri ve veri biliminde (diğer adıyla full-stack veri bilimi) birleştirilmiş deneyime sahip bir mühendistir. 1000'den fazla AI/Web/Data Science adayına danışmanlık yaptı ve veri bilimi ve ML mühendisliği öğrenme yolları tasarlıyor. Daha önce Harshit, Yale, MIT ve UCLA'daki araştırmacı bilim adamları ile veri işleme algoritmaları geliştirdi.

orijinal. İzinle yeniden yayınlandı.

İlgili:

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

Zaman Damgası:

Den fazla KDNuggets