Criação de um feed de notícias financeiro estruturado usando Python, SpaCy e Streamlit

Nó Fonte: 1876513

Criação de um feed de notícias financeiro estruturado usando Python, SpaCy e Streamlit

Começar a usar a PNL construindo um aplicativo Named Entity Recognition (NER).


By Harshit Tyagi, Instrutor de ciência de dados | Mentor | YouTuber


Criação de um feed de notícias financeiro estruturado usando Python, SpaCy e Streamlit

Uma das aplicações muito interessantes e amplamente utilizadas da PNL é o Named Entity Recognition (NER).

Obter insights de dados brutos e não estruturados é de vital importância. Carregar um documento e obter informações importantes dele é chamado de recuperação de informações.

A recuperação de informações tem sido uma grande tarefa / desafio na PNL. E o NER (ou NEL - Named Entity Linking) é usado em vários domínios (finanças, medicamentos, e-commerce, etc.) para fins de recuperação de informações.

Nesta postagem do tutorial, mostrarei como você pode aproveitar a NEL para desenvolver um feed de notícias do mercado de ações personalizado que lista as ações em alta na Internet.

Pré-requisitos

 
 
Não existem pré-requisitos como tal. Você pode precisar ter alguma familiaridade com python e as tarefas básicas de PNL, como tokenização, marcação de POS, análise de dependência, etc.

Vou cobrir as partes importantes com mais detalhes, então, mesmo se você for um iniciante, será capaz de entender o que está acontecendo.

Então, vamos em frente, acompanhe e você terá um feed de notícias de ações mínimo que pode começar a pesquisar.

Ferramentas / configuração de que você precisa:

 
 

  1. Google Colab para teste inicial e exploração de dados e da biblioteca SpaCy.
  2. VS Code (ou qualquer editor) para codificar o aplicativo Streamlit.
  3. Fonte de informações sobre o mercado de ações (notícias) sobre as quais realizaremos o NER e posteriormente o NEL.
  4. Um ambiente python virtual (estou usando conda) junto com bibliotecas como Pandas, SpaCy, Streamlit, Streamlit-Spacy (se você quiser mostrar alguns renderizadores SpaCy.)

Objetivo

 
 
O objetivo deste projeto é aprender e aplicar o Reconhecimento de Entidade Nomeada para extrair entidades importantes (empresas de capital aberto em nosso exemplo) e, em seguida, vincular cada entidade com algumas informações usando uma base de conhecimento (lista de empresas Nifty500).

Obteremos os dados textuais de feeds RSS na Internet, extrairemos os nomes das ações em alta e, em seguida, obteremos seus dados de preços de mercado para testar a autenticidade das notícias antes de assumir qualquer posição nessas ações.


Nota: NER pode não ser um problema de última geração, mas tem muitas aplicações na indústria.


Passando para o Google Colab para experimentação e teste:

Etapa 1: extração dos dados de notícias de tendências de ações

 
 
Para obter algumas notícias confiáveis ​​e autênticas do mercado de ações, estarei usando Economic Times e Controle de dinheiro Feeds RSS para este tutorial, mas você também pode usar / adicionar feeds RSS do seu país ou dados do Twitter / Telegram (grupos) para tornar seu feed mais informativo / preciso.

As oportunidades são imensas. Este tutorial deve servir como um trampolim para aplicar o NEL para criar aplicativos em diferentes domínios, resolvendo diferentes tipos de problemas de recuperação de informações.

Se você continuar a olhar o feed RSS, terá a seguinte aparência:

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


 

Nosso objetivo é obter as manchetes textuais deste feed RSS e então usaremos o SpaCy para extrair as entidades principais das manchetes.

As manchetes estão presentes dentro do tag do XML aqui.

Em primeiro lugar, precisamos capturar todo o documento XML e podemos usar o requests biblioteca para fazer isso. Certifique-se de ter esses pacotes instalados em seu ambiente de execução no colab.

Você pode executar o seguinte comando para instalar quase qualquer pacote direto da célula de código de um colab:

!pip install <package_name>

Enviar um GET solicitar no link fornecido para capturar o documento XML.

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

Execute a célula para verificar o que você obtém no objeto de resposta.

Ele deve fornecer uma resposta bem-sucedida com o código HTTP 200 da seguinte maneira:



Agora que você tem esse objeto de resposta, podemos passar seu conteúdo para a classe BeautifulSoup para analisar o documento XML da seguinte maneira:

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

Isso deve fornecer a você todas as manchetes dentro de uma lista Python:



Imagem do autor

 

Incrível, temos os dados textuais dos quais extrairemos as principais entidades (que são empresas de capital aberto, neste caso) usando a PNL.

É hora de colocar a PNL em ação.

Etapa 2: extração de entidades das manchetes

 
 
Esta é a parte emocionante. Estaremos usando um modelo de linguagem central pré-treinado do spaCy biblioteca para extrair as entidades principais em um título.

Um pouco sobre spaCy e os modelos principais.

ESPAÇO é uma biblioteca de PNL de código aberto que processa dados textuais em uma velocidade super rápida. É a biblioteca líder em pesquisa de PNL que está sendo usada em aplicativos de nível empresarial em escala. spaCy é conhecida por escalar com o problema. E é compatível com mais de 64 idiomas e funciona bem com TensorFlow e PyTorch.

Falando sobre modelos centrais, spaCy tem duas classes principais de modelos de linguagem pré-treinados que são treinados em diferentes tamanhos de dados textuais para nos fornecer inferências de última geração.

  1. Modelos principais - para tarefas básicas de PNL de uso geral.
  2. Modelos iniciais - para aplicações de nicho que requerem aprendizagem por transferência. Podemos aproveitar os pesos aprendidos do modelo para ajustar nossos modelos personalizados sem ter que treinar o modelo do zero.

Uma vez que nosso caso de uso é básico neste tutorial, vamos ficar com o en_core_web_sm pipeline de modelo de núcleo.

Então, vamos carregar isso em nosso notebook:

nlp = spacy.load("en_core_web_sm")

Observação: O Colab já baixou isso para nós, mas se você tentar executá-lo em seu sistema local, primeiro terá que baixar o modelo usando o seguinte comando:

python -m spacy download en_core_web_sm

en_core_web_sm é basicamente um pipeline em inglês otimizado para CPU que tem os seguintes componentes:

  • tok2vec - token para vetores (executa tokenização nos dados textuais),
  • tagger - adiciona metadados relevantes a cada token. spaCy usa alguns modelos estatísticos para prever a classe gramatical (POS) de cada token. Mais no documentação.
  • analisador - o analisador de dependência estabelece relacionamentos entre os tokens.
  • Outros componentes incluem senter, ner, attribute_ruler, lemmatizer.

Agora, para testar o que esse modelo pode fazer por nós, vou passar um único título pelo modelo instanciado e, em seguida, verificar as diferentes partes de uma frase.

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

O pipeline executa todas as tarefas, desde a tokenização até o NER. Aqui temos os tokens primeiro:



Imagem do autor

 

Você pode ver a classe gramatical marcada usando o pos_ atributo.



Imagem do autor

 

Cada token é marcado com alguns metadados. Por exemplo, Comércio é um substantivo adequado, Configuração é um substantivo, : é pontuação, assim por diante e assim por diante. Toda a lista de tags é fornecida SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

E então, você pode ver como eles estão relacionados, olhando para o gráfico de dependência usando dep_ atributo:



Imagem do autor

 

Aqui, o comércio é um composto, a configuração é a raiz, o bacana é apos (modificador aposicional). Novamente, todas as tags sintáticas podem ser encontradas SUA PARTICIPAÇÃO FAZ A DIFERENÇA.

Você também pode visualizar as dependências de relacionamento entre os tokens usando o seguinte displacy render() método:

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

que dará a este gráfico:



Imagem do autor

 

Extração de entidade

 
 
E para olhar para as entidades importantes da frase, você pode passar 'ent’ como estilo no mesmo código:



Imagem do autor - usei outro título porque o que usamos acima não tinha entidades.

 

Temos tags diferentes para entidades diferentes, como o dia tem DATA, Glasscoat tem GPE, que pode ser Países / Cidades / Estados. Estamos principalmente à procura de entidades que tenham uma etiqueta ORG que nos forneça empresas, agências, instituições, etc.

Agora somos capazes de extrair entidades do texto. Vamos começar a extrair as organizações de todas as manchetes usando entidades ORG.

Isso retornará uma lista de todas as empresas da seguinte forma:



Imagem do autor

 

Tão fácil, certo?

Essa é a magia do spaCy agora!

A próxima etapa é pesquisar todas essas empresas em uma base de conhecimento para extrair o símbolo de ação certo para essa empresa e, em seguida, usar bibliotecas como yahoo-finance para extrair seus detalhes de mercado, como preço, retorno, etc.

Etapa 3 - Vinculação de entidade nomeada

 
 
Saber quais ações estão em alta no mercado e obter seus detalhes em seu painel é o objetivo deste projeto.

Temos os nomes das empresas, mas para obter os detalhes comerciais, precisaremos do símbolo das ações comerciais da empresa.

Visto que estou extraindo detalhes e notícias de empresas indianas, vou usar um banco de dados externo de Nifty 500 empresas (um arquivo CSV).

Para cada empresa, vamos procurá-la na lista de empresas que usam o pandas e, em seguida, capturar as estatísticas do mercado de ações usando o Google-finanças biblioteca.

Imagem do autor

 

Uma coisa que você deve notar aqui é que adicionei um “.NS” após cada símbolo de ação antes de passá-lo para o Ticker classe do yfinance biblioteca. É porque os símbolos de ações indianos NSE são armazenados com um .NS sufixo em yfinance.

E as ações agitadas apareceriam em um dataframe como a seguir:



Imagem do autor

 

Voila! não é ótimo? Um aplicativo tão simples, mas profundo, que pode apontar a direção certa com as ações certas.

Agora, para torná-lo mais acessível, podemos criar um aplicativo da web a partir do código que acabamos de escrever usando o Streamlit.

Etapa 4 - Construindo um aplicativo da web usando Streamlit

 
 
É hora de ir para um editor e criar um novo projeto e ambiente virtual para o aplicativo PNL.

Começar a usar o Streamlit é muito fácil para esses aplicativos de dados de demonstração. Certifique-se de ter streamlit instalado.

pip install Streamlit

Agora, vamos criar um novo arquivo chamado app.py e começar a escrever código funcional para preparar o aplicativo.

Importe todas as bibliotecas necessárias na parte superior.

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

Adicione um título ao seu aplicativo:

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

Teste seu aplicativo executando streamlit run app.py em seu terminal. Deve abrir um aplicativo em seu navegador da web.

Eu adicionei algumas funcionalidades extras para capturar dados de fontes múltiplas. Agora, você pode adicionar um URL de feed RSS de sua escolha ao aplicativo e os dados serão processados ​​e as ações em alta serão exibidas em um dataframe.

Para obter acesso a toda a base de código, você pode verificar meu repositório aqui:

 
GitHub - dswh / NER_News_Feed
 

Você pode adicionar vários elementos de estilo, diferentes fontes de dados e outros tipos de processamento para torná-lo mais eficiente e útil.

Meu aplicativo em seu estado atual se parece com a imagem no banner.

Se você quiser me seguir passo a passo, observe-me codificar este aplicativo aqui:

Próximos passos!

 
 
Em vez de escolher um caso de uso financeiro, você também pode escolher qualquer outro aplicativo de sua escolha. Saúde, comércio eletrônico, pesquisa e muitos outros. Todos os setores exigem que os documentos sejam processados ​​e que entidades importantes sejam extraídas e vinculadas. Experimente outra ideia.

Uma ideia simples é extrair todas as entidades importantes de um artigo de pesquisa e, em seguida, criar um gráfico de conhecimento dele usando a API de pesquisa do Google.

Além disso, se quiser levar o aplicativo de feed de notícias de ações a outro nível, você pode adicionar alguns algoritmos de negociação para gerar sinais de compra e venda também.

Eu encorajo você a enlouquecer com sua imaginação.

Como você pode se conectar comigo!

 
 
Se você gostou desta postagem e gostaria de ver mais desse tipo de conteúdo, você pode se inscrever em minha newsletter or meu canal do YouTube onde continuarei compartilhando projetos úteis e rápidos que podem ser construídos.

Se você está apenas começando a programar ou quer entrar em ciência de dados ou ML, pode conferir meu curso em Academia WIP Lane.

Graças a Elliot Gunn.

 
Bio: Harshit Tyagi é um engenheiro com experiência amalgamada em tecnologias da web e ciência de dados (também conhecida como ciência de dados full-stack). Ele orientou mais de 1000 aspirantes a AI / Web / Data Science e está desenvolvendo trilhas de aprendizagem de engenharia de ML e ciência de dados. Anteriormente, Harshit desenvolveu algoritmos de processamento de dados com cientistas pesquisadores de Yale, MIT e UCLA.

Óptimo estado. Original. Republicado com permissão.

Relacionado:

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

Carimbo de hora:

Mais de KDnuggetsGenericName