import pandas as pd
from bs4 import BeautifulSoup
import requests
from deep_translator import GoogleTranslator
from transformers import pipeline
Giriş
Finans dünyası, her gün çok sayıda yatırımcı ve profesyonel için hayati öneme sahip bilgilerle doludur. Hisse senetleri, piyasa hareketleri ve ekonomik göstergeler gibi konular, yatırımcıların kararlarını doğrudan etkiler. Ancak bu bilgilerin nasıl yorumlandığı ve hissedilen duygular da yatırım stratejilerinde kritik bir rol üstlenir. Buradan hareketle, Türkçe finans haberlerinde duygu sınıflandırması konusunu ele alacağız.
Başlangıç noktamız, Türkçe finans haberlerinden elde edilen başlıkları çekip İngilizceye çeviren bir veri işleme sürecidir. Ardından, bu başlıkları duygu analizi yapabilen bir yapay zeka modeli üzerinden değerlendireceğiz.
İlk adım olarak, bu hafta içerisinde yayın hayatına başlayan cnbc-e’den finans haberlerini çekiyoruz ve başlıkları analiz için hazırlıyoruz. Ardından, Google Çeviri aracılığıyla Türkçe başlıkları İngilizceye çeviriyoruz. Bu adım, finans haberlerine erişim sağlayarak dil bariyerlerini aşmamıza yardımcı olur. Daha sonra, derin öğrenme tabanlı bir duygu analizi modeli kullanarak çevrilen başlıkların duygu tonlamalarını değerlendiriyoruz. Bu model, her başlığın olumlu, olumsuz veya nötr olarak sınıflandırılmasına olanak tanır. Bu sayede, finans haberlerinin yatırımcılar üzerindeki duygusal etkilerini anlama ve analiz etme yeteneğimizi artırabiliriz.
Sonuçlarımızı görsel olarak sunmak için etiketlenmiş başlıkları renklendiriyoruz. Bu, her bir başlığın duygusal tonunu hızlıca görselleştirmemize ve verileri daha anlamlı hale getirmemize yardımcı olur.
Kullanılacak Kütüphaneler
Haber Başlıklarının Elde Edilmesi
= "https://www.cnbce.com/piyasalar"
url
= requests.get(url)
response = BeautifulSoup(response.content, 'html.parser')
soup = soup.find_all('div', class_='post-card-title')
post_cards
= []
titles for post_card in post_cards:
= post_card.find('a')
a_tag if a_tag:
= a_tag.get_text().strip()
text titles.append(text)
İngilizce Çevirilerin Yapılması
= []
translated_titles for title in titles:
= GoogleTranslator(source='auto', target='en').translate(title)
translated_title
translated_titles.append(translated_title)
= pd.DataFrame({'Turkish': titles, 'English': translated_titles}) df
Duygu Sınıflandırması
Pipeline’ın Oluşturulması
= pipeline(
sentiment_analysis 'sentiment-analysis',
='soleimanian/financial-roberta-large-sentiment'
model )
Financial-RoBERTa adlı önceden eğitilmiş doğal dil işleme modeli, finansal metinlerin duygusunu analiz etmek için özel olarak tasarlanmıştır. Bu metinler arasında finansal beyanlar (financial statements), kazanç duyuruları (earnings announcements), kazanç çağrısı metinleri (earnings call transcripts), kurumsal sosyal sorumluluk (CSR) raporları (corporate social responsibility (CSR) reports), çevresel, sosyal ve yönetişim (ESG) haberleri (environmental, social, and governance (ESG) news), finansal haberler (financial news) gibi çeşitli belgeler bulunmaktadır.
Financial-RoBERTa, RoBERTa büyük dil modelini temel alarak daha fazla eğitim ve ayarlama ile oluşturulmuştur. Bu süreçte, 10K ve 10Q raporları, 8K bildirimleri, kazanç çağrısı transkriptleri, CSR raporları, ESG haberleri ve finansal haberler gibi geniş bir metin korpusu kullanılmıştır.
Model, metin girdilerini alır ve bu metinlerin duygu durumunu belirlemek için softmax çıktılarını üretir. Çıktılar üç temel etiket üzerinden tanımlanır: Pozitif, Negatif veya Nötr.
Financial-RoBERTa’nın temel amacı, bu çeşitli finansal belgeleri otomatik olarak analiz ederek, yatırımcıların ve finans profesyonellerinin büyük veri setleri içindeki önemli bilgileri daha hızlı ve etkili bir şekilde keşfetmelerine yardımcı olmaktır.
Duyguların Oluşturulması
= []
results for english_title in df['English']:
= sentiment_analysis(english_title)
result 0])
results.append(result[
'Label'] = [res['label'].title() for res in results]
df['Score'] = [res['score'] for res in results] df[
Sonuçların Veri Çerçevesinde Renklendirilerek Gösterilmesi
def color_label(val):
= ''
color if val == 'Positive':
= 'background-color: skyblue; color: black'
color elif val == 'Negative':
= 'background-color: lightcoral; color: black'
color elif val == 'Neutral':
= 'background-color: lightgrey; color: black'
color return color
= df.style.applymap(color_label, subset=['Label']) styled_df
Gelecek içeriklerde görüşmek dileğiyle.