Membangun Umpan Berita Keuangan Terstruktur Menggunakan Python, SpaCy, dan Streamlit

Node Sumber: 1876513

Membangun Umpan Berita Keuangan Terstruktur Menggunakan Python, SpaCy, dan Streamlit

Memulai NLP dengan membangun aplikasi Named Entity Recognition (NER).


By Harshit Tyagi, Instruktur Ilmu Data | Mentor | YouTuber


Membangun Umpan Berita Keuangan Terstruktur Menggunakan Python, SpaCy, dan Streamlit

Salah satu aplikasi NLP yang sangat menarik dan banyak digunakan adalah Named Entity Recognition (NER).

Mendapatkan wawasan dari data mentah dan tidak terstruktur sangat penting. Mengunggah dokumen dan mendapatkan informasi penting darinya disebut temu kembali informasi.

Pengambilan informasi telah menjadi tugas/tantangan utama dalam NLP. Dan NER (atau NEL — Named Entity Linking) digunakan di beberapa domain (keuangan, obat-obatan, e-commerce, dll.) untuk tujuan pengambilan informasi.

Dalam posting tutorial ini, saya akan menunjukkan kepada Anda bagaimana Anda dapat memanfaatkan NEL untuk mengembangkan umpan berita pasar saham khusus yang mencantumkan saham yang sedang ramai di internet.

Pra-syarat

 
 
Tidak ada prasyarat seperti itu. Anda mungkin perlu mengenal python dan tugas-tugas dasar NLP seperti tokenization, penandaan POS, penguraian ketergantungan, dan lain-lain.

Saya akan membahas bagian-bagian penting secara lebih rinci, jadi bahkan jika Anda seorang pemula, Anda akan dapat memahami apa yang sedang terjadi.

Jadi, mari kita lanjutkan, ikuti dan Anda akan memiliki umpan berita stok minimal yang dapat Anda mulai teliti.

Alat/penyiapan yang Anda perlukan:

 
 

  1. Google Colab untuk pengujian awal dan eksplorasi data dan library SpaCy.
  2. Kode VS (atau editor apa pun) untuk mengkodekan aplikasi Streamlit.
  3. Sumber informasi pasar saham (berita) di mana kami akan melakukan NER dan kemudian NEL.
  4. Lingkungan python virtual (saya menggunakan conda) bersama dengan perpustakaan seperti Pandas, SpaCy, Streamlit, Streamlit-Spacy (jika Anda ingin menampilkan beberapa render SpaCy.)

Tujuan

 
 
Tujuan dari proyek ini adalah untuk mempelajari dan menerapkan Pengenalan Entitas Bernama untuk mengekstrak entitas penting (perusahaan publik dalam contoh kami) dan kemudian menghubungkan setiap entitas dengan beberapa informasi menggunakan basis pengetahuan (daftar perusahaan Nifty500).

Kami akan mendapatkan data tekstual dari RSS feed di internet, mengekstrak nama saham yang sedang ramai, dan kemudian menarik data harga pasarnya untuk menguji keaslian berita sebelum mengambil posisi apa pun di saham tersebut.


Catatan: NER mungkin bukan masalah mutakhir tetapi memiliki banyak aplikasi di industri.


Pindah ke Google Colab untuk eksperimen dan pengujian:

Langkah 1: Mengekstrak data berita saham yang sedang tren

 
 
Untuk mendapatkan beberapa berita pasar saham otentik yang andal, saya akan menggunakan Economic Times dan Kontrol Uang Umpan RSS untuk tutorial ini tetapi Anda juga dapat menggunakan/menambahkan umpan RSS negara Anda atau data Twitter/Telegram(grup) untuk membuat umpan Anda lebih informatif/akurat.

Peluangnya sangat besar. Tutorial ini harus berfungsi sebagai batu loncatan untuk menerapkan NEL untuk membangun aplikasi di domain yang berbeda memecahkan berbagai jenis masalah pencarian informasi.

Jika Anda terus melihat umpan RSS, tampilannya seperti ini:

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


 

Tujuan kami adalah untuk mendapatkan judul tekstual dari umpan RSS ini dan kemudian kami akan menggunakan SpaCy untuk mengekstrak entitas utama dari berita utama.

Judulnya ada di dalam tag XML di sini.

Pertama, kita perlu menangkap seluruh dokumen XML dan kita dapat menggunakan requests perpustakaan untuk melakukan itu. Pastikan Anda telah menginstal paket-paket ini di lingkungan runtime Anda di colab.

Anda dapat menjalankan perintah berikut untuk menginstal hampir semua paket langsung dari sel kode colab:

!pip install <package_name>

Kirim GET permintaan di tautan yang disediakan untuk menangkap dokumen XML.

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

Jalankan sel untuk memeriksa apa yang Anda dapatkan di objek respons.

Ini akan memberi Anda respons yang berhasil dengan kode HTTP 200 sebagai berikut:



Sekarang setelah Anda memiliki objek respons ini, kami dapat meneruskan kontennya ke kelas BeautifulSoup untuk mengurai dokumen XML sebagai berikut:

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

Ini akan memberi Anda semua berita utama di dalam daftar Python:



Gambar oleh penulis

 

Luar biasa, kami memiliki data tekstual dari mana kami akan mengekstrak entitas utama (yang merupakan perusahaan publik dalam hal ini) menggunakan NLP.

Saatnya untuk menempatkan NLP ke dalam tindakan.

Langkah 2: Mengekstrak entitas dari tajuk utama

 
 
Ini adalah bagian yang menarik. Kami akan menggunakan model bahasa inti pra-terlatih dari spaCy perpustakaan untuk mengekstrak entitas utama dalam judul.

Sedikit tentang spaCy dan model inti.

spaCy adalah perpustakaan NLP open-source yang memproses data tekstual dengan kecepatan super cepat. Ini adalah perpustakaan terkemuka dalam penelitian NLP yang digunakan dalam aplikasi tingkat perusahaan dalam skala besar. spaCy terkenal untuk penskalaan dengan masalah ini. Dan mendukung lebih dari 64 bahasa dan bekerja dengan baik dengan TensorFlow dan PyTorch.

Berbicara tentang model inti, spaCy memiliki dua kelas utama model bahasa yang telah dilatih sebelumnya yang dilatih pada berbagai ukuran data tekstual untuk memberi kita kesimpulan mutakhir.

  1. Model Inti — untuk tugas NLP dasar tujuan umum.
  2. Model Pemula — untuk aplikasi khusus yang memerlukan pembelajaran transfer. Kami dapat memanfaatkan bobot model yang dipelajari untuk menyempurnakan model kustom kami tanpa harus melatih model dari awal.

Karena kasus penggunaan kami adalah dasar dalam tutorial ini, kami akan tetap menggunakan en_core_web_sm pipa model inti.

Jadi, mari kita muat ini ke dalam buku catatan kita:

nlp = spacy.load("en_core_web_sm")

Catatan: Colab sudah mengunduhnya untuk kami, tetapi jika Anda mencoba menjalankannya di sistem lokal, Anda harus mengunduh modelnya terlebih dahulu menggunakan perintah berikut:

python -m spacy download en_core_web_sm

en_core_web_sm pada dasarnya adalah pipa bahasa Inggris yang dioptimalkan untuk CPU yang memiliki komponen berikut:

  • tok2vec — token ke vektor (melakukan tokenisasi pada data tekstual),
  • tagger — menambahkan metadata yang relevan ke setiap token. spaCy menggunakan beberapa model statistik untuk memprediksi part of speech (POS) dari setiap token. Selengkapnya di dokumentasi.
  • parser — parser ketergantungan menetapkan hubungan di antara token.
  • Komponen lainnya termasuk senter, ner, attribute_ruler, lemmatizer.

Sekarang, untuk menguji apa yang dapat dilakukan model ini bagi kita, saya akan memberikan satu judul utama melalui model yang diinstansiasi dan kemudian memeriksa bagian-bagian yang berbeda dari sebuah kalimat.

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

Pipeline melakukan semua tugas mulai dari tokenisasi hingga NER. Di sini kita memiliki token terlebih dahulu:



Gambar oleh penulis

 

Anda dapat melihat bagian pidato yang ditandai menggunakan pos_ atribut.



Gambar oleh penulis

 

Setiap token ditandai dengan beberapa metadata. Misalnya, Trade adalah Proper Noun, Setup adalah Noun, : adalah tanda baca, dan seterusnya. Seluruh daftar Tag diberikan di sini.

Dan kemudian, Anda dapat melihat bagaimana mereka terkait dengan melihat grafik ketergantungan menggunakan dep_ atribut:



Gambar oleh penulis

 

Di sini, Trade adalah Compound, Setup adalah Root, Nifty adalah appos(Appositional modifier). Sekali lagi, semua tag sintaks dapat ditemukan di sini.

Anda juga dapat memvisualisasikan dependensi hubungan di antara token menggunakan perpindahan berikut: render() Metode:

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

yang akan memberikan grafik ini:



Gambar oleh penulis

 

Ekstraksi entitas

 
 
Dan untuk melihat entitas penting dari kalimat tersebut, Anda dapat melewati 'ent’ sebagai gaya dalam kode yang sama:



Gambar oleh penulis — Saya menggunakan judul lain karena yang kami gunakan di atas tidak memiliki entitas apa pun.

 

Kami memiliki tag yang berbeda untuk entitas yang berbeda seperti hari memiliki DATE, Glasscoat memiliki GPE yang dapat berupa Negara/Kota/Negara Bagian. Kami terutama mencari entitas yang memiliki tag ORG yang akan memberi kami Perusahaan, agensi, institusi, dll.

Kami sekarang mampu mengekstrak entitas dari teks. Mari kita mulai mengekstrak organisasi dari semua berita utama menggunakan entitas ORG.

Ini akan mengembalikan daftar semua perusahaan sebagai berikut:



Gambar oleh penulis

 

Sangat mudah, bukan?

Itulah keajaiban spaCy sekarang!

Langkah selanjutnya adalah mencari semua perusahaan ini di basis pengetahuan untuk mengekstrak simbol saham yang tepat untuk perusahaan itu dan kemudian menggunakan perpustakaan seperti yahoo-finance untuk mengekstrak detail pasar mereka seperti harga, pengembalian, dll.

Langkah 3 — Penautan Entitas Bernama

 
 
Untuk mempelajari tentang saham apa yang sedang ramai di pasar dan mendapatkan detailnya di dasbor Anda adalah tujuan dari proyek ini.

Kami memiliki nama perusahaan tetapi untuk mendapatkan detail perdagangan mereka, kami memerlukan simbol saham perdagangan perusahaan.

Karena saya mengekstrak detail dan berita Perusahaan India, saya akan menggunakan database eksternal Bagus 500 perusahaan (file CSV).

Untuk setiap perusahaan, kami akan mencarinya di daftar perusahaan yang menggunakan panda, dan kemudian kami akan menangkap statistik pasar saham menggunakan yahoo-keuangan Perpustakaan.

Gambar oleh penulis

 

Satu hal yang harus Anda perhatikan di sini adalah saya telah menambahkan ".NS" setelah setiap simbol saham sebelum meneruskannya ke Ticker kelas dari yfinance Perpustakaan. Itu karena simbol saham NSE India disimpan dengan .NS akhiran dalam yfinance.

Dan saham yang ramai akan muncul dalam kerangka data seperti di bawah ini:



Gambar oleh penulis

 

Voila! bukankah ini hebat? Aplikasi sederhana namun mendalam yang dapat mengarahkan Anda ke arah yang benar dengan saham yang tepat.

Nah untuk membuatnya lebih mudah diakses, kita bisa membuat aplikasi web dari kode yang baru saja kita tulis menggunakan Streamlit.

Langkah 4 — Membangun aplikasi web menggunakan Streamlit

 
 
Saatnya untuk pindah ke editor dan membuat proyek baru dan lingkungan virtual untuk aplikasi NLP.

Memulai Streamlit sangat mudah untuk aplikasi data demo semacam itu. Pastikan Anda telah menginstal streamlit.

pip install Streamlit

Sekarang, mari buat file baru bernama app.py dan mulai menulis kode fungsional untuk menyiapkan aplikasi.

Impor semua perpustakaan yang diperlukan di bagian atas.

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

Tambahkan judul ke aplikasi Anda:

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

Uji aplikasi Anda dengan menjalankan streamlit run app.py di terminal Anda. Itu harus membuka aplikasi di browser web Anda.

Saya telah menambahkan beberapa fungsi tambahan untuk menangkap data dari berbagai sumber. Sekarang, Anda dapat menambahkan URL umpan RSS pilihan Anda ke dalam aplikasi dan data akan diproses dan saham yang sedang tren akan ditampilkan dalam kerangka data.

Untuk mendapatkan akses ke seluruh basis kode, Anda dapat melihat repositori saya di sini:

 
GitHub – dswh/NER_News_Feed
 

Anda dapat menambahkan beberapa elemen gaya, sumber data yang berbeda, dan jenis pemrosesan lainnya untuk membuatnya lebih efisien dan berguna.

Aplikasi saya dalam keadaan saat ini terlihat seperti gambar di spanduk.

Jika Anda ingin mengikuti saya langkah demi langkah, lihat saya kode aplikasi ini di sini:

Langkah selanjutnya!

 
 
Alih-alih memilih kasus penggunaan keuangan, Anda juga dapat memilih aplikasi lain pilihan Anda. Kesehatan, e-commerce, penelitian, dan banyak lainnya. Semua industri memerlukan dokumen untuk diproses dan entitas penting untuk diekstraksi dan dihubungkan. Cobalah ide lain.

Ide sederhananya adalah mengekstrak semua entitas penting dari makalah penelitian dan kemudian membuat grafik pengetahuannya menggunakan Google Search API.

Juga, jika Anda ingin membawa aplikasi umpan berita saham ke level lain, Anda dapat menambahkan beberapa algoritme perdagangan untuk menghasilkan sinyal beli dan jual juga.

Saya mendorong Anda untuk menjadi liar dengan imajinasi Anda.

Bagaimana Anda dapat terhubung dengan saya!

 
 
Jika Anda menyukai posting ini dan ingin melihat lebih banyak konten seperti itu, Anda dapat berlangganan buletin saya or saluran YouTube saya di mana saya akan terus berbagi proyek yang berguna dan cepat yang dapat dibangun seseorang.

Jika Anda seseorang yang baru memulai pemrograman atau ingin masuk ke ilmu data atau ML, Anda dapat melihat kursus saya di Akademi Jalur WIP.

Terima kasih kepada Elliot Gunn.

 
Bio: Harshit Tyagi adalah seorang insinyur dengan pengalaman gabungan dalam teknologi web dan ilmu data (alias ilmu data tumpukan penuh). Dia telah membimbing lebih dari 1000 calon AI/Web/Data Science, dan merancang jalur pembelajaran teknik data dan ML. Sebelumnya, Harshit mengembangkan algoritma pemrosesan data dengan ilmuwan riset di Yale, MIT, dan UCLA.

Original. Diposting ulang dengan izin.

Terkait:

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

Stempel Waktu:

Lebih dari KDnugget