إنشاء موجز إخباري مالي منظم باستخدام Python و SpaCy و Streamlit

عقدة المصدر: 1876513

إنشاء موجز إخباري مالي منظم باستخدام Python و SpaCy و Streamlit

الوسوم (تاج): تمويل, NLP, بايثون, سبا, انسيابي

الشروع في استخدام البرمجة اللغوية العصبية (NLP) من خلال إنشاء تطبيق التعرف على الكيانات المسماة (NER).


By هارشيت تياجي، مدرس علوم البيانات | مينتور | اليوتيوب


إنشاء موجز إخباري مالي منظم باستخدام Python و SpaCy و Streamlit

يعد التعرف على الكيانات المسماة (NER) أحد التطبيقات الممتعة والمستخدمة على نطاق واسع في البرمجة اللغوية العصبية.

الحصول على رؤى من البيانات الخام وغير المهيكلة له أهمية حيوية. يُطلق على تحميل مستند والحصول على أجزاء المعلومات المهمة منه اسم استرداد المعلومات.

كان استرجاع المعلومات مهمة / تحديًا رئيسيًا في البرمجة اللغوية العصبية. ويستخدم NER (أو NEL - ربط الكيان المحدد) في عدة مجالات (التمويل ، الأدوية ، التجارة الإلكترونية ، إلخ) لأغراض استرجاع المعلومات.

في هذا المنشور التعليمي ، سأوضح لك كيف يمكنك الاستفادة من NEL لتطوير موجز أخبار مخصص لسوق الأسهم يسرد الأسهم الصاخبة على الإنترنت.

الشروط المسبقة

 
 
لا توجد مثل هذه المتطلبات المسبقة على هذا النحو. قد تحتاج إلى بعض الإلمام ببيثون والمهام الأساسية في البرمجة اللغوية العصبية مثل الترميز ، وعلامات نقاط البيع ، وتحليل التبعية ، وما إلى ذلك.

سأغطي الأجزاء المهمة بمزيد من التفصيل ، لذا حتى لو كنت مبتدئًا تمامًا ، فستتمكن من فهم ما يحدث.

لذا ، دعنا نواصل الأمر ، تابع معنا وستحصل على الحد الأدنى من موجز أخبار الأسهم الذي يمكنك البدء في البحث عنه.

الأدوات / الإعداد الذي ستحتاجه:

 
 

  1. Google Colab للاختبار الأولي واستكشاف البيانات ومكتبة SpaCy.
  2. VS Code (أو أي محرر) لترميز تطبيق Streamlit.
  3. مصدر معلومات سوق الأوراق المالية (الأخبار) التي سنقوم من خلالها بتنفيذ NER ولاحقًا NEL.
  4. بيئة بيثون افتراضية (أنا أستخدم conda) جنبًا إلى جنب مع مكتبات مثل Pandas و SpaCy و Streamlit و Streamlit-Spacy (إذا كنت تريد إظهار بعض عروض SpaCy.)

هدف

 
 
الهدف من هذا المشروع هو تعلم وتطبيق التعرف على الكيانات المسماة لاستخراج الكيانات المهمة (الشركات المتداولة علنًا في مثالنا) ثم ربط كل كيان ببعض المعلومات باستخدام قاعدة المعرفة (قائمة شركات Nifty500).

سنحصل على البيانات النصية من موجزات RSS على الإنترنت ، ونستخرج أسماء الأسهم الصاخبة ، ثم نسحب بيانات أسعار السوق الخاصة بهم لاختبار صحة الأخبار قبل اتخاذ أي مركز في تلك الأسهم.


ملاحظة: قد لا تكون NER مشكلة حديثة ولكن لها العديد من التطبيقات في الصناعة.


الانتقال إلى Google Colab للتجريب والاختبار:

الخطوة 1: استخراج بيانات أخبار الأسهم المتداولة

 
 
للحصول على بعض أخبار سوق الأسهم الموثوقة الموثوقة ، سأستخدمها الاقتصادية تايمز و  مراقبة الأموال خلاصات RSS لهذا البرنامج التعليمي ولكن يمكنك أيضًا استخدام / إضافة خلاصات RSS لبلدك أو بيانات Twitter / Telegram (مجموعات) لجعل خلاصتك أكثر إفادة / دقيقة.

الفرص هائلة. يجب أن يكون هذا البرنامج التعليمي بمثابة نقطة انطلاق لتطبيق 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')

يجب أن يمنحك هذا جميع العناوين الرئيسية داخل قائمة بايثون:



صورة المؤلف

 

رائع ، لدينا البيانات النصية التي سنستخرج منها الكيانات الرئيسية (التي يتم تداولها علنًا في هذه الحالة) باستخدام البرمجة اللغوية العصبية.

حان الوقت لتطبيق البرمجة اللغوية العصبية.

الخطوة 2: استخراج الكيانات من العناوين

 
 
هذا هو الجزء المثير. سنستخدم ملف نموذج اللغة الأساسية المدرب مسبقًا من spaCy مكتبة لاستخراج الكيانات الرئيسية في العنوان.

قليلا عن spaCy والنماذج الأساسية.

سبا هي مكتبة NLP مفتوحة المصدر تعالج البيانات النصية بسرعة فائقة. إنها المكتبة الرائدة في أبحاث البرمجة اللغوية العصبية التي يتم استخدامها في التطبيقات على مستوى المؤسسات على نطاق واسع. إن spaCy معروف جيدًا بتوسيع نطاق المشكلة. وهو يدعم أكثر من 64 لغة ويعمل بشكل جيد مع كل من TensorFlow و PyTorch.

عند الحديث عن النماذج الأساسية ، يوجد لدى spaCy فئتان رئيسيتان من نماذج اللغة التي تم تدريبها مسبقًا والتي يتم تدريبها على أحجام مختلفة من البيانات النصية لتزويدنا باستنتاجات متطورة.

  1. النماذج الأساسية - لمهام البرمجة اللغوية العصبية الأساسية للأغراض العامة.
  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 هو في الأساس خط أنابيب باللغة الإنجليزية مُحسّن لوحدة المعالجة المركزية والذي يحتوي على المكونات التالية:

  • tok2vec - رمز إلى متجهات (ينفذ ترميزًا على البيانات النصية) ،
  • tagger - يضيف البيانات الوصفية ذات الصلة إلى كل رمز مميز. يستخدم spaCy بعض النماذج الإحصائية للتنبؤ بجزء الكلام (POS) لكل رمز مميز. المزيد في توثيق.
  • المحلل اللغوي - ينشئ محلل التبعية العلاقات بين الرموز المميزة.
  • تشمل المكونات الأخرى senter و ner و attribute_ruler و lemmatizer.

الآن ، لاختبار ما يمكن أن يفعله هذا النموذج لنا ، سأمرر عنوانًا واحدًا من خلال النموذج المحسّن ثم أفحص الأجزاء المختلفة من الجملة.

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

يؤدي خط الأنابيب جميع المهام بدءًا من الترميز وحتى NER. هنا لدينا الرموز المميزة أولاً:



صورة المؤلف

 

يمكنك إلقاء نظرة على الجزء الذي تم وضع علامة عليه من الكلام باستخدام pos_ السمة.



صورة المؤلف

 

يتم تمييز كل رمز ببعض البيانات الوصفية. على سبيل المثال ، التجارة هي اسم علم ، الإعداد هو اسم ، : هي علامات الترقيم ، وهكذا دواليك. تم تقديم قائمة العلامات الكاملة هنا.

وبعد ذلك ، يمكنك إلقاء نظرة على كيفية ارتباطهما من خلال النظر إلى الرسم البياني للتبعية باستخدام dep_ صفة، عزا:



صورة المؤلف

 

هنا ، التجارة مركبة ، الإعداد هو الجذر ، Nifty هو أبوس (معدل توضيحي). مرة أخرى ، يمكن العثور على جميع العلامات النحوية هنا.

يمكنك أيضًا تصور تبعيات العلاقة بين الرموز المميزة باستخدام الإزاحة التالية render() الأسلوب:

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

والذي سيعطي هذا الرسم البياني:



صورة المؤلف

 

استخراج الكيان

 
 
ولإلقاء نظرة على الكيانات المهمة للجملة ، يمكنك المرور 'ent’ كنمط في نفس الكود:



صورة للمؤلف - لقد استخدمت عنوانًا آخر لأن العنوان الذي استخدمناه أعلاه لا يحتوي على أي كيانات.

 

لدينا علامات مختلفة لكيانات مختلفة مثل اليوم الذي يحتوي على DATE ، يحتوي Glasscoat على GPE والتي يمكن أن تكون بلدان / مدن / ولايات. نحن نبحث بشكل رئيسي عن الكيانات التي لديها علامة ORG والتي ستمنحنا الشركات والوكالات والمؤسسات وما إلى ذلك.

نحن الآن قادرون على استخراج الكيانات من النص. دعنا نبدأ في استخراج المنظمات من جميع العناوين باستخدام كيانات ORG.

سيعيد هذا قائمة بجميع الشركات على النحو التالي:



صورة المؤلف

 

سهل جدا ، أليس كذلك؟

هذا هو سحر السبا الآن!

تتمثل الخطوة التالية في البحث عن كل هذه الشركات في قاعدة معرفية لاستخراج رمز السهم المناسب لتلك الشركة ثم استخدام مكتبات مثل yahoo-finance لاستخراج تفاصيل السوق مثل السعر والعائد وما إلى ذلك.

الخطوة 3 - ربط الكيان المحدد

 
 
الهدف من هذا المشروع هو التعرف على الأسهم المتداولة في السوق والحصول على تفاصيلها على لوحة التحكم.

لدينا أسماء الشركات ولكن من أجل الحصول على تفاصيل التداول الخاصة بهم ، سنحتاج إلى رمز سهم تداول الشركة.

نظرًا لأنني أقوم باستخراج تفاصيل وأخبار الشركات الهندية ، سأستخدم قاعدة بيانات خارجية لـ شركات Nifty 500 (ملف CSV).

لكل شركة ، سنبحث عنها في قائمة الشركات التي تستخدم الباندا ، وبعد ذلك سنقوم بتسجيل إحصائيات سوق الأوراق المالية باستخدام تمويل ياهو مكتبة.

صورة المؤلف

 

الشيء الوحيد الذي يجب أن تلاحظه هنا هو أنني أضفت ".NS" بعد كل رمز سهم قبل تمريره إلى Ticker فئة من yfinance مكتبة. ذلك لأن رموز الأسهم NSE الهندية مخزنة بامتداد .NS اللاحقة في yfinance.

وستظهر الأسهم الصاخبة في إطار بيانات مثل أدناه:



صورة المؤلف

 

هاهو! أليس هذا رائعا؟ مثل هذا التطبيق البسيط والعميق الذي يمكن أن يوجهك في الاتجاه الصحيح مع الأسهم المناسبة.

الآن لجعله أكثر سهولة ، يمكننا إنشاء تطبيق ويب خارج الكود الذي كتبناه للتو باستخدام Streamlit.

الخطوة 4 - إنشاء تطبيق ويب باستخدام 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.pص في ​​المحطة الخاصة بك. يجب أن يفتح تطبيقًا في متصفح الويب الخاص بك.

لقد أضفت بعض الوظائف الإضافية لالتقاط البيانات من مصادر متعددة. الآن ، يمكنك إضافة عنوان URL لخلاصة RSS من اختيارك إلى التطبيق وستتم معالجة البيانات وسيتم عرض الأسهم الشائعة في إطار بيانات.

للوصول إلى قاعدة التعليمات البرمجية بالكامل ، يمكنك التحقق من مستودعي هنا:

 
جيثب - dswh / NER_News_Feed
 

يمكنك إضافة عناصر تصميم متعددة ، ومصادر بيانات مختلفة ، وأنواع أخرى من المعالجة لجعلها أكثر كفاءة وفائدة.

يبدو تطبيقي في حالته الحالية مثل الصورة الموجودة في البانر.

إذا كنت تريد متابعتي خطوة بخطوة ، شاهدني أكود هذا التطبيق هنا:

الخطوات التالية!

 
 
بدلاً من اختيار حالة استخدام مالي ، يمكنك أيضًا اختيار أي تطبيق آخر من اختيارك. الرعاية الصحية والتجارة الإلكترونية والأبحاث وغيرها الكثير. تتطلب جميع الصناعات معالجة المستندات واستخراج الكيانات المهمة وربطها. جرب فكرة أخرى.

تتمثل الفكرة البسيطة في استخراج جميع الكيانات المهمة لورقة بحثية ثم إنشاء رسم بياني معرفي لها باستخدام واجهة برمجة تطبيقات بحث Google.

أيضًا ، إذا كنت تريد نقل تطبيق موجز أخبار الأسهم إلى مستوى آخر ، فيمكنك إضافة بعض خوارزميات التداول لإنشاء إشارات بيع وشراء أيضًا.

أنا أشجعك على الانطلاق بخيالك.

كيف يمكنك التواصل معي!

 
 
إذا أعجبك هذا المنشور وترغب في رؤية المزيد من هذا المحتوى ، فيمكنك الاشتراك فيه النشرة الإخبارية الخاصة بي or قناة يوتيوب بلدي حيث سأستمر في مشاركة مثل هذه المشاريع المفيدة والسريعة التي يمكن للمرء أن يبنيها.

إذا كنت شخصًا بدأ لتوه في البرمجة أو ترغب في الدخول في علوم البيانات أو ML ، فيمكنك التحقق من الدورة التدريبية الخاصة بي في أكاديمية ويب لين.

بفضل إليوت جان.

 
السيرة الذاتية: هارشيت تياجي هو مهندس يتمتع بخبرة مدمجة في تقنيات الويب وعلوم البيانات (ويعرف أيضًا باسم علم البيانات الكامل). لقد قام بتوجيه أكثر من 1000 طالب في مجال الذكاء الاصطناعي / الويب / علوم البيانات ، ويقوم بتصميم مسارات تعلم علوم البيانات وهندسة التعلم الآلي. في السابق ، طور هارشيت خوارزميات معالجة البيانات مع علماء أبحاث في جامعة ييل ، ومعهد ماساتشوستس للتكنولوجيا ، وجامعة كاليفورنيا في لوس أنجلوس.

أصلي. تم إعادة النشر بإذن.

هذا الموضوع ذو علاقة بـ:

المصدر: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

الطابع الزمني:

اكثر من KD nuggets