Python, SpaCy 및 Streamlit을 사용하여 구조화된 금융 뉴스피드 구축

소스 노드 : 1876513

Python, SpaCy 및 Streamlit을 사용하여 구조화된 금융 뉴스피드 구축

NER(Named Entity Recognition) 애플리케이션을 빌드하여 NLP를 시작합니다.


By 가혹한 티아기, 데이터 과학 강사 | 멘토 | 유튜버


Python, SpaCy 및 Streamlit을 사용하여 구조화된 금융 뉴스피드 구축

NLP의 매우 흥미롭고 널리 사용되는 응용 프로그램 중 하나는 NER(Named Entity Recognition)입니다.

원시 및 비정형 데이터에서 통찰력을 얻는 것은 매우 중요합니다. 문서를 업로드하고 문서에서 중요한 정보를 얻는 것을 정보 검색이라고 합니다.

정보 검색은 NLP의 주요 작업/도전이었습니다. 그리고 NER(또는 NEL — Named Entity Linking)은 정보 검색 목적으로 여러 도메인(금융, 약물, 전자 상거래 등)에서 사용됩니다.

이 튜토리얼 게시물에서는 NEL을 활용하여 인터넷에서 윙윙거리는 주식을 나열하는 맞춤형 주식 시장 뉴스 피드를 개발하는 방법을 보여 드리겠습니다.

사전 요구 사항

 
 
그런 전제 조건이 없습니다. Python과 토큰화, POS 태깅, 종속성 구문 분석 등과 같은 NLP의 기본 작업에 대해 어느 정도 익숙해야 할 수도 있습니다.

중요한 부분을 더 자세히 다루므로 완전한 초보자라도 무슨 일이 일어나고 있는지 머리를 감쌀 수 있습니다.

따라서 계속 진행하고 따라가면 조사를 시작할 수 있는 최소한의 주식 뉴스 피드를 갖게 됩니다.

필요한 도구/설정:

 
 

  1. 데이터 및 SpaCy 라이브러리의 초기 테스트 및 탐색을 위한 Google Colab.
  2. Streamlit 애플리케이션을 코딩하기 위한 VS Code(또는 모든 편집기).
  3. NER 및 이후 NEL을 수행할 주식 시장 정보(뉴스)의 출처.
  4. Pandas, SpaCy, Streamlit, Streamlit-Spacy(일부 SpaCy 렌더를 표시하려는 경우)와 같은 라이브러리와 함께 가상 파이썬 환경(conda 사용)

목표

 
 
이 프로젝트의 목표는 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단계: 헤드라인에서 항목 추출

 
 
이것은 흥미로운 부분입니다. 우리는 사용할 것입니다 사전 훈련된 핵심 언어 모델 인사말 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 — 벡터에 대한 토큰(텍스트 데이터에 대해 토큰화 수행),
  • tagger — 각 토큰에 관련 메타데이터를 추가합니다. spaCy는 일부 통계 모델을 사용하여 각 토큰의 품사(POS)를 예측합니다. 더 많은 선적 서류 비치.
  • 파서 — 종속성 파서는 토큰 간의 관계를 설정합니다.
  • 다른 구성 요소에는 sender, ner, attribute_ruler, lemmatizer가 포함됩니다.

이제 이 모델이 우리를 위해 무엇을 할 수 있는지 테스트하기 위해 인스턴스화된 모델을 통해 단일 헤드라인을 전달한 다음 문장의 다른 부분을 확인하겠습니다.

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

파이프라인은 토큰화에서 NER까지 모든 작업을 수행합니다. 여기에 토큰이 먼저 있습니다.



작성자의 이미지

 

다음을 사용하여 태그가 지정된 품사를 볼 수 있습니다. pos_ 속성을 사용하지 않는 것입니다.



작성자의 이미지

 

각 토큰에는 일부 메타데이터가 태그로 지정됩니다. 예를 들어 Trade는 고유명사, Setup은 명사, : 구두점 등입니다. 전체 태그 목록이 제공됩니다. 여기에서 지금 확인해 보세요..

그런 다음 다음을 사용하여 종속성 그래프를 보면 이들이 어떻게 관련되어 있는지 확인할 수 있습니다. dep_ 속성:



작성자의 이미지

 

여기서 Trade는 복합, Setup은 Root, Nifty는 appos(어포지션 수식어)입니다. 다시 말하지만, 모든 구문 태그를 찾을 수 있습니다. 여기에서 지금 확인해 보세요..

다음 디스플레이를 사용하여 토큰 간의 관계 종속성을 시각화할 수도 있습니다. render() 방법:

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

이것은 이 그래프를 줄 것입니다:



작성자의 이미지

 

엔티티 추출

 
 
그리고 문장의 중요한 요소를 보기 위해 다음을 전달할 수 있습니다. 'ent’ 같은 코드에서 스타일로:



작성자 이미지 — 위에서 사용한 헤드라인에는 엔티티가 없었기 때문에 다른 헤드라인을 사용했습니다.

 

날짜에는 날짜가 있고 Glasscoat에는 국가/도시/주가 될 수 있는 GPE가 있는 것과 같이 엔티티에 대해 서로 다른 태그가 있습니다. 우리는 주로 회사, 대행사, 기관 등을 제공할 ORG 태그가 있는 엔터티를 찾고 있습니다.

이제 텍스트에서 엔터티를 추출할 수 있습니다. ORG 엔터티를 사용하여 모든 헤드라인에서 조직을 추출하는 방법에 대해 알아보겠습니다.

그러면 다음과 같이 모든 회사 목록이 반환됩니다.



작성자의 이미지

 

너무 쉽죠?

이것이 바로 spaCy의 마법입니다!

다음 단계는 지식 기반에서 이러한 모든 회사를 찾아 해당 회사에 적합한 주식 기호를 추출한 다음 yahoo-finance와 같은 라이브러리를 사용하여 가격, 수익 등과 같은 시장 세부 정보를 추출하는 것입니다.

3단계 - 명명된 엔터티 연결

 
 
시장에서 윙윙거리는 주식에 대해 알아보고 대시보드에 세부 정보를 얻는 것이 이 프로젝트의 목표입니다.

우리는 회사 이름을 가지고 있지만 거래 세부 정보를 얻으려면 회사의 거래 주식 기호가 필요합니다.

나는 인도 회사의 세부 사항과 뉴스를 추출하기 때문에 외부 데이터베이스를 사용할 것입니다. 멋진 500개 기업(CSV 파일).

모든 회사에 대해 팬더를 사용하는 회사 목록에서 찾아보고 다음을 사용하여 주식 시장 통계를 캡처합니다. 야후 금융 도서관.

작성자의 이미지

 

여기서 주목해야 할 한 가지는 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.p터미널에서 y. 웹 브라우저에서 앱을 열어야 합니다.

여러 소스에서 데이터를 캡처하는 몇 가지 추가 기능을 추가했습니다. 이제 선택한 RSS 피드 URL을 응용 프로그램에 추가할 수 있으며 데이터가 처리되고 추세 주식이 데이터 프레임에 표시됩니다.

전체 코드 기반에 액세스하려면 여기에서 내 저장소를 확인할 수 있습니다.

 
GitHub – dswh/NER_News_Feed
 

여러 스타일 요소, ​​다양한 데이터 소스 및 기타 유형의 처리를 추가하여 보다 효율적이고 유용하게 만들 수 있습니다.

현재 상태의 내 앱은 배너의 이미지와 같습니다.

저를 단계별로 따르고 싶다면 여기에서 이 애플리케이션을 코딩하는 것을 지켜보십시오.

다음 단계!

 
 
재정적 사용 사례를 선택하는 대신 원하는 다른 애플리케이션을 선택할 수도 있습니다. 의료, 전자 상거래, 연구 및 기타 여러 분야. 모든 산업은 문서를 처리하고 중요한 엔터티를 추출 및 연결해야 합니다. 다른 아이디어를 시도하십시오.

간단한 아이디어는 연구 논문의 모든 중요한 항목을 추출한 다음 Google 검색 API를 사용하여 지식 그래프를 만드는 것입니다.

또한 주식 뉴스 피드 앱을 다른 수준으로 끌어올리려면 몇 가지 거래 알고리즘을 추가하여 매수 및 매도 신호를 생성할 수도 있습니다.

나는 당신이 당신의 상상력을 마음껏 펼칠 수 있도록 격려합니다.

어떻게 저와 연결할 수 있습니다!

 
 
이 게시물이 마음에 들었고 그러한 콘텐츠를 더 보고 싶다면 구독할 수 있습니다. 내 뉴스 레터 or 내 YouTube 채널 여기서 저는 구축할 수 있는 유용하고 빠른 프로젝트를 계속 공유할 것입니다.

프로그래밍을 이제 막 시작하거나 데이터 과학 또는 ML에 입문하려는 사람이라면 다음에서 제 과정을 확인할 수 있습니다. WIP 레인 아카데미.

Elliot Gunn에게 감사드립니다.

 
바이오 : 가혹한 티아기 웹 기술과 데이터 사이언스(풀스택 데이터 사이언스라고도 함)에서 융합된 경험을 가진 엔지니어입니다. 그는 1000명 이상의 AI/웹/데이터 과학 지망자들을 멘토링했으며 데이터 과학 및 ML 엔지니어링 학습 트랙을 설계하고 있습니다. 이전에 Harshit은 Yale, MIT 및 UCLA의 연구 과학자들과 함께 데이터 처리 알고리즘을 개발했습니다.

실물. 허가를 받아 다시 게시했습니다.

관련 :

출처: https://www.kdnuggets.com/2021/09/-structured-financial-newsfeed-using-python-spacy-and-streamlit.html

타임 스탬프 :

더보기 너 겟츠