การสร้างฟีดข่าวทางการเงินที่มีโครงสร้างโดยใช้ Python, SpaCy และ Streamlit

โหนดต้นทาง: 1876513

การสร้างฟีดข่าวทางการเงินที่มีโครงสร้างโดยใช้ Python, SpaCy และ Streamlit

เริ่มต้นใช้งาน NLP โดยสร้างแอปพลิเคชัน Named Entity Recognition(NER)


By ฮาร์ชิต ไทกิ, ครูสอนวิทยาศาสตร์ข้อมูล | พี่เลี้ยง | ยูทูบเบอร์


การสร้างฟีดข่าวทางการเงินที่มีโครงสร้างโดยใช้ Python, SpaCy และ Streamlit

หนึ่งในแอปพลิเคชั่นที่น่าสนใจและใช้กันอย่างแพร่หลายของ NLP คือ Named Entity Recognition(NER)

การรับข้อมูลเชิงลึกจากข้อมูลดิบและไม่มีโครงสร้างมีความสำคัญอย่างยิ่ง การอัปโหลดเอกสารและรับข้อมูลสำคัญจากเอกสารนั้นเรียกว่าการดึงข้อมูล

การดึงข้อมูลเป็นงาน/ความท้าทายที่สำคัญใน NLP และมีการใช้ NER(หรือ NEL — Named Entity Linking) ในหลายโดเมน (การเงิน ยา อีคอมเมิร์ซ ฯลฯ) เพื่อวัตถุประสงค์ในการดึงข้อมูล

ในโพสต์บทช่วยสอนนี้ ฉันจะแสดงวิธีที่คุณสามารถใช้ประโยชน์จาก NEL เพื่อพัฒนาฟีดข่าวตลาดหุ้นที่กำหนดเองซึ่งแสดงรายการหุ้นที่ฉวัดเฉวียนบนอินเทอร์เน็ต

requisites ก่อน

 
 
ไม่มีข้อกำหนดเบื้องต้นดังกล่าว คุณอาจจำเป็นต้องมีความคุ้นเคยกับ python และงานพื้นฐานของ NLP เช่น tokenization การติดแท็ก 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 ของประเทศของคุณหรือข้อมูล 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')

สิ่งนี้จะให้พาดหัวข่าวทั้งหมดในรายการ Python:



ภาพโดยผู้เขียน

 

เยี่ยมมาก เรามีข้อมูลที่เป็นข้อความซึ่งเราจะแยกเอนทิตีหลัก (ซึ่งในกรณีนี้คือบริษัทที่ซื้อขายในตลาดหลักทรัพย์) โดยใช้ NLP

ถึงเวลานำ NLP ไปปฏิบัติ

ขั้นตอนที่ 2: การแยกเอนทิตีออกจากหัวข้อข่าว

 
 
นี่คือส่วนที่น่าตื่นเต้น เราจะใช้ a โมเดลภาษาหลักที่ผ่านการฝึกอบรมมาแล้ว จาก spaCy ไลบรารีเพื่อแยกเอนทิตีหลักในพาดหัว

เล็กน้อยเกี่ยวกับ spaCy และโมเดลหลัก

สปาซี เป็นไลบรารี NLP แบบโอเพ่นซอร์สที่ประมวลผลข้อความด้วยความเร็วที่เร็วมาก เป็นห้องสมุดชั้นนำในการวิจัย NLP ซึ่งใช้ในแอปพลิเคชันระดับองค์กรตามขนาด spaCy เป็นที่รู้จักกันดีในเรื่องการปรับขนาดปัญหา และรองรับมากกว่า 64 ภาษาและทำงานได้ดีกับทั้ง TensorFlow และ PyTorch

เมื่อพูดถึงโมเดลหลัก spaCy มีโมเดลภาษาที่ผ่านการฝึกอบรมมาแล้วสองคลาสหลัก ซึ่งได้รับการฝึกฝนโดยใช้ข้อมูลข้อความขนาดต่างๆ เพื่อให้การอนุมานที่ล้ำสมัยแก่เรา

  1. โมเดลหลัก — สำหรับงาน NLP พื้นฐานทั่วไป
  2. Starter Models — สำหรับแอปพลิเคชันเฉพาะที่ต้องการการถ่ายโอนการเรียนรู้ เราสามารถใช้ประโยชน์จากตุ้มน้ำหนักที่เรียนรู้ของโมเดลเพื่อปรับแต่งโมเดลแบบกำหนดเองของเราโดยไม่ต้องฝึกโมเดลตั้งแต่เริ่มต้น

เนื่องจากกรณีการใช้งานของเราเป็นพื้นฐานในบทช่วยสอนนี้ เราจะยึดติดกับ 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 — โทเค็นเป็นเวกเตอร์ (ทำโทเค็นบนข้อมูลต้นฉบับ)
  • tagger — เพิ่มข้อมูลเมตาที่เกี่ยวข้องให้กับแต่ละโทเค็น spaCy ใช้แบบจำลองทางสถิติบางตัวในการทำนายส่วนของคำพูด (POS) ของแต่ละโทเค็น เพิ่มเติมใน เอกสาร.
  • parser — ตัวแยกวิเคราะห์การพึ่งพาสร้างความสัมพันธ์ระหว่างโทเค็น
  • ส่วนประกอบอื่นๆ ได้แก่ sender, ner, attribute_ruler, lemmatizer

เพื่อทดสอบว่าโมเดลนี้ทำอะไรให้เราได้บ้าง ฉันจะส่งพาดหัวข่าวเดี่ยวผ่านโมเดลที่สร้างอินสแตนซ์แล้วตรวจสอบส่วนต่างๆ ของประโยค

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

ไปป์ไลน์ดำเนินการงานทั้งหมดตั้งแต่การสร้างโทเค็นไปจนถึง NER ที่นี่เรามีโทเค็นก่อน:



ภาพโดยผู้เขียน

 

คุณสามารถดูส่วนที่ติดแท็กของคำพูดโดยใช้ pos_ คุณลักษณะ



ภาพโดยผู้เขียน

 

แต่ละโทเค็นถูกแท็กด้วยข้อมูลเมตาบางส่วน ตัวอย่างเช่น การค้าเป็นคำนามที่เหมาะสม การตั้งค่าคือคำนาม : คือเครื่องหมายวรรคตอน เป็นต้น เป็นต้น รายการแท็กทั้งหมดจะได้รับ  โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.

จากนั้น คุณสามารถดูว่ามีความเกี่ยวข้องกันอย่างไรโดยดูที่กราฟการพึ่งพาโดยใช้ dep_ แอตทริบิวต์:



ภาพโดยผู้เขียน

 

ที่นี่ Trade is a Compound, Setup is Root, Nifty is appos (ตัวดัดแปลง Appositional) พบแท็กวากยสัมพันธ์ทั้งหมดอีกครั้ง  โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.

คุณยังสามารถเห็นภาพการขึ้นต่อกันของความสัมพันธ์ระหว่างโทเค็นโดยใช้ displacy . ต่อไปนี้ render() วิธี:

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

ซึ่งจะให้กราฟนี้:



ภาพโดยผู้เขียน

 

การสกัดเอนทิตี

 
 
และดูองค์ประกอบสำคัญของประโยคคุณสามารถผ่าน 'ent’ ตามสไตล์ในรหัสเดียวกัน:



รูปภาพโดยผู้เขียน — ฉันใช้พาดหัวอื่นเพราะหัวข้อที่เราใช้ข้างต้นไม่มีเอนทิตีใดๆ

 

เรามีแท็กที่แตกต่างกันสำหรับหน่วยงานต่างๆ เช่น วันที่มี DATE, Glasscoat มี GPE ซึ่งสามารถเป็นประเทศ/เมือง/รัฐได้ เรากำลังมองหาหน่วยงานที่มีแท็ก ORG ที่จะให้ข้อมูลบริษัท หน่วยงาน สถาบัน ฯลฯ แก่เรา

ขณะนี้เราสามารถแยกเอนทิตีออกจากข้อความได้แล้ว มาดูการแยกองค์กรออกจากหัวข้อทั้งหมดโดยใช้เอนทิตี ORG

ซึ่งจะส่งคืนรายชื่อบริษัททั้งหมดดังนี้:



ภาพโดยผู้เขียน

 

ง่ายมากใช่มั้ย?

นั่นคือความมหัศจรรย์ของ spaCy ตอนนี้!

ขั้นตอนต่อไปคือการค้นหาบริษัทเหล่านี้ทั้งหมดในฐานความรู้เพื่อแยกสัญลักษณ์หุ้นที่ถูกต้องสำหรับบริษัทนั้น จากนั้นใช้ห้องสมุดเช่น yahoo-finance เพื่อแยกรายละเอียดการตลาด เช่น ราคา ผลตอบแทน ฯลฯ

ขั้นตอนที่ 3 — การลิงก์เอนทิตีที่มีชื่อ

 
 
หากต้องการเรียนรู้เกี่ยวกับหุ้นที่ซื้อขายในตลาดและรับรายละเอียดบนแดชบอร์ดของคุณคือเป้าหมายสำหรับโครงการนี้

เรามีชื่อบริษัท แต่หากต้องการทราบรายละเอียดการซื้อขาย เราจำเป็นต้องมีสัญลักษณ์หุ้นของบริษัท

เนื่องจากฉันกำลังแยกรายละเอียดและข่าวสารของบริษัทอินเดีย ฉันจะใช้ฐานข้อมูลภายนอกของ Nifty 500 บริษัท (ไฟล์ CSV)

สำหรับทุกบริษัท เราจะค้นหาในรายชื่อบริษัทที่ใช้หมีแพนด้า จากนั้นเราจะรวบรวมสถิติตลาดหุ้นโดยใช้ yahoo-การเงิน ห้องสมุด.

ภาพโดยผู้เขียน

 

สิ่งหนึ่งที่คุณควรสังเกตที่นี่คือฉันได้เพิ่ม “.NS” หลังสัญลักษณ์หุ้นแต่ละอันก่อนที่จะส่งต่อไปยัง Ticker ชั้นของ yfinance ห้องสมุด. เป็นเพราะสัญลักษณ์หุ้น NSE ของอินเดียถูกจัดเก็บด้วยa .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 ช่อง YouTube ของฉัน ที่ซึ่งฉันจะแบ่งปันโปรเจ็กต์ที่มีประโยชน์และรวดเร็วที่ใครๆ ก็สร้างได้

หากคุณเป็นคนเพิ่งเริ่มเขียนโปรแกรมหรืออยากเข้า Data Science หรือ ML สามารถดูรายวิชาของฉันได้ที่ วิป เลน อะคาเดมี่.

ขอบคุณเอลเลียตกันน์

 
Bio: ฮาร์ชิต ไทกิ เป็นวิศวกรที่มีประสบการณ์ผสมผสานในด้านเทคโนโลยีเว็บและวิทยาศาสตร์ข้อมูล (หรือที่รู้จักในชื่อวิทยาศาสตร์ข้อมูลแบบฟูลสแตก) เขาได้ให้คำปรึกษาแก่ผู้ที่ต้องการ AI/เว็บ/วิทยาศาสตร์ข้อมูลมากกว่า 1000 คน และกำลังออกแบบวิทยาศาสตร์ข้อมูลและเส้นทางการเรียนรู้ด้านวิศวกรรม ML ก่อนหน้านี้ Harshit ได้พัฒนาอัลกอริธึมการประมวลผลข้อมูลร่วมกับนักวิทยาศาสตร์การวิจัยที่ Yale, MIT และ UCLA

Original. โพสต์ใหม่โดยได้รับอนุญาต

ที่เกี่ยวข้อง



เรื่องเด่นใน 30 วันที่ผ่านมา
เป็นที่นิยม
  1. คุณอ่านไฟล์ Excel ด้วย Python หรือไม่? มีวิธีที่เร็วกว่า 1000 เท่า
  2. นักวิทยาศาสตร์ข้อมูลที่ไม่มีทักษะด้านวิศวกรรมข้อมูลจะต้องเผชิญกับความจริงที่รุนแรง
  3. ผลงานด้านวิทยาศาสตร์ข้อมูลที่จะนำคุณไปสู่งาน
  4. ทำให้ Microsoft Excel และ Word เป็นอัตโนมัติโดยใช้ Python
  5. วิธีสร้างเว็บแอปที่น่าทึ่งสำหรับโครงการวิทยาศาสตร์ข้อมูลของคุณ
แบ่งปันมากที่สุด
  1. วิธีจัดการกับการจัดประเภทที่ไม่สมดุลโดยไม่ต้องปรับสมดุลข้อมูลใหม่
  2. วิธีค้นหาจุดอ่อนในโมเดลการเรียนรู้ของเครื่อง
  3. The Machine & Deep Learning Compendium เปิดหนังสือ
  4. นักวิทยาศาสตร์ข้อมูลที่ไม่มีทักษะด้านวิศวกรรมข้อมูลจะต้องเผชิญกับความจริงที่รุนแรง
  5. อธิบายการทดสอบสมมติฐาน

ที่มา: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

ประทับเวลา:

เพิ่มเติมจาก KD นักเก็ต