| | --- |
| | language: en |
| | tags: |
| | - sentiment-analysis |
| | base_model: |
| | - ProsusAI/finbert |
| | --- |
| | |
| | ## Model Description |
| |
|
| | This is a fine-tuned version of [ProsusAI/finbert](https://huggingface.co/ProsusAI/finbert) for cryptocurrency news sentiment analysis. The model classifies text into three sentiment categories: **negative**, **neutral**, and **positive**. |
| |
|
| | ### Key Features |
| |
|
| | - **Base Model**: ProsusAI/finbert |
| | - **Task**: Sentiment Classification (3 classes) |
| | - **Domain**: Cryptocurrency news and social media |
| | - **Custom Tokens**: 520 crypto-specific tokens added to vocabulary |
| |
|
| |
|
| | ## Usage |
| |
|
| | ```python |
| | import torch |
| | from transformers import BertForSequenceClassification, AutoTokenizer |
| | from torch.nn import functional as F |
| | |
| | |
| | tokenizer = AutoTokenizer.from_pretrained('houmanrajabi/CoinPulse') |
| | model = BertForSequenceClassification.from_pretrained('houmanrajabi/CoinPulse') |
| | model.eval() |
| | |
| | def predict_sentiment(text, temperature=2.0): |
| | inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512) |
| | with torch.no_grad(): |
| | outputs = model(**inputs) |
| | label_map = {0: 'negative', 1: 'neutral', 2: 'positive'} |
| | logits = outputs.logits / temperature |
| | predicted_class_id = logits.argmax().item() |
| | confidence = F.softmax(logits, dim=1)[0, predicted_class_id].item() |
| | return label_map[predicted_class_id].capitalize() , confidence |
| | |
| | sample_texts = [ |
| | "The company reported record profits and exceeded all expectations.", |
| | "Stock prices plummeted after the disappointing earnings report.", |
| | "The quarterly results were in line with market forecasts." |
| | ] |
| | for i, text in enumerate(sample_texts): |
| | sentiment, confidence = predict_sentiment(text) |
| | print(f"{i+1}) {text}\nSentiment: {sentiment}\nConfidence: {round(confidence,2)}\n") |
| | |
| | ``` |