Python、SpaCy、Streamlitを使用した構造化された金融ニュースフィードの構築

ソースノード: 1876513

Python、SpaCy、Streamlitを使用した構造化された金融ニュースフィードの構築

Named Entity Recognition(NER)アプリケーションを構築してNLPを使い始める。


By ハルシット・ティアギ、データサイエンスインストラクター| メンター| YouTuber


Python、SpaCy、Streamlitを使用した構造化された金融ニュースフィードの構築

NLPの非常に興味深く広く使用されているアプリケーションのXNUMXつは、固有表現抽出(NER)です。

生データと非構造化データから洞察を得ることが非常に重要です。 ドキュメントをアップロードし、そこから重要な情報を取得することを情報検索と呼びます。

情報検索は、NLPの主要なタスク/課題でした。 また、NER(またはNEL — Named Entity Linking)は、情報検索の目的でいくつかのドメイン(金融、医薬品、eコマースなど)で使用されています。

このチュートリアル投稿では、NELを活用して、インターネット上の話題の株式を一覧表示するカスタム株式市場ニュースフィードを開発する方法を紹介します。

前提条件

 
 
そのような前提条件はありません。 Pythonと、トークン化、POSタグ付け、依存関係解析などのNLPの基本的なタスクにある程度精通している必要がある場合があります。

重要な部分について詳しく説明しますので、完全な初心者であっても、何が起こっているのか頭を悩ませることができます。

それでは、それを続けて、それに従ってください。そうすれば、調査を開始できる最小限の株式ニュースフィードが得られます。

必要なツール/セットアップ:

 
 

  1. データとSpaCyライブラリの初期テストと調査のためのGoogleColab。
  2. StreamlitアプリケーションをコーディングするためのVSCode(または任意のエディター)。
  3. NER以降NELを実施する株式市場情報(ニュース)の出典。
  4. Pandas、SpaCy、Streamlit、Streamlit-Spacy(SpaCyレンダリングを表示したい場合)などのライブラリとともに仮想Python環境(私はcondaを使用しています)。

DevOps Tools Engineer試験のObjective

 
 
このプロジェクトの目標は、名前付きエンティティ認識を学習して適用し、重要なエンティティ(この例では上場企業)を抽出し、ナレッジベース(Nifty500企業リスト)を使用して各エンティティをいくつかの情報にリンクすることです。

インターネット上のRSSフィードからテキストデータを取得し、話題の株の名前を抽出し、市場価格データを取得してニュースの信憑性をテストしてから、それらの株のポジションを取得します。


注:NERは最先端の問題ではないかもしれませんが、業界では多くの用途があります。


実験とテストのためにGoogleColabに移動します。

ステップ1:トレンドの株式ニュースデータを抽出する

 
 
信頼できる本物の株式市場のニュースを入手するために、私は エコノミック·タイムズ および マネーコントロール このチュートリアルのRSSフィードですが、国のRSSフィードまたはTwitter / Telegram(groups)データを使用/追加して、フィードをより有益で正確にすることもできます。

チャンスは計り知れません。 このチュートリアルは、さまざまな種類の情報検索の問題を解決するさまざまなドメインでアプリを構築するために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')

これにより、Pythonリスト内のすべての見出しが表示されます。



著者による画像

 

素晴らしいことに、NLPを使用して主要なエンティティ(この場合は上場企業)を抽出するテキストデータがあります。

NLPを実行に移す時が来ました。

ステップ2:見出しからエンティティを抽出する

 
 
これはエキサイティングな部分です。 を使用します 事前にトレーニングされたコア言語モデル   spaCy 見出しの主要なエンティティを抽出するためのライブラリ。

spaCyとコアモデルについて少し。

スパシー は、テキストデータを超高速で処理するオープンソースのNLPライブラリです。 これは、エンタープライズグレードのアプリケーションで大規模に使用されているNLP研究の主要なライブラリです。 spaCyは、問題に合わせてスケーリングすることでよく知られています。 また、64以上の言語をサポートし、TensorFlowとPyTorchの両方でうまく機能します。

コアモデルについて言えば、spaCyには、最先端の推論を提供するために、さまざまなサイズのテキストデータでトレーニングされたXNUMXつの主要なクラスの事前トレーニング済み言語モデルがあります。

  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が含まれます。

ここで、このモデルで何ができるかをテストするために、インスタンス化されたモデルにXNUMXつの見出しを渡し、文のさまざまな部分を確認します。

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

パイプラインは、トークン化からNERまでのすべてのタスクを実行します。 ここに最初にトークンがあります:



著者による画像

 

タグ付けされた品詞は、 pos_ 属性。



著者による画像

 

各トークンは、いくつかのメタデータでタグ付けされています。 たとえば、Tradeは固有名詞、Setupは名詞、 : 句読点などです。 タグの全リストが表示されます こちら.

次に、を使用して依存関係グラフを確認することで、それらがどのように関連しているかを確認できます。 dep_ 属性:



著者による画像

 

ここで、Tradeは複合、Setupはルート、Niftyはappos(同格修飾子)です。 繰り返しますが、すべての構文タグを見つけることができます こちら.

次の表示を使用して、トークン間の関係の依存関係を視覚化することもできます render() 方法:

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

これにより、このグラフが得られます。



著者による画像

 

エンティティの抽出

 
 
そして、文の重要な実体を見るために、あなたは渡すことができます 'ent’ 同じコードのスタイルとして:



著者による画像—上記で使用した見出しにはエンティティがなかったため、別の見出しを使用しました。

 

日にはDATEがあり、Glasscoatには国/都市/州のGPEがあるなど、エンティティごとに異なるタグがあります。 私たちは主に、会社、代理店、機関などを提供するORGタグを持つエンティティを探しています。

これで、テキストからエンティティを抽出できるようになりました。 ORGエンティティを使用してすべてのヘッドラインから組織を抽出することに取り掛かりましょう。

これにより、すべての会社のリストが次のように返されます。



著者による画像

 

それで簡単ですよね?

それが今のspaCyの魔法です!

次のステップは、ナレッジベースでこれらすべての企業を検索してその企業に適した銘柄記号を抽出し、yahoo-financeなどのライブラリを使用して価格や収益などの市場の詳細を抽出することです。

ステップ3—名前付きエンティティリンキング

 
 
市場で話題になっている株について学び、ダッシュボードでその詳細を取得することが、このプロジェクトの目標です。

会社名はありますが、取引の詳細を取得するには、会社の取引銘柄記号が必要です。

インド企業の詳細やニュースを抽出しているので、の外部データベースを使用します。 気の利いた500社(CSVファイル)。

すべての企業について、パンダを使用している企業のリストで検索し、次に、パンダを使用して株式市場の統計を取得します。 ヤフーファイナンス としょうかん。

著者による画像

 

ここで注意すべきことのXNUMXつは、各銘柄記号の後に「.NS」を追加してから、 Ticker のクラス yfinance 図書館。 これは、インドのNSE銘柄記号が .NS の接尾辞 yfinance.

そして、賑やかな株は、以下のようなデータフレームに表示されます。



著者による画像

 

出来上がり! これは素晴らしいことではありませんか? 適切な株で正しい方向にあなたを向けることができるそのようなシンプルでありながら深遠なアプリ。

これで、よりアクセスしやすくするために、Streamlitを使用して作成したコードからWebアプリケーションを作成できます。

ステップ4—Streamlitを使用してWebアプリを構築する

 
 
エディターに移動して、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。 Webブラウザでアプリが開くはずです。

複数のソースからデータをキャプチャするための機能をいくつか追加しました。 これで、選択したRSSフィードURLをアプリケーションに追加できます。データが処理され、トレンドの株式がデータフレームに表示されます。

コードベース全体にアクセスするには、ここで私のリポジトリをチェックしてください。

 
GitHub – dswh / NER_News_Feed
 

複数のスタイリング要素、さまざまなデータソース、およびその他のタイプの処理を追加して、より効率的で便利なものにすることができます。

現在の状態の私のアプリは、バナーの画像のように見えます。

ステップバイステップで私をフォローしたい場合は、ここでこのアプリケーションをコーディングするのを見てください:

次のステップ!

 
 
経済的なユースケースを選択する代わりに、他の任意のアプリケーションを選択することもできます。 ヘルスケア、eコマース、研究、その他多数。 すべての業界では、ドキュメントを処理し、重要なエンティティを抽出してリンクする必要があります。 別のアイデアを試してみてください。

簡単なアイデアは、研究論文のすべての重要なエンティティを抽出し、Google SearchAPIを使用してその知識グラフを作成することです。

また、株式ニュースフィードアプリを別のレベルに引き上げたい場合は、いくつかの取引アルゴリズムを追加して、売買シグナルを生成することもできます。

私はあなたがあなたの想像力でワイルドになることをお勧めします。

どうやって私とつながることができますか!

 
 
この投稿が好きで、そのようなコンテンツをもっと見たい場合は、サブスクライブできます 私のニュースレター or 私のYouTubeチャンネル ここでは、構築できる便利で迅速なプロジェクトを共有し続けます。

プログラミングを始めたばかりの人、またはデータサイエンスやMLを始めたい人は、次のURLで私のコースをチェックしてください。 WIPレーンアカデミー.

エリオットガンに感謝します。

 
バイオ: ハルシット・ティアギ は、Webテクノロジーとデータサイエンス(別名フルスタックデータサイエンス)の分野で融合した経験を持つエンジニアです。 彼は1000人以上のAI / Web /データサイエンス志願者を指導し、データサイエンスとMLエンジニアリングの学習トラックを設計しています。 以前、Harshitは、エール大学、MIT、およびUCLAの研究科学者とデータ処理アルゴリズムを開発しました。

元の。 許可を得て転載。

関連する

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

タイムスタンプ:

より多くの KDナゲット