בניית פיד חדשות פיננסי מובנה באמצעות Python, SpaCy ו- Streamlit

צומת המקור: 1876513

בניית פיד חדשות פיננסי מובנה באמצעות Python, SpaCy ו- Streamlit

תחילת העבודה עם NLP על ידי בניית יישום זיהוי ישויות בשם (NER).


By חרשית טיאגי, מדריכת מדעי הנתונים | מנטור | יוטיוברית


בניית פיד חדשות פיננסי מובנה באמצעות Python, SpaCy ו- Streamlit

אחד היישומים המעניינים והנפוצים ביותר של NLP הוא Named Entity Recognition (NER).

יש חשיבות מכרעת לקבלת תובנות מנתונים גולמיים ולא מובנים. העלאת מסמך וקבלת נתחי המידע החשובים ממנו נקראת אחזור מידע.

אחזור מידע היה משימה/אתגר מרכזי ב- NLP. ו- NER (או NEL-Named Entity Linking) משמש במספר תחומים (כספים, תרופות, מסחר אלקטרוני וכו ') למטרות אחזור מידע.

בפוסט הדרכה זה, אראה לך כיצד תוכל למנף את NEL לפיתוח הזנת חדשות מותאמת אישית לבורסה המפרטת את המניות הרוחות באינטרנט.

מקדים

 
 
אין תנאים מוקדמים כאלה. ייתכן שיהיה עליך להכיר מעט את פיתון ואת המשימות הבסיסיות של NLP כמו טוקניזציה, תיוג קופה, ניתוח תלות וכו '.

אכסה את החלקים החשובים בפירוט רב יותר, כך שגם אם אתה מתחיל לגמרי תוכל לעטוף את הראש סביב מה שקורה.

אז בואו נמשיך, תעקבו אחריכם ויהיה לכם עדכון מינימלי של מניות שתוכלו להתחיל לחקור.

כלים/התקנה שתצטרך:

 
 

  1. Google Colab לבדיקה וחקר נתונים ראשונים וספריית SpaCy.
  2. קוד VS (או כל עורך) לקידוד היישום Streamlit.
  3. מקור מידע הבורסה (חדשות) שעליו נבצע NER ומאוחר יותר NEL.
  4. סביבת פייתון וירטואלית (אני משתמשת בקונדה) יחד עם ספריות כמו Pandas, SpaCy, Streamlit, Streamlit-Spacy (אם אתה רוצה להציג כמה עיבודים של SpaCy.)

מַטָרָה

 
 
מטרתו של פרויקט זה היא ללמוד וליישם את זיהוי ישויות בשם לשם חילוץ ישויות חשובות (חברות הנסחרות בדוגמה שלנו) ולאחר מכן לקשר כל ישות עם מידע כלשהו באמצעות בסיס ידע (רשימת חברות Nifty500).

נקבל את הנתונים הטקסטואליים מהזנות RSS באינטרנט, נחלץ את שמות המניות הרוחות ואז נמשוך את נתוני מחירי השוק שלהן כדי לבדוק את האותנטיות של החדשות לפני שננקט עמדה כלשהי במניות אלה.


הערה: ייתכן ש- NER אינה בעיה חדישה, אך יש לה יישומים רבים בתעשייה.


עוברים ל- Google Colab לצורך ניסויים ובדיקות:

שלב 1: מיצוי נתוני החדשות הטרנדיים

 
 
כדי לקבל כמה חדשות אמינות בבורסה, אשתמש כלכלה ו בקרת כסף הזנות RSS להדרכה זו, אך תוכל גם להשתמש/להוסיף עדכוני RSS של ארצך או נתוני טוויטר/טלגרם (קבוצות) כדי להפוך את הפיד שלך לאינפורמטיבי/מדויק יותר.

ההזדמנויות עצומות. הדרכה זו אמורה לשמש אבן קפיצה ליישום NEL לבניית אפליקציות בתחומים שונים הפותרים סוגים שונים של בעיות אחזור מידע.

אם אתה ממשיך להסתכל על עדכון ה- RSS, הוא נראה בערך כך:

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


 

המטרה שלנו היא לקבל את הכותרות הטקסטואליות מהזנת RSS הזו ואז נשתמש ב- SpaCy כדי לחלץ את הישויות העיקריות מהכותרות.

הכותרות נמצאות בתוך תג ה- XML ​​כאן.

ראשית, עלינו ללכוד את כל מסמך ה- XML ​​ונוכל להשתמש ב requests הספרייה לעשות זאת. ודא שהחבילות הללו מותקנות בסביבת זמן הריצה שלך ב- 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: חילוץ ישויות מהכותרות

 
 
זהו החלק המרגש. נשתמש בא מודל שפת ליבה מאומן מראש מ spaCy ספרייה לחילוץ הישויות העיקריות בכותרת.

קצת על spaCy ודגמי הליבה.

ספא היא ספריית NLP עם קוד פתוח המעבדת נתונים טקסטואליים במהירות גבוהה במיוחד. זוהי הספרייה המובילה במחקר NLP אשר משמשת ביישומים ברמה ארגונית בקנה מידה. spaCy ידועה בקנה מידה עם הבעיה. והוא תומך ביותר מ -64 שפות ועובד היטב הן עם TensorFlow והן ב- PyTorch.

אם מדברים על מודלים מרכזיים, ל- spaCy יש שני סוגים עיקריים של מודלים שפתיים מאומנים, המתאמנים בגדלים שונים של נתונים טקסטואליים כדי לתת לנו מסקנות חדישות.

  1. דגמי ליבה-למשימות NLP בסיסיות למטרות כלליות.
  2. דגמי Starter - ליישומי נישה הדורשים למידת העברה. אנו יכולים למנף את המשקולות הנלמדות של הדגם כדי לכוונן את הדגמים המותאמים אישית שלנו מבלי שנאלץ לאמן את הדגם מאפס.

מכיוון שמקרה השימוש שלנו הוא בסיסי במדריך זה, אנו הולכים להישאר עם 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_ תְכוּנָה:



תמונה מאת המחבר

 

כאן, טרייד הוא תרכובת, ההתקנה היא שורש, ניפטי היא appos (שינוי יישום). שוב, ניתן למצוא את כל התגים התחביריים כאן.

תוכל גם לדמיין את התלות ביחסים בין האסימונים באמצעות העקירה הבאה render() שיטה:

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

מה שייתן את הגרף הזה:



תמונה מאת המחבר

 

מיצוי ישות

 
 
וכדי להסתכל על הישויות החשובות של המשפט, אתה יכול לעבור 'ent’ כמו סגנון באותו קוד:



תמונה מאת המחבר - השתמשתי בכותרת אחרת כיוון שהשתמשנו למעלה לא היו לה ישויות.

 

יש לנו תגים שונים עבור ישויות שונות, כמו ביום שבו יש DATE, ל- Glasscoat יש GPE שיכול להיות מדינות/ערים/מדינות. אנו מחפשים בעיקר ישויות שיש להן תג ORG שייתן לנו חברות, סוכנויות, מוסדות וכו '.

כעת אנו מסוגלים לחלץ ישויות מהטקסט. בואו נתחיל לחלץ את הארגונים מכל הכותרות באמצעות ישויות ORG.

פעולה זו תחזיר רשימה של כל החברות כדלקמן:



תמונה מאת המחבר

 

כל כך קל, נכון?

זה הקסם של ספאסי עכשיו!

השלב הבא הוא לחפש את כל החברות האלה במאגר ידע כדי לחלץ את סמל המניות הנכון עבור אותה חברה ולאחר מכן להשתמש בספריות כמו Yahoo Finance כדי לחלץ את פרטי השוק שלהן כמו מחיר, תשואה וכו '.

שלב 3 - קישור ישות בשם

 
 
ללמוד על אילו מניות מזמזמות בשוק ולקבל את הפרטים שלהן על לוח המחוונים שלך היא המטרה לפרויקט זה.

יש לנו את שמות החברה, אך על מנת לקבל את פרטי המסחר שלהם, נזדקק לסמל מניית המסחר של החברה.

מכיוון שאני מחלץ את הפרטים והחדשות של חברות הודיות, אני הולך להשתמש במאגר מידע חיצוני של 500 חברות (קובץ CSV).

עבור כל חברה, נבדוק אותה ברשימת החברות המשתמשות בפנדות, ולאחר מכן נלכד את הנתונים הסטטיסטיים של שוק המניות באמצעות יאהו פיננסים סִפְרִיָה.

תמונה מאת המחבר

 

דבר אחד שכדאי לך לשים לב אליו כאן הוא שהוספתי ".NS" אחרי כל סמל מניה לפני שהעברתי אותו ל Ticker הכיתה של yfinance סִפְרִיָה. הסיבה לכך היא שסמלי מניות NSE ההודיים מאוחסנים עם .NS סיומת ב yfinance.

והמניות הרוחות יופיעו במסגרת נתונים כמו להלן:



תמונה מאת המחבר

 

וואלה! זה לא נהדר? אפליקציה כל כך פשוטה אך מעמיקה שיכולה להפנות אותך בכיוון הנכון עם המניות הנכונות.

כעת כדי להפוך אותו לנגיש יותר, אנו יכולים ליצור יישום אינטרנט מתוך הקוד שכתבנו זה עתה באמצעות Streamlit.

שלב 4 - בניית אפליקציית אינטרנט באמצעות Streamlit

 
 
הגיע הזמן לעבור לעורך וליצור פרויקט וסביבה וירטואלית חדשה ליישום NLP.

תחילת העבודה עם 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
 

אתה יכול להוסיף מרכיבי עיצוב מרובים, מקורות נתונים שונים וסוגי עיבוד אחרים כדי להפוך אותו ליעיל ושימושי יותר.

האפליקציה שלי במצבה הנוכחי נראית כמו התמונה בבאנר.

אם אתה רוצה לעקוב אחריי צעד אחר צעד, צפה בי בקוד האפליקציה הזו כאן:

הצעדים הבאים!

 
 
במקום לבחור מקרה לשימוש כלכלי, אתה יכול גם לבחור כל יישום אחר על פי בחירתך. שירותי בריאות, מסחר אלקטרוני, מחקר ועוד רבים אחרים. כל התעשיות דורשות עיבוד מסמכים וחילוץ וקישור של גופים חשובים. נסה רעיון אחר.

רעיון פשוט הוא חילוץ כל הישויות החשובות במאמר מחקר ולאחר מכן יצירת תרשים ידע שלו באמצעות ממשק ה- API של חיפוש Google.

כמו כן, אם ברצונך להעלות את אפליקציית עדכון החדשות למניות לרמה אחרת, תוכל להוסיף כמה אלגוריתמי מסחר גם ליצירת אותות קנייה ומכירה.

אני מעודד אותך להשתולל עם הדמיון שלך.

איך אתה יכול להתחבר אליי!

 
 
אם אהבת את הפוסט הזה ותרצה לראות עוד תוכן כזה, תוכל להירשם כמנוי העלון שלי or ערוץ YouTube שלי שבו אמשיך לשתף פרויקטים שימושיים ומהירים כאלה שאפשר לבנות.

אם אתה מישהו שרק התחיל עם תכנות או רוצה להיכנס למדעי הנתונים או ML, תוכל לבדוק את הקורס שלי בכתובת WIP Lane Academy.

תודה לאליוט גאן.

 
Bio you חרשית טיאגי הוא מהנדס בעל ניסיון משולב בטכנולוגיות אינטרנט ומדעי נתונים (aka full-stack data science). הוא הדריך למעלה מ -1000 שואפים ל- AI/Web/Data Science, והוא מתכנן מסלולי למידה הנדסיים ומדעי נתונים. בעבר פיתחה הרשית אלגוריתמים לעיבוד נתונים עם מדעני מחקר ב- Yale, MIT ו- UCLA.

מְקוֹרִי. פורסם מחדש באישור.

מידע נוסף:

מקור: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

בול זמן:

עוד מ KDnuggets