Навчання NLP-моделі для аналізу крипто-новин

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Навчання NLP-моделі для аналізу крипто-новин
Складний
~1-2 тижні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1122
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    859

Навчання NLP-моделі для аналізу крипто-новин

Новинний потік — один з найбільш інформативних джерел для розуміння рухів ринку. Великі регуляторні рішення, хаки, оголошення про партнерства, технологічні оновлення — всё це матеріалізується в новинах за кілька хвилин до відображення в ціні. NLP-модель, здатна обробляти новинний потік в реальному часі, дає часову перевагу.

Збір новинних даних

Джерела та API:

  • CryptoPanic API: агрегатор крипто-новин, API безплатний (з обмеженнями). JSON потік із заголовком, джерелом, валютами, датою.
  • NewsAPI: широке покриття крипто-тематики. 100 запитів/день безплатно.
  • CoinDesk / Cointelegraph RSS: прямий потік від ключових видань.
  • Bloomberg Crypto (платний): institutional-level покриття.
  • Custom scraper: BeautifulSoup + Playwright для сайтів без API.
import httpx
import feedparser
from datetime import datetime

async def fetch_cryptopanic_news(api_key, currencies=['BTC','ETH'], limit=50):
    url = f"https://cryptopanic.com/api/v1/posts/?auth_token={api_key}"
    url += f"&currencies={','.join(currencies)}&kind=news&limit={limit}"
    
    async with httpx.AsyncClient() as client:
        response = await client.get(url)
        data = response.json()
    
    articles = []
    for post in data.get('results', []):
        articles.append({
            'title': post['title'],
            'source': post['source']['title'],
            'published_at': post['published_at'],
            'url': post['url'],
            'currencies': [c['code'] for c in post.get('currencies', [])],
            'votes': post.get('votes', {})
        })
    return articles

Модель класифікації новин

Завдання: класифікувати кожну новину за кількома вимірами:

  1. Sentiment: позитивна/негативна/нейтральна (для ціни)
  2. Категорія: regulation, technology, security, partnership, market, macro
  3. Impact score: наскільки значна подія (low/medium/high)
  4. Затронуті активи: які токени затронуті
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

class NewsClassifier:
    def __init__(self):
        # Fine-tuned FinBERT на крипто-новинах
        self.sentiment_model = AutoModelForSequenceClassification.from_pretrained(
            'crypto_finbert_sentiment'
        )
        self.category_model = AutoModelForSequenceClassification.from_pretrained(
            'crypto_news_category'
        )
        self.tokenizer = AutoTokenizer.from_pretrained('ProsusAI/finbert')
    
    def classify(self, title, body=''):
        # Використовуємо заголовок + перші 200 символів тіла
        text = title + ' ' + body[:200]
        inputs = self.tokenizer(text, return_tensors='pt', 
                               max_length=256, truncation=True, padding=True)
        
        with torch.no_grad():
            sentiment_logits = self.sentiment_model(**inputs).logits
            category_logits = self.category_model(**inputs).logits
        
        sentiment = torch.softmax(sentiment_logits, -1)
        category = torch.softmax(category_logits, -1)
        
        return {
            'sentiment': {
                'positive': sentiment[0][0].item(),
                'negative': sentiment[0][1].item(),
                'neutral': sentiment[0][2].item()
            },
            'category': self.category_labels[category.argmax().item()],
            'sentiment_score': sentiment[0][0].item() - sentiment[0][1].item()
        }

Fine-tuning на крипто-новинах

Створення розміченого набору даних для навчання:

Автоматична розмітка (weak supervision):

  • Регуляторні рішення проти крипти (SEC lawsuit, China ban) → негативна
  • Institutional adoption (Tesla, MicroStrategy купили BTC) → позитивна
  • Технологічні оновлення (Ethereum Merge, Lightning Network) → позитивна
  • Security incidents (exchange hack, smart contract exploit) → негативна
  • Market data (price new ATH, large inflows) → позитивна/негативна за контекстом

Ручна розмітка: вибіркова розмітка 2000–3000 прикладів для якості fine-tuning.

from datasets import Dataset
from transformers import Trainer, TrainingArguments

def create_news_dataset(articles_with_labels):
    """
    articles_with_labels: список {'text': str, 'label': int}
    """
    return Dataset.from_list(articles_with_labels)

training_args = TrainingArguments(
    output_dir='./crypto_news_model',
    num_train_epochs=5,
    per_device_train_batch_size=16,
    learning_rate=2e-5,
    warmup_ratio=0.1,
    weight_decay=0.01,
    evaluation_strategy='epoch',
    save_strategy='best',
    metric_for_best_model='f1'
)

Named Entity Recognition (NER) для крипти

Видобування згаданих токенів, компаній, сум з новин:

# Користувацька NER-модель для крипто-контексту
# Entities: COIN (Bitcoin, ETH), EXCHANGE (Binance, FTX), 
#           AMOUNT ($1B, 100,000 BTC), PROTOCOL (Uniswap, Aave)

from transformers import pipeline

ner_pipeline = pipeline('ner', model='crypto_ner_model', aggregation_strategy='simple')

def extract_crypto_entities(text):
    entities = ner_pipeline(text)
    coins = [e['word'] for e in entities if e['entity_group'] == 'COIN']
    amounts = [e['word'] for e in entities if e['entity_group'] == 'AMOUNT']
    return coins, amounts

Виявлення подій

Виявлення специфічних подій з високим impact:

HIGH_IMPACT_PATTERNS = {
    'hack': ['hack', 'exploit', 'stolen', 'drained', 'attacked', 'vulnerability'],
    'regulation': ['SEC', 'banned', 'illegal', 'regulatory', 'compliance', 'lawsuit'],
    'adoption': ['buys', 'acquired', 'invested', 'custody', 'ETF approved'],
    'insolvency': ['bankrupt', 'insolvent', 'withdrawal halt', 'bankruptcy']
}

def detect_high_impact_event(text):
    text_lower = text.lower()
    for event_type, keywords in HIGH_IMPACT_PATTERNS.items():
        if any(kw in text_lower for kw in keywords):
            return event_type
    return None

При виявленні високовпливової подієї — негайний алерт незалежно від запланованої пакетної обробки.

Realtime Processing Pipeline

News Feed (CryptoPanic, RSS) 
    → Kafka topic: raw_news
    → Spark Streaming / Faust consumer
    → NLP classification (batch GPU inference)
    → PostgreSQL: classified_news
    → Redis: latest_sentiment_scores
    → WebSocket: realtime updates to dashboard
    → Alert system: high-impact events → Telegram

Для production: пакетування запитів до NLP-моделі (8–32 статті одразу). GPU inference T4 обробляє ~500 статей/секунду.

Backtesting новинного сигналу

Перевіряємо: чи дійсно класифікація новин передувала ціновим рухам?

def backtest_news_signal(classified_news, price_data, lookback_hours=24):
    results = []
    for news in classified_news:
        if news['sentiment_score'] > 0.5:  # positive signal
            # Ціна 1, 4, 24 години після новини
            t = news['published_at']
            for h in [1, 4, 24]:
                future_return = get_return(price_data, t, h)
                results.append({
                    'signal': 'positive',
                    'horizon': h,
                    'actual_return': future_return
                })
    return pd.DataFrame(results)

Розроблення NLP системи для крипто-новин з fine-tuned моделлю на крипто-контенті, NER для видобування сутностей, виявлення подій для висока-impact подій, realtime pipeline та backtesting новинного сигналу.