ساخت یک خبرنامه مالی ساختاریافته با استفاده از Python، SpaCy و Streamlit

گره منبع: 1876513

ساخت یک خبرنامه مالی ساختاریافته با استفاده از Python، SpaCy و Streamlit

شروع کار با NLP با ساختن یک اپلیکیشن شناسایی نهاد نامگذاری شده (NER).


By هارشیت تیاگی, مدرس علم داده | مربی | یوتیوبر


ساخت یک خبرنامه مالی ساختاریافته با استفاده از Python، SpaCy و Streamlit

یکی از کاربردهای بسیار جالب و پرکاربرد NLP، شناسایی نام نهاد (NER) است.

دریافت بینش از داده های خام و بدون ساختار از اهمیت حیاتی برخوردار است. آپلود یک سند و دریافت اطلاعات مهم از آن را بازیابی اطلاعات می نامند.

بازیابی اطلاعات یک کار/چالش بزرگ در NLP بوده است. و NER (یا NEL - پیوند نهاد نامگذاری شده) در چندین حوزه (مالی، داروها، تجارت الکترونیک و غیره) برای اهداف بازیابی اطلاعات استفاده می شود.

در این پست آموزشی، من به شما نشان خواهم داد که چگونه می توانید از NEL برای ایجاد یک فید اخبار بازار سهام سفارشی استفاده کنید که سهام پرهیاهوی اینترنت را فهرست می کند.

پیش نیازها

 
 
چنین پیش نیازی وجود ندارد. ممکن است لازم باشد با پایتون و وظایف اساسی NLP مانند توکن سازی، برچسب گذاری POS، تجزیه وابستگی و غیره آشنایی داشته باشید.

من بخش‌های مهم را با جزئیات بیشتری پوشش می‌دهم، بنابراین حتی اگر کاملاً مبتدی هستید، می‌توانید سر خود را در مورد آنچه در حال وقوع است بپیچید.

بنابراین، بیایید آن را ادامه دهیم، دنبال کنید و یک فید اخبار سهام حداقلی خواهید داشت که می توانید شروع به تحقیق کنید.

ابزار/تنظیماتی که نیاز دارید:

 
 

  1. Google Colab برای آزمایش و کاوش اولیه داده ها و کتابخانه SpaCy.
  2. VS Code (یا هر ویرایشگر) برای کدگذاری برنامه Streamlit.
  3. منبع اطلاعات بازار سهام (اخبار) که در آن NER و بعداً NEL را اجرا خواهیم کرد.
  4. یک محیط مجازی پایتون (من از conda استفاده می کنم) به همراه کتابخانه هایی مانند Pandas، SpaCy، Streamlit، Streamlit-Spacy (اگر می خواهید چند رندر SpaCy را نشان دهید.)

هدف

 
 
هدف از این پروژه یادگیری و به کارگیری Named Entity Recognition برای استخراج موجودیت های مهم (شرکت های سهامی عام در مثال ما) و سپس پیوند دادن هر موجودیت با برخی اطلاعات با استفاده از پایگاه دانش (لیست شرکت های Nifty500) است.

ما داده‌های متنی را از فیدهای RSS در اینترنت دریافت می‌کنیم، نام سهام‌های پرهیاهو را استخراج می‌کنیم، و سپس داده‌های قیمت بازار آنها را برای آزمایش صحت اخبار قبل از گرفتن هر موقعیتی در آن سهام، استخراج می‌کنیم.


توجه: NER ممکن است یک مشکل پیشرفته نباشد اما کاربردهای زیادی در صنعت دارد.


رفتن به Google Colab برای آزمایش و آزمایش:

مرحله 1: استخراج داده های اخبار سهام روند

 
 
برای دریافت برخی اخبار معتبر معتبر بازار سهام، از آن استفاده خواهم کرد بار اقتصادی و کنترل پول فید RSS برای این آموزش است، اما می‌توانید از فیدهای RSS کشورتان یا داده‌های توییتر/تلگرام (گروه‌ها) استفاده/اضافه کنید تا فید خود را آموزنده‌تر/دقیق‌تر کنید.

فرصت ها بسیار زیاد است. این آموزش باید به‌عنوان پله‌ای برای اعمال NEL برای ساخت برنامه‌ها در حوزه‌های مختلف برای حل انواع مختلف مشکلات بازیابی اطلاعات باشد.

اگر به فید RSS نگاه کنید، چیزی شبیه به این است:

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


 

هدف ما دریافت عناوین متنی از این فید RSS است و سپس از SpaCy برای استخراج موجودیت های اصلی از سرفصل ها استفاده می کنیم.

سرفصل ها در داخل هستند برچسب XML در اینجا.

ابتدا باید کل سند XML را ضبط کنیم و می توانیم از آن استفاده کنیم requests کتابخانه برای انجام این کار مطمئن شوید که این بسته ها را در محیط زمان اجرا خود در colab نصب کرده اید.

می توانید دستور زیر را برای نصب تقریباً هر بسته ای مستقیماً از سلول کد colab اجرا کنید:

!pip install <package_name>

بفرست یک GET در پیوند ارائه شده برای گرفتن سند XML درخواست کنید.

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

سلول را اجرا کنید تا آنچه را که در شی پاسخ دریافت می کنید بررسی کنید.

باید با کد HTTP 200 به صورت زیر به شما پاسخ موفقیت آمیزی بدهد:



اکنون که این شی پاسخ را دارید، می‌توانیم محتوای آن را به کلاس BeautifulSoup ارسال کنیم تا سند XML را به صورت زیر تجزیه کند:

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

این باید تمام سرفصل های داخل لیست پایتون را به شما بدهد:



تصویر توسط نویسنده

 

عالی است، ما داده های متنی را داریم که از آن ها موجودیت های اصلی (که در این مورد شرکت های سهامی عام هستند) را با استفاده از NLP استخراج می کنیم.

زمان آن رسیده است که NLP را وارد عمل کنید.

مرحله 2: استخراج موجودیت ها از سرفصل ها

 
 
این قسمت هیجان انگیز است. ما از a استفاده خواهیم کرد مدل زبان اصلی از پیش آموزش دیده از spaCy کتابخانه برای استخراج موجودیت های اصلی در یک عنوان.

کمی در مورد spaCy و مدل های اصلی.

فضایی یک کتابخانه NLP منبع باز است که داده های متنی را با سرعت فوق العاده سریع پردازش می کند. این کتابخانه پیشرو در تحقیقات NLP است که در برنامه های کاربردی در سطح سازمانی در مقیاس مورد استفاده قرار می گیرد. spaCy برای مقیاس‌بندی با مشکل شناخته شده است. و بیش از 64 زبان را پشتیبانی می کند و با TensorFlow و PyTorch به خوبی کار می کند.

در مورد مدل‌های اصلی، spaCy دارای دو دسته اصلی از مدل‌های زبانی از پیش آموزش‌دیده است که در اندازه‌های مختلف داده‌های متنی آموزش داده شده‌اند تا استنتاج‌های پیشرفته‌ای را به ما ارائه دهند.

  1. مدل‌های اصلی - برای وظایف عمومی NLP.
  2. مدل های شروع - برای برنامه های کاربردی که نیاز به یادگیری انتقال دارند. ما می‌توانیم از وزن‌های آموخته‌شده مدل برای تنظیم دقیق مدل‌های سفارشی خود بدون نیاز به آموزش مدل از ابتدا استفاده کنیم.

از آنجایی که مورد استفاده ما در این آموزش اساسی است، ما به آن پایبند هستیم en_core_web_sm خط لوله مدل اصلی

بنابراین، اجازه دهید این را در نوت بوک خود بارگذاری کنیم:

nlp = spacy.load("en_core_web_sm")

توجه داشته باشید: Colab قبلاً این را برای ما دانلود کرده است، اما اگر سعی کنید آن را در سیستم محلی خود اجرا کنید، ابتدا باید مدل را با استفاده از دستور زیر دانلود کنید:

python -m spacy download en_core_web_sm

en_core_web_sm اساساً یک خط لوله انگلیسی است که برای CPU بهینه شده است که دارای اجزای زیر است:

  • tok2vec - توکن به بردارها (توکن سازی را روی داده های متنی انجام می دهد)
  • برچسب‌گذار - ابرداده مربوطه را به هر توکن اضافه می‌کند. spaCy از برخی مدل‌های آماری برای پیش‌بینی بخشی از گفتار (POS) هر نشانه استفاده می‌کند. بیشتر در مستندات.
  • تجزیه کننده - تجزیه کننده وابستگی روابط بین توکن ها را ایجاد می کند.
  • سایر مولفه ها عبارتند از: فرستنده، ner، ویژگی_ruler، lemmatizer.

اکنون، برای آزمایش اینکه این مدل چه کاری می تواند برای ما انجام دهد، یک تیتر را از مدل نمونه سازی شده عبور می دهم و سپس قسمت های مختلف یک جمله را بررسی می کنم.

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

خط لوله تمام وظایف را از توکن سازی تا NER انجام می دهد. در اینجا ما ابتدا نشانه ها را داریم:



تصویر توسط نویسنده

 

شما می توانید به قسمت برچسب گذاری شده گفتار با استفاده از pos_ ویژگی.



تصویر توسط نویسنده

 

هر توکن با برخی ابرداده برچسب گذاری شده است. برای مثال، Trade یک اسم مناسب است، Setup یک اسم است، : نقطه گذاری است، و غیره، و غیره. کل لیست برچسب ها داده شده است اینجا کلیک نمایید.

و سپس، می‌توانید با استفاده از نمودار وابستگی به نحوه ارتباط آنها نگاه کنید dep_ صفت:



تصویر توسط نویسنده

 

در اینجا، Trade یک ترکیب است، Setup ریشه است، Nifty appos است (اصلاح کننده Appositional). باز هم، تمام تگ های نحوی را می توان یافت اینجا کلیک نمایید.

همچنین می‌توانید وابستگی‌های رابطه بین توکن‌ها را با استفاده از دیسپلی زیر تجسم کنید render() روش:

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

که این نمودار را نشان می دهد:



تصویر توسط نویسنده

 

استخراج موجودیت

 
 
و برای نگاه کردن به نهادهای مهم جمله می توانید بگذرید 'ent’ به عنوان سبک در همان کد:



تصویر بر اساس نویسنده - من از عنوان دیگری استفاده کردم زیرا عنوانی که در بالا استفاده کردیم هیچ موجودیتی نداشت.

 

ما برچسب های مختلفی برای نهادهای مختلف داریم، مانند روز دارای DATE، Glasscoat دارای GPE است که می تواند کشورها / شهرها / ایالت ها باشد. ما عمدتاً به دنبال نهادهایی هستیم که دارای برچسب ORG هستند که به ما شرکت ها، آژانس ها، مؤسسات و غیره می دهند.

اکنون می‌توانیم موجودیت‌ها را از متن استخراج کنیم. بیایید به استخراج سازمان ها از همه سرفصل ها با استفاده از نهادهای ORG بپردازیم.

با این کار لیستی از تمام شرکت ها به شرح زیر برمی گردد:



تصویر توسط نویسنده

 

به همین راحتی، درست است؟

این جادوی SpaCy در حال حاضر است!

گام بعدی این است که همه این شرکت ها را در یک پایگاه دانش جستجو کنید تا نماد سهام مناسب آن شرکت را استخراج کنید و سپس از کتابخانه هایی مانند yahoo-finance برای استخراج جزئیات بازار آنها مانند قیمت، بازده و غیره استفاده کنید.

مرحله 3 - پیوند نهاد با نام

 
 
هدف این پروژه اطلاع از سهام در بازار و دریافت جزئیات آنها در داشبورد است.

ما نام شرکت ها را داریم، اما برای دریافت جزئیات معاملاتی آنها، به نماد معاملاتی سهام شرکت نیاز داریم.

از آنجایی که من جزئیات و اخبار شرکت های هندی را استخراج می کنم، قصد دارم از پایگاه داده خارجی استفاده کنم 500 شرکت خوب (یک فایل CSV).

برای هر شرکتی، آن را در لیست شرکت‌هایی که از پاندا استفاده می‌کنند، جستجو می‌کنیم و سپس آمار بازار سهام را با استفاده از Yahoo-Finance کتابخانه

تصویر توسط نویسنده

 

نکته ای که در اینجا باید به آن توجه کنید این است که من یک ".NS" را بعد از هر نماد سهام قبل از ارسال آن به نماد اضافه کرده ام. Ticker کلاس از yfinance کتابخانه به این دلیل است که نمادهای سهام NSE هند با یک ذخیره می شوند .NS پسوند در yfinance.

و سهام پرهیاهو در قالب داده ای مانند زیر ظاهر می شود:



تصویر توسط نویسنده

 

وویلا! این عالی نیست؟ یک برنامه ساده و در عین حال عمیق که می تواند شما را در مسیر درست با سهام مناسب راهنمایی کند.

اکنون برای دسترسی بیشتر به آن، می‌توانیم یک برنامه وب از کدی که به تازگی با استفاده از Streamlit نوشته‌ایم ایجاد کنیم.

مرحله 4 - ساخت یک برنامه وب با استفاده از Streamlit

 
 
وقت آن است که به ویرایشگر بروید و یک پروژه و محیط مجازی جدید برای برنامه NLP ایجاد کنید.

شروع کار با Streamlit برای چنین برنامه های داده آزمایشی بسیار آسان است. مطمئن شوید که streamlit را نصب کرده اید.

pip install Streamlit

حال، بیایید یک فایل جدید به نام app.py ایجاد کنیم و شروع به نوشتن کد عملکردی کنیم تا برنامه آماده شود.

تمام کتابخانه های مورد نیاز را در بالا وارد کنید.

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

عنوانی را به برنامه خود اضافه کنید:

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

برنامه خود را با اجرا تست کنید streamlit run app.py در ترمینال شما باید یک برنامه را در مرورگر وب شما باز کند.

من برخی از عملکردهای اضافی را برای گرفتن داده ها از چندین منبع اضافه کرده ام. اکنون، می‌توانید URL فید RSS انتخابی خود را به برنامه اضافه کنید و داده‌ها پردازش می‌شوند و سهام پرطرفدار در یک دیتافریم نمایش داده می‌شوند.

برای دسترسی به کل پایه کد، می توانید مخزن من را در اینجا بررسی کنید:

 
GitHub – dswh/NER_News_Feed
 

می توانید چندین عنصر سبک، منابع داده های مختلف و انواع دیگر پردازش را اضافه کنید تا کارآمدتر و مفیدتر شود.

برنامه من در وضعیت فعلی خود مانند تصویر موجود در بنر است.

اگر می خواهید من را به صورت گام به گام دنبال کنید، کد برنامه را در اینجا مشاهده کنید:

مراحل بعدی!

 
 
به جای انتخاب یک مورد استفاده مالی، می توانید هر برنامه دیگری را که انتخاب می کنید نیز انتخاب کنید. مراقبت های بهداشتی، تجارت الکترونیک، تحقیقات و بسیاری دیگر. همه صنایع نیازمند پردازش مدارک و استخراج و پیوند نهادهای مهم هستند. ایده دیگری را امتحان کنید.

یک ایده ساده استخراج تمام موجودیت های مهم یک مقاله تحقیقاتی و سپس ایجاد یک نمودار دانش از آن با استفاده از Google Search API است.

همچنین، اگر می‌خواهید اپلیکیشن فید اخبار سهام را به سطح دیگری ببرید، می‌توانید برخی از الگوریتم‌های معاملاتی را برای تولید سیگنال‌های خرید و فروش نیز اضافه کنید.

من شما را تشویق می کنم که با تخیل خود وحشی شوید.

چگونه می توانید با من ارتباط برقرار کنید!

 
 
اگر این پست را دوست داشتید و مایلید بیشتر از این مطالب را ببینید، می توانید مشترک شوید خبرنامه من or کانال یوتیوب من جایی که من به اشتراک گذاری چنین پروژه های مفید و سریعی که فرد بتواند بسازد، ادامه خواهم داد.

اگر شما فردی هستید که به تازگی با برنامه نویسی شروع کرده اید یا می خواهید وارد علم داده یا ML شوید، می توانید دوره من را در آکادمی WIP Lane.

با تشکر از الیوت گان.

 
بیوگرافی: هارشیت تیاگی یک مهندس با تجربه ادغام شده در فن آوری های وب و علم داده (با نام مستعار علم داده کامل). او بیش از 1000 مشتاق علوم AI/Web/Data را راهنمایی کرده است و در حال طراحی مسیرهای یادگیری علم داده و مهندسی ML است. پیش از این، هارشیت الگوریتم‌های پردازش داده‌ها را با دانشمندان محقق در Yale، MIT و UCLA توسعه داده بود.

اصلی. مجدداً با اجازه دوباره ارسال شد.

مرتبط:

منبع: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

تمبر زمان:

بیشتر از kdnuggets