Xây dựng nguồn cấp tin tức tài chính có cấu trúc bằng Python, SpaCy và Streamlit

Nút nguồn: 1876513

Xây dựng nguồn cấp tin tức tài chính có cấu trúc bằng Python, SpaCy và Streamlit

Bắt đầu với NLP bằng cách xây dựng ứng dụng Nhận dạng đối tượng được đặt tên (NER).


By khắc nghiệt tyagi, Giảng viên Khoa học Dữ liệu | Cố vấn | Youtuber


Xây dựng nguồn cấp tin tức tài chính có cấu trúc bằng Python, SpaCy và Streamlit

Một trong những ứng dụng rất thú vị và được sử dụng rộng rãi của NLP là Nhận dạng thực thể có tên (NER).

Nhận được thông tin chi tiết từ dữ liệu thô và không có cấu trúc có tầm quan trọng sống còn. Tải lên một tài liệu và lấy các bit thông tin quan trọng từ nó được gọi là truy xuất thông tin.

Truy xuất thông tin là một nhiệm vụ / thách thức lớn trong NLP. Và NER (hoặc NEL - Liên kết thực thể được đặt tên) được sử dụng trong một số lĩnh vực (tài chính, ma túy, thương mại điện tử, v.v.) cho mục đích truy xuất thông tin.

Trong bài đăng hướng dẫn này, tôi sẽ chỉ cho bạn cách bạn có thể tận dụng NEL để phát triển một nguồn cấp tin tức thị trường chứng khoán tùy chỉnh liệt kê các cổ phiếu gây chú ý trên internet.

Điều kiện tiên quyết

 
 
Không có điều kiện tiên quyết như vậy. Bạn có thể cần phải làm quen với python và các tác vụ cơ bản của NLP như mã hóa, gắn thẻ POS, phân tích cú pháp phụ thuộc, v.v.

Tôi sẽ trình bày chi tiết hơn các phần quan trọng, vì vậy ngay cả khi bạn là người mới bắt đầu hoàn chỉnh, bạn sẽ có thể hiểu những gì đang diễn ra.

Vì vậy, hãy bắt đầu với nó, làm theo và bạn sẽ có một nguồn cấp tin tức chứng khoán tối thiểu mà bạn có thể bắt đầu nghiên cứu.

Các công cụ / thiết lập bạn sẽ cần:

 
 

  1. Google Colab để thử nghiệm và khám phá dữ liệu ban đầu và thư viện SpaCy.
  2. VS Code (hoặc bất kỳ trình soạn thảo nào) để viết mã ứng dụng Streamlit.
  3. Nguồn thông tin thị trường chứng khoán (tin tức) mà chúng tôi sẽ thực hiện NER và sau đó là NEL.
  4. Một môi trường python ảo (tôi đang sử dụng conda) cùng với các thư viện như Pandas, SpaCy, Streamlit, Streamlit-Spacy (nếu bạn muốn hiển thị một số kết xuất SpaCy.)

Mục tiêu

 
 
Mục tiêu của dự án này là tìm hiểu và áp dụng Nhận dạng đối tượng được đặt tên để trích xuất các thực thể quan trọng (các công ty giao dịch công khai trong ví dụ của chúng tôi) và sau đó liên kết mỗi thực thể với một số thông tin bằng cách sử dụng cơ sở kiến ​​thức (danh sách các công ty Nifty500).

Chúng tôi sẽ lấy dữ liệu dạng văn bản từ nguồn cấp RSS trên internet, trích xuất tên của các cổ phiếu gây chú ý và sau đó lấy dữ liệu giá thị trường của chúng để kiểm tra tính xác thực của tin tức trước khi đưa ra bất kỳ vị trí nào trong các cổ phiếu đó.


Lưu ý: NER có thể không phải là một vấn đề tối tân nhưng nó có nhiều ứng dụng trong ngành.


Chuyển sang Google Colab để thử nghiệm và kiểm tra:

Bước 1: Trích xuất dữ liệu tin tức cổ phiếu xu hướng

 
 
Để nhận được một số tin tức xác thực đáng tin cậy về thị trường chứng khoán, tôi sẽ sử dụng Thời báo Kinh tế và Kiểm soát tiền Nguồn cấp dữ liệu RSS cho hướng dẫn này nhưng bạn cũng có thể sử dụng / thêm nguồn cấp dữ liệu RSS của quốc gia bạn hoặc dữ liệu Twitter / Telegram (nhóm) để làm cho nguồn cấp dữ liệu của bạn có nhiều thông tin / chính xác hơn.

Cơ hội là vô cùng lớn. Hướng dẫn này sẽ là bước đệm để áp dụng NEL để xây dựng ứng dụng trong các miền khác nhau giải quyết các loại vấn đề truy xuất thông tin khác nhau.

Nếu bạn tiếp tục xem nguồn cấp dữ liệu RSS, nó trông giống như sau:

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


 

Mục tiêu của chúng tôi là lấy các tiêu đề văn bản từ nguồn cấp dữ liệu RSS này và sau đó chúng tôi sẽ sử dụng SpaCy để trích xuất các thực thể chính từ các tiêu đề.

Các tiêu đề xuất hiện bên trong của XML tại đây.

Đầu tiên, chúng ta cần nắm bắt toàn bộ tài liệu XML và chúng ta có thể sử dụng requests thư viện để làm điều đó. Đảm bảo rằng bạn đã cài đặt các gói này trong môi trường thời gian chạy của mình trong colab.

Bạn có thể chạy lệnh sau để cài đặt hầu hết mọi gói ngay từ ô mã của cột:

!pip install <package_name>

Gửi một GET yêu cầu tại liên kết được cung cấp để nắm bắt tài liệu XML.

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

Chạy ô để kiểm tra những gì bạn nhận được trong đối tượng phản hồi.

Nó sẽ cung cấp cho bạn một phản hồi thành công với mã HTTP 200 như sau:



Bây giờ bạn đã có đối tượng phản hồi này, chúng ta có thể chuyển nội dung của nó đến lớp BeautifulSoup để phân tích cú pháp tài liệu XML như sau:

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

Điều này sẽ cung cấp cho bạn tất cả các tiêu đề bên trong danh sách Python:



Hình ảnh của tác giả

 

Tuyệt vời, chúng tôi có dữ liệu dạng văn bản mà chúng tôi sẽ trích xuất các thực thể chính (trong trường hợp này là các công ty giao dịch công khai) bằng NLP.

Đã đến lúc đưa NLP vào hoạt động.

Bước 2: Trích xuất các thực thể khỏi tiêu đề

 
 
Đây là phần thú vị. Chúng tôi sẽ sử dụng một mô hình ngôn ngữ cốt lõi được đào tạo trước từ spaCy thư viện để trích xuất các thực thể chính trong tiêu đề.

Một chút về spaCy và các mô hình cốt lõi.

spaCy là một thư viện NLP mã nguồn mở xử lý dữ liệu dạng văn bản với tốc độ siêu nhanh. Đây là thư viện hàng đầu về nghiên cứu NLP đang được sử dụng trong các ứng dụng cấp doanh nghiệp trên quy mô lớn. spaCy nổi tiếng trong việc giải quyết vấn đề. Và nó hỗ trợ hơn 64 ngôn ngữ và hoạt động tốt với cả TensorFlow và PyTorch.

Nói về các mô hình cốt lõi, spaCy có hai lớp chính là các mô hình ngôn ngữ được đào tạo trước được đào tạo trên các kích thước khác nhau của dữ liệu văn bản để cung cấp cho chúng ta những suy luận hiện đại.

  1. Mô hình cốt lõi - cho các nhiệm vụ NLP cơ bản có mục đích chung.
  2. Mô hình Khởi động - dành cho các ứng dụng thích hợp yêu cầu học chuyển tiếp. Chúng tôi có thể tận dụng trọng lượng đã học của mô hình để tinh chỉnh các mô hình tùy chỉnh của mình mà không cần phải đào tạo mô hình từ đầu.

Vì trường hợp sử dụng của chúng tôi là cơ bản trong hướng dẫn này, chúng tôi sẽ gắn bó với en_core_web_sm đường ống mô hình lõi.

Vì vậy, hãy tải điều này vào sổ ghi chép của chúng tôi:

nlp = spacy.load("en_core_web_sm")

Lưu ý: Colab đã tải xuống mô hình này cho chúng tôi nhưng nếu bạn cố gắng chạy nó trong hệ thống cục bộ của mình, trước tiên bạn sẽ phải tải xuống mô hình bằng cách sử dụng lệnh sau:

python -m spacy download en_core_web_sm

en_core_web_sm về cơ bản là một đường dẫn tiếng Anh được tối ưu hóa cho CPU có các thành phần sau:

  • tok2vec - mã thông báo thành vectơ (thực hiện mã hóa trên dữ liệu văn bản),
  • tagger - thêm siêu dữ liệu có liên quan vào mỗi mã thông báo. spaCy sử dụng một số mô hình thống kê để dự đoán phần lời nói (POS) của mỗi mã thông báo. Thêm trong tài liệu hướng dẫn.
  • phân tích cú pháp - trình phân tích cú pháp phụ thuộc thiết lập mối quan hệ giữa các mã thông báo.
  • Các thành phần khác bao gồm senter, ner, attribute_ruler, lemmatizer.

Bây giờ, để kiểm tra xem mô hình này có thể làm gì cho chúng ta, tôi sẽ chuyển một tiêu đề duy nhất qua mô hình được khởi tạo và sau đó kiểm tra các phần khác nhau của một câu.

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

Đường ống thực hiện tất cả các tác vụ từ mã hóa đến NER. Ở đây chúng tôi có các mã thông báo đầu tiên:



Hình ảnh của tác giả

 

Bạn có thể xem phần được gắn thẻ của bài phát biểu bằng cách sử dụng pos_ thuộc tính.



Hình ảnh của tác giả

 

Mỗi mã thông báo được gắn thẻ với một số siêu dữ liệu. Ví dụ, Trade là một danh từ riêng, Setup là một danh từ, : là dấu chấm câu, vân vân, vân vân. Toàn bộ danh sách các Thẻ được đưa ra tại đây.

Và sau đó, bạn có thể xem chúng có liên quan như thế nào bằng cách xem biểu đồ phụ thuộc bằng cách sử dụng dep_ thuộc tính:



Hình ảnh của tác giả

 

Ở đây, Trade là một Compound, Setup là Root, Nifty là appos (Bổ ngữ bổ sung). Một lần nữa, tất cả các thẻ cú pháp có thể được tìm thấy tại đây.

Bạn cũng có thể hình dung mối quan hệ phụ thuộc giữa các mã thông báo bằng cách sử dụng sai lệch sau render() phương pháp:

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

sẽ cung cấp cho biểu đồ này:



Hình ảnh của tác giả

 

Khai thác thực thể

 
 
Và để xem xét các thực thể quan trọng của câu, bạn có thể vượt qua 'ent’ như kiểu trong cùng một mã:



Hình ảnh của tác giả - Tôi đã sử dụng tiêu đề khác vì tiêu đề chúng tôi sử dụng ở trên không có bất kỳ thực thể nào.

 

Chúng tôi có các thẻ khác nhau cho các thực thể khác nhau như ngày có DATE, Glasscoat có GPE có thể là Quốc gia / Thành phố / Tiểu bang. Chúng tôi chủ yếu tìm kiếm các thực thể có thẻ ORG sẽ cung cấp cho chúng tôi Công ty, đại lý, tổ chức, v.v.

Bây giờ chúng tôi có thể trích xuất các thực thể từ văn bản. Hãy đi xuống để trích xuất các tổ chức từ tất cả các tiêu đề bằng cách sử dụng các thực thể ORG.

Thao tác này sẽ trả về danh sách tất cả các công ty như sau:



Hình ảnh của tác giả

 

Thật dễ dàng, phải không?

Đó là điều kỳ diệu của spaCy bây giờ!

Bước tiếp theo là tìm kiếm tất cả các công ty này trong một cơ sở kiến ​​thức để trích xuất mã cổ phiếu phù hợp cho công ty đó và sau đó sử dụng các thư viện như yahoo-Finance để trích xuất các chi tiết thị trường của họ như giá cả, lợi nhuận, v.v.

Bước 3 - Liên kết đối tượng được đặt tên

 
 
Mục tiêu của dự án này là để tìm hiểu về những cổ phiếu đang gây xôn xao trên thị trường và nhận thông tin chi tiết của chúng trên bảng điều khiển của bạn.

Chúng tôi có tên công ty nhưng để biết chi tiết giao dịch của họ, chúng tôi sẽ cần ký hiệu cổ phiếu giao dịch của công ty.

Vì tôi đang trích xuất các chi tiết và tin tức về các Công ty Ấn Độ, tôi sẽ sử dụng cơ sở dữ liệu bên ngoài về Nifty 500 công ty (tệp CSV).

Đối với mọi công ty, chúng tôi sẽ tìm kiếm nó trong danh sách các công ty sử dụng gấu trúc và sau đó chúng tôi sẽ nắm bắt các thống kê thị trường chứng khoán bằng cách sử dụng Tài chính yahoo thư viện.

Hình ảnh của tác giả

 

Một điều mà bạn nên chú ý ở đây là tôi đã thêm “.NS” sau mỗi ký hiệu chứng khoán trước khi chuyển nó vào Ticker lớp của yfinance thư viện. Đó là vì các ký hiệu chứng khoán NSE của Ấn Độ được lưu trữ với .NS hậu tố trong yfinance.

Và các cổ phiếu sôi động sẽ xuất hiện trong một khung dữ liệu như dưới đây:



Hình ảnh của tác giả

 

Thì đấy! điều này không tuyệt phải không? Một ứng dụng đơn giản nhưng sâu sắc như vậy có thể chỉ cho bạn đi đúng hướng với đúng cổ phiếu.

Bây giờ để làm cho nó dễ truy cập hơn, chúng tôi có thể tạo một ứng dụng web từ mã mà chúng tôi vừa viết bằng cách sử dụng Streamlit.

Bước 4 - Xây dựng ứng dụng web bằng Streamlit

 
 
Đã đến lúc chuyển sang trình soạn thảo và tạo một dự án mới và môi trường ảo cho ứng dụng NLP.

Bắt đầu với Streamlit cực kỳ dễ dàng đối với các ứng dụng dữ liệu demo như vậy. Đảm bảo rằng bạn đã cài đặt streamlit.

pip install Streamlit

Bây giờ, hãy tạo một tệp mới có tên app.py và bắt đầu viết mã chức năng để chuẩn bị ứng dụng.

Nhập tất cả các thư viện bắt buộc ở trên cùng.

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

Thêm tiêu đề vào ứng dụng của bạn:

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

Kiểm tra ứng dụng của bạn bằng cách chạy streamlit run app.py trong thiết bị đầu cuối của bạn. Nó sẽ mở ra một ứng dụng trong trình duyệt web của bạn.

Tôi đã thêm một số chức năng bổ sung để thu thập dữ liệu từ nhiều nguồn. Bây giờ, bạn có thể thêm URL nguồn cấp RSS mà bạn chọn vào ứng dụng và dữ liệu sẽ được xử lý và các cổ phiếu thịnh hành sẽ được hiển thị trong khung dữ liệu.

Để có quyền truy cập vào toàn bộ cơ sở mã, bạn có thể xem kho lưu trữ của tôi tại đây:

 
GitHub - dswh / NER_News_Feed
 

Bạn có thể thêm nhiều yếu tố tạo kiểu, các nguồn dữ liệu khác nhau và các kiểu xử lý khác để làm cho nó hiệu quả và hữu ích hơn.

Ứng dụng của tôi ở trạng thái hiện tại trông giống như hình ảnh trong biểu ngữ.

Nếu bạn muốn theo dõi tôi từng bước, hãy xem tôi viết mã ứng dụng này tại đây:

Bước tiếp theo!

 
 
Thay vì chọn một trường hợp sử dụng tài chính, bạn cũng có thể chọn bất kỳ ứng dụng nào khác mà bạn chọn. Chăm sóc sức khỏe, thương mại điện tử, nghiên cứu và nhiều lĩnh vực khác. Tất cả các ngành đều yêu cầu các tài liệu phải được xử lý và các thực thể quan trọng phải được trích xuất và liên kết. Hãy thử một ý tưởng khác.

Một ý tưởng đơn giản là trích xuất tất cả các thực thể quan trọng của một bài nghiên cứu và sau đó tạo một biểu đồ kiến ​​thức về nó bằng cách sử dụng Google Tìm kiếm API.

Ngoài ra, nếu bạn muốn đưa ứng dụng nguồn cấp tin tức chứng khoán lên một cấp độ khác, bạn có thể thêm một số thuật toán giao dịch để tạo tín hiệu mua và bán.

Tôi khuyến khích bạn phát huy trí tưởng tượng của mình.

Làm thế nào bạn có thể kết nối với tôi!

 
 
Nếu bạn thích bài đăng này và muốn xem thêm nội dung như vậy, bạn có thể đăng ký bản tin của tôi or kênh YouTube của tôi nơi tôi sẽ tiếp tục chia sẻ những dự án hữu ích và nhanh chóng mà một người có thể xây dựng.

Nếu bạn là người mới bắt đầu lập trình hoặc muốn tham gia vào khoa học dữ liệu hoặc ML, bạn có thể xem khóa học của tôi tại Học viện WIP Lane.

Cảm ơn Elliot Gunn.

 
Tiểu sử: khắc nghiệt tyagi là một kỹ sư có kinh nghiệm tổng hợp về công nghệ web và khoa học dữ liệu (hay còn gọi là khoa học dữ liệu toàn ngăn xếp). Anh ấy đã cố vấn cho hơn 1000 người khao khát AI / Web / Khoa học Dữ liệu và đang thiết kế các bài học về khoa học dữ liệu và kỹ thuật ML. Trước đây, Harshit đã phát triển các thuật toán xử lý dữ liệu với các nhà khoa học nghiên cứu tại Yale, MIT và UCLA.

Nguyên. Đăng lại với sự cho phép.

Liên quan:

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

Dấu thời gian:

Thêm từ Xe đẩy