|
|
--- |
|
|
library_name: transformers |
|
|
tags: |
|
|
- financial |
|
|
- sentiment |
|
|
- pruning |
|
|
- llama |
|
|
license: llama3.2 |
|
|
datasets: |
|
|
- FinGPT/fingpt-sentiment-train |
|
|
base_model: |
|
|
- oopere/pruned40-llama-3.2-1B |
|
|
--- |
|
|
|
|
|
# Llama-FinSent-S: Financial Sentiment Analysis Model |
|
|
|
|
|
## Model Overview |
|
|
Llama-FinSent-S is a fine-tuned version of [oopere/pruned40-llama-1b](https://huggingface.co/oopere/pruned40-llama-3.2-1B), a pruned model derived from [LLaMA-3.2-1B](meta-llama/Llama-3.2-1B). The pruning process reduces the number of neurons in the MLP layers by 40%, leading to lower power consumption and improved efficiency, while retaining competitive performance in key reasoning and instruction-following tasks. |
|
|
|
|
|
The pruning has also reduced the expansion in the MLP layers from 300% to 140%, which, as seen in the paper Exploring GLU expansion ratios: Structured pruning in Llama-3.2 models, is a sweet spot for Llama-3.2 models. |
|
|
|
|
|
Llama-FinSent-S is currently one of the smallest models dedicated to financial sentiment detection that can be deployed on modern edge devices, making it highly suitable for low-resource environments. |
|
|
|
|
|
The model has been fine-tuned on financial sentiment classification using the FinGPT/fingpt-sentiment-train dataset. It is designed to analyze financial news and reports, classifying them into sentiment categories to aid decision-making in financial contexts. |
|
|
|
|
|
## Repository & Resources |
|
|
For full code, training process, and additional details, visit the GitHub repository: |
|
|
[🔗 FinLLMOpt Repository](https://github.com/peremartra/FinLLMOpt) |
|
|
|
|
|
## How the Model Was Created |
|
|
The model was developed through a two-step process: |
|
|
* Pruning: The base LLaMA-3.2-1B model was pruned, reducing its MLP neurons by 40%, which helped decrease computational requirements while preserving key capabilities. |
|
|
* Fine-Tuning with LoRA: The pruned model was then fine-tuned using LoRA (Low-Rank Adaptation) on the FinGPT/fingpt-sentiment-train dataset. After training, the LoRA adapter was merged into the base model, creating a compact and efficient model. |
|
|
|
|
|
This method significantly reduced the fine-tuning overhead, enabling model training in just 40 minutes on an A100 GPU while maintaining high-quality sentiment classification performance. |
|
|
The model has been fine-tuned on financial sentiment classification using the FinGPT/fingpt-sentiment-train dataset. It is designed to analyze financial news and reports, classifying them into sentiment categories to aid decision-making in financial contexts. |
|
|
|
|
|
## Why Use This Model? |
|
|
* **Efficiency**: The pruned architecture reduces computational costs and memory footprint compared to the original LLaMA-3.2-1B model. |
|
|
* **Performance Gains**: Despite pruning, the model retains or improves performance in key areas, such as instruction-following (IFEVAL), multi-step reasoning (MUSR), and structured information retrieval (Penguins in a Table, Ruin Names). |
|
|
* **Financial Domain Optimization**: The model is trained specifically on financial sentiment classification, making it more suitable for this task than general-purpose LLMs. |
|
|
* **Flexible Sentiment Classification**: The model can classify sentiment using both seven-category (fine-grained) and three-category (coarse) labeling schemes. |
|
|
|
|
|
## How to Use the Model |
|
|
This model can be used with the transformers library from Hugging Face. Below is an example of how to load and use the model for sentiment classification. |
|
|
|
|
|
### Installation |
|
|
|
|
|
Ensure you have the required libraries installed: |
|
|
```python |
|
|
pip install transformers, torch |
|
|
``` |
|
|
|
|
|
### Load the Model |
|
|
```python |
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
import torch |
|
|
|
|
|
# Model and tokenizer |
|
|
model_name = "oopere/Llama-FinSent-S" |
|
|
device = "cuda" if torch.cuda.is_available() else "cpu" |
|
|
|
|
|
model = AutoModelForCausalLM.from_pretrained(model_name).to(device) |
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
``` |
|
|
|
|
|
### Perform Sentiment Classification |
|
|
```python |
|
|
def generate_response(prompt, model, tokenizer): |
|
|
"""Generates sentiment classification response.""" |
|
|
full_prompt = ( |
|
|
"""Instruction: What is the sentiment of this news? " |
|
|
"Please choose an answer from {strong negative/moderately negative/mildly negative/neutral/" |
|
|
"mildly positive/moderately positive/strong positive}.""" |
|
|
"\n" + "News: " + prompt + "\n" + "Answer:" |
|
|
) |
|
|
|
|
|
inputs = tokenizer(full_prompt, return_tensors="pt").to(device) |
|
|
outputs = model.generate( |
|
|
**inputs, |
|
|
max_new_tokens=15, |
|
|
eos_token_id=tokenizer.eos_token_id, |
|
|
pad_token_id=tokenizer.eos_token_id, |
|
|
do_sample=False, |
|
|
temperature=0.001, |
|
|
no_repeat_ngram_size=3, |
|
|
early_stopping=True, |
|
|
) |
|
|
|
|
|
full_response = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
return full_response.split("Answer:")[-1].strip() |
|
|
``` |
|
|
|
|
|
### Example usage |
|
|
```python |
|
|
news_text = "Ahlstrom Corporation STOCK EXCHANGE ANNOUNCEMENT 7.2.2007 at 10.30 A total of 56,955 new shares of A..." |
|
|
sentiment = generate_response(news_text, model, tokenizer) |
|
|
print("Predicted Sentiment:", sentiment) |
|
|
``` |
|
|
|
|
|
### Alternative: Three-Class Sentiment Classification |
|
|
```python |
|
|
full_prompt = ( |
|
|
"""Instruction: What is the sentiment of this news? " |
|
|
"Please choose an answer from {negative/neutral/positive}.""" |
|
|
"\n" + "News: " + prompt + "\n" + "Answer:" |
|
|
) |
|
|
``` |
|
|
|
|
|
## Limitations & Considerations |
|
|
|
|
|
* Not a general-purpose sentiment model: It is optimized for financial texts, so performance may degrade on generic sentiment classification tasks. |
|
|
* Potential biases in training data: As with any financial dataset, inherent biases in sentiment labeling may affect predictions. |
|
|
* Requires GPU for optimal inference speed: While the model is pruned, running inference on a CPU might be slower than on a GPU. |
|
|
|
|
|
## Citation |
|
|
|
|
|
If you use this model in your work, please consider citing it as follows: |
|
|
``` |
|
|
@misc{Llama-FinSent-S, |
|
|
title={Llama-FinSent-S: A Pruned LLaMA-3.2 Model for Financial Sentiment Analysis}, |
|
|
author={Martra, P.}, |
|
|
year={2025}, |
|
|
url={https://huggingface.co/your-hf-username/Llama-FinSent-S} |
|
|
} |
|
|
|
|
|
@misc{Martra2024, |
|
|
author={Martra, P.}, |
|
|
title={Exploring GLU expansion ratios: Structured pruning in Llama-3.2 models}, |
|
|
year={2024}, |
|
|
url={https://doi.org/10.31219/osf.io/qgxea} |
|
|
} |
|
|
``` |