--- language: - en license: apache-2.0 tags: - finance - sentiment-analysis - text-classification - lora - mistral - indian-market - autoscientist - adaption datasets: - financial_phrasebank - zeroshot/twitter-financial-news-sentiment - flwrlabs/fingpt-sentiment-train - TimKoornstra/financial-tweets-sentiment - nickmuchi/financial-classification base_model: mistralai/Mistral-7B-Instruct-v0.3 metrics: - accuracy --- # 💹 Finance Sentiment Classifier — Indian Market Focus > Fine-tuned on Mistral-7B-Instruct using LoRA via Adaption AutoScientist. > Classifies financial news, headlines, and social media text into **positive**, **negative**, or **neutral** sentiment. > Built for the [HackIndia Adaption AutoScientist Challenge](https://hackindia.xyz) — Finance track. --- ## 📊 Performance | Metric | Base Model | Our Model | Improvement | |---|---|---|---| | Win Rate (our dataset) | 44 | 56 | **+27% relative** | | Win Rate (market analysis category) | 40 | 60 | **+50% relative** | | Dataset quality grade | E (2.0) | B (8.1) | **+305% relative** | Training curves showed clean, consistent loss reduction with no overfitting across 4 epochs. --- ## 🧠 Model Details | Property | Value | |---|---| | Base model | mistralai/Mistral-7B-Instruct-v0.3 | | Training method | Supervised Fine-Tuning (SFT) + LoRA | | LoRA rank | 64 | | LoRA alpha | 128 | | Target layers | q_proj, k_proj, v_proj, o_proj | | Epochs | 4 | | Optimizer | Cosine LR scheduler | | Warmup ratio | 0.05 | | Gradient clipping | 1.0 | | Weight decay | 0.01 | | Training platform | Adaption AutoScientist | | Dataset size | 20,000 rows (adapted) | --- ## 📁 Dataset The training dataset is a curated merge of **6 sources** totalling ~120,000 raw rows, cleaned and deduplicated down to 20,000 high-quality rows via Adaption's Adaptive Data pipeline. ### Sources | Source | Type | Rows (approx) | |---|---|---| | financial_phrasebank (sentences_allagree) | Human-labeled news sentences | ~2,200 | | zeroshot/twitter-financial-news-sentiment | Human-labeled financial tweets | ~9,900 | | flwrlabs/fingpt-sentiment-train | Financial NLP training data | ~76,800 | | TimKoornstra/financial-tweets-sentiment | Human-labeled financial tweets | ~38,000 | | nickmuchi/financial-classification | Financial text classification | ~2,000 | | Hand-labeled originals (Indian market) | Original, manually written examples | ~60+ | | NewsAPI live headlines | Rule-labelled recent business news | ~500 | ### What makes this dataset original - **Indian market focus** — original hand-labeled examples covering NSE, BSE, Sensex, Nifty, RBI decisions, Indian fintech (Paytm, Zomato, PhonePe), and Indian conglomerates (Reliance, Tata, Adani, HDFC) - **Multi-source deduplication** — priority-aware deduplication ensures highest-quality copy is retained when the same text appears across sources - **Multilingual context** — includes financial terminology specific to the Indian subcontinent not present in standard Western finance NLP datasets - **Live news augmentation** — recent business headlines via NewsAPI add temporal diversity beyond static datasets ### Label distribution (after cleaning) ``` positive : ~35% negative : ~33% neutral : ~32% ``` Balanced across all three classes to prevent label bias. ### Data quality improvement via Adaptive Data Adaption's Adaptive Data pipeline was applied before training: - **Before:** Grade E, quality score 2.0, percentile 0.1 - **After:** Grade B, quality score 8.1, percentile 17.8 - **Relative improvement: 305%** --- ## 🚀 How to Use ```python from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel base_model = "mistralai/Mistral-7B-Instruct-v0.3" lora_model = "Sashank1006/finance-sentiment-mistral-lora" tokenizer = AutoTokenizer.from_pretrained(base_model) model = AutoModelForCausalLM.from_pretrained(base_model, device_map="auto") model = PeftModel.from_pretrained(model, lora_model) model.eval() def predict_sentiment(text: str) -> str: prompt = f"Classify the sentiment of this financial text as positive, negative, or neutral:\n\n{text}\n\nSentiment:" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) output = model.generate(**inputs, max_new_tokens=5, do_sample=False) result = tokenizer.decode(output[0], skip_special_tokens=True) return result.split("Sentiment:")[-1].strip().lower() # Example text = "Reliance Industries reported a 23% jump in quarterly profit." print(predict_sentiment(text)) # → "positive" ``` --- ## 🌍 Real-World Applications - **Retail investor tools** — classify financial news before displaying to users - **Trading signal generation** — convert news sentiment into bullish/bearish signals - **Portfolio risk monitoring** — flag negative sentiment around held stocks - **Indian fintech apps** — specifically tuned for Indian market terminology and companies - **News aggregators** — auto-tag financial articles by sentiment --- ## ⚠️ Limitations - Trained primarily on English-language financial text; performance on Hindi/Tamil/regional language finance text will be lower - Rule-labelled NewsAPI headlines (~500 rows) may contain some label noise - Model may underperform on highly technical financial derivative or options-specific language - Sentiment is classified at the sentence/headline level — document-level sentiment aggregation requires additional logic - The model reflects sentiment patterns in training data up to mid-2026; sentiment around newer entities may be less accurate --- ## 📋 Training Pipeline ``` Raw data (6 sources, ~120K rows) ↓ Merge + deduplicate (prepare_dataset.py) ↓ Upload to Adaption Adaptive Data ↓ Adaptive Data optimization (Grade E → B, 305% quality improvement) ↓ AutoScientist fine-tuning (Mistral-7B-Instruct, LoRA, 4 epochs) ↓ Evaluation (Win rate: 44 → 56 on dataset, 40 → 60 on market analysis) ↓ Released on HuggingFace + Kaggle ``` --- ## 👥 Team **Team Caribou** — HackIndia Adaption AutoScientist Challenge, Finance Track Built using: - [Adaption AutoScientist](https://adaptionlabs.ai) — automated model training - [Adaption Adaptive Data](https://adaptionlabs.ai) — dataset quality optimization - HuggingFace Datasets — source data - NewsAPI — live headline augmentation --- ## 📄 Citation ```bibtex @misc{caribou2026financeSentiment, title = {Finance Sentiment Classifier — Indian Market Focus}, author = {Team Caribou}, year = {2026}, url = {https://huggingface.co/YOUR_HF_USERNAME/finance-sentiment-mistral-lora}, note = {Built for HackIndia Adaption AutoScientist Challenge} } ``` --- ## 🔗 Links - 📦 Dataset: [Kaggle — finance-sentiment-india](https://www.kaggle.com/Sashank610/finance-sentiment-india) - 🤗 Model: [HuggingFace — finance-sentiment-mistral-lora](https://huggingface.co/Sashank1006/finance-sentiment-mistral-lora) - 🎮 Demo: [HuggingFace Spaces — Gradio App](https://huggingface.co/spaces/Sashank1006/finance-sentiment-demo)