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

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Навчання NLP-моделі для аналізу Twitter/X за криптовалютами
Складний
~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-моделі для аналізу Twitter/X по криптовалютам

Twitter/X — найшвидше оточення розповсюдження крипто-інформації. Інфлюенсери з мільйонною аудиторією, анонімні аналітики, співробітники проектів — всі спілкуються тут. Модель, здатна в реальному часі аналізувати цей потік, виловлює сигнали раніше, ніж вони відобразяться в ціні.

Twitter API v2 для крипто-даних

import tweepy
from datetime import datetime, timedelta

class TwitterCryptoCollector:
    def __init__(self, bearer_token):
        self.client = tweepy.Client(bearer_token=bearer_token, wait_on_rate_limit=True)
    
    def search_recent(self, query, max_results=100):
        """
        Twitter API v2 Basic: до 500k твітів/місяць
        Academic: до 10M твітів/місяць + historical access
        """
        tweets = self.client.search_recent_tweets(
            query=query + ' lang:en -is:retweet',
            max_results=min(max_results, 100),
            tweet_fields=['created_at', 'public_metrics', 'author_id'],
            expansions=['author_id'],
            user_fields=['public_metrics', 'verified']
        )
        return tweets
    
    def get_crypto_stream(self, keywords):
        """Filtered stream для realtime моніторингу"""
        rules = [tweepy.StreamRule(kw) for kw in keywords]
        self.client.add_stream_rules(rules)
        
        # Запускаємо stream у окремому потоці
        stream = self.CryptoStreamListener(self.client)
        stream.filter(tweet_fields=['public_metrics', 'created_at'])

CRYPTO_QUERIES = {
    'BTC': '(bitcoin OR btc OR #BTC OR #Bitcoin) crypto',
    'ETH': '(ethereum OR eth OR #ETH OR #Ethereum) crypto',
    'GENERAL': '#crypto OR #cryptocurrency OR #altcoins'
}

Специфіка Twitter NLP

Твіти короткі (280 символів), містять слленг, cashtags ($BTC), emoji, абревіатури. Стандартні NLP-моделі гостро справляються без fine-tuning.

Preprocessing:

import re
from emoji import demojize

def preprocess_tweet(text):
    # Замінюємо emoji на текстовий опис
    text = demojize(text)
    
    # Нормалізуємо cashtags
    text = re.sub(r'\$([A-Z]{2,6})', r'TOKEN_\1', text)
    
    # Видаляємо URL
    text = re.sub(r'http\S+', '[URL]', text)
    
    # Нормалізуємо mentions
    text = re.sub(r'@\w+', '[USER]', text)
    
    # Крипто-специфічні заміни
    crypto_slang = {
        'hodl': 'hold',
        'rekt': 'ruined',
        'wen': 'when',
        'gm': 'good morning',
        'ngmi': 'not going to make it',
        'wagmi': 'we are all going to make it',
        'degen': 'degenerate speculator',
        'ape': 'invest blindly'
    }
    for slang, replacement in crypto_slang.items():
        text = re.sub(rf'\b{slang}\b', replacement, text, flags=re.IGNORECASE)
    
    return text

Tweet-BERT: Модель для крипто-твітів

BERTweet: pre-trained BERT на 850M англійських твітів. Кращий baseline для Twitter NLP.

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

class CryptoTweetAnalyzer:
    def __init__(self):
        # BERTweet fine-tuned на крипто-твітах
        self.tokenizer = AutoTokenizer.from_pretrained('vinai/bertweet-base')
        self.model = AutoModelForSequenceClassification.from_pretrained(
            './crypto_bertweet_finetuned'
        )
        self.model.eval()
    
    def analyze(self, tweet_text):
        preprocessed = preprocess_tweet(tweet_text)
        
        inputs = self.tokenizer(
            preprocessed,
            max_length=128,
            truncation=True,
            return_tensors='pt'
        )
        
        with torch.no_grad():
            logits = self.model(**inputs).logits
        probs = torch.softmax(logits, -1)[0]
        
        return {
            'bullish': probs[0].item(),
            'bearish': probs[1].item(),
            'neutral': probs[2].item(),
            'score': probs[0].item() - probs[1].item()
        }

Influence Weighting

Не всі твіти однаково важливі. Вважуємо за впливом автора:

def calculate_author_influence(user_metrics):
    followers = user_metrics.get('followers_count', 0)
    following = user_metrics.get('following_count', 1)
    tweets_count = user_metrics.get('tweet_count', 1)
    
    # Follower/Following ratio (якість аудиторії)
    ff_ratio = followers / following
    
    # Log-scaled follower count
    log_followers = np.log1p(followers)
    
    # Верифіковані бонус аккаунту
    verified_bonus = 1.5 if user_metrics.get('verified', False) else 1.0
    
    influence_score = log_followers * np.sqrt(ff_ratio) * verified_bonus
    return min(influence_score / 20, 10)  # нормалізуємо до [0, 10]

def weighted_sentiment(tweets_with_scores):
    total_weight = sum(
        t['score'] * t['engagement'] * t['author_influence']
        for t in tweets_with_scores
    )
    total_normalizer = sum(
        t['engagement'] * t['author_influence']
        for t in tweets_with_scores
    )
    return total_weight / max(total_normalizer, 1)

Viral Content Detection

Швидко поширюваний твіт може сигналізувати про ринкову можливість:

def detect_viral_tweet(tweet, time_window_minutes=30, viral_threshold=500):
    """Якщо retweet rate > viral_threshold за 30 хвилин → viral"""
    retweets = tweet['public_metrics']['retweet_count']
    age_minutes = (datetime.utcnow() - tweet['created_at']).total_seconds() / 60
    
    if age_minutes < time_window_minutes:
        projected_retweets = retweets / age_minutes * time_window_minutes
        if projected_retweets > viral_threshold:
            return True, projected_retweets
    return False, 0

KOL (Key Opinion Leaders) Monitoring

Окремий модуль: моніторинг твітів з впливового списку облікових записів:

  • Vitalik Buterin, CZ, SBF (історично), Elon Musk
  • Аналітики: PlanB, Willy Woo, IntoTheBlock team
  • Protocol founders

Будь-який KOL твіт → негайний алерт з sentiment analysis.

Стек: Python asyncio для Twitter Stream API, Redis для дедуплікації та кешування, Kafka для буферизації високого потоку, PostgreSQL для зберігання, GPU inference сервер для batch класифікації, React дашборд.

Розроблення системи моніторингу Twitter з BERTweet fine-tuning, influence weighting, viral detection, KOL моніторингом та realtime sentiment агрегацією.