peft safetensors mistral dataset:FinGPT/fingpt-sentiment-train base_model:mistralai/Mistral-7B-v0.1 license:mit region:us
---
license: mit
library_name: peft
base_model: mistralai/Mistral-7B-v0.1
datasets:
  - FinGPT/fingpt-sentiment-train
---

<!-- This model card has been generated automatically according to the information the Trainer had access to. You
should probably proofread and complete it, then remove this comment. -->

[<img src="https://raw.githubusercontent.com/OpenAccess-AI-Collective/axolotl/main/image/axolotl-badge-web.png" alt="Built with Axolotl" width="200" height="32"/>](https://github.com/OpenAccess-AI-Collective/axolotl)
<details><summary>See axolotl config</summary>

axolotl version: `0.4.0`

```yaml
base_model: mistralai/Mistral-7B-v0.1
model_type: MistralForCausalLM
tokenizer_type: LlamaTokenizergin
is_mistral_derived_model: true

load_in_8bit: false
load_in_4bit: false
strict: false

datasets:
  # This will be the path used for the data when it is saved to the Volume in the cloud.
  - path: data.jsonl
    ds_type: json
    type:
      # JSONL file contains question, context, answer fields per line.
      # This gets mapped to instruction, input, output axolotl tags.
      field_instruction: instruction
      field_input: input
      field_output: output
      # Format is used by axolotl to generate the prompt.
      format: |-
        [INST]{input}
        {instruction} [/INST] 

dataset_prepared_path:
val_set_size: 0.05
output_dir: ./lora-out

sequence_len: 4096
sample_packing: false
eval_sample_packing: false
pad_to_sequence_len: false

adapter: lora
lora_model_dir:
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_linear: true
lora_fan_in_fan_out:

wandb_project:
wandb_entity:
wandb_watch:
wandb_run_id:

gradient_accumulation_steps: 1
micro_batch_size: 32
num_epochs: 4
optimizer: adamw_torch
lr_scheduler: cosine
learning_rate: 0.0001

bf16: auto
fp16: false
tf32: false
train_on_inputs: false
group_by_length: false

gradient_checkpointing: true
early_stopping_patience:
resume_from_checkpoint:
local_rank:
logging_steps: 1
xformers_attention:
flash_attention: true

warmup_steps: 10
save_steps:
debug:
deepspeed: /root/axolotl/deepspeed_configs/zero3_bf16.json
weight_decay: 0.0
fsdp:
fsdp_config:
special_tokens:
  bos_token: "<s>"
  eos_token: "</s>"
  unk_token: "<unk>"

```

</details><br>

# Mistral Sentiment Analysis

This model is a fine-tuned version of [mistralai/Mistral-7B-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1) on the [FinGPT Sentiment](https://huggingface.co/datasets/FinGPT/fingpt-sentiment-train) dataset. It is intended to be used for sentiment analysis tasks for financial data. Data was modified to use with Axolotl, see [here](https://github.com/TimeSurgeLabs/llm-finetuning/blob/02fee020a21917d91719da6db25a4f4384ae9a0a/data/fingpt-sentiment.jsonl) for the modified data. See the [FinGPT Project](https://github.com/AI4Finance-Foundation/FinGPT) for more information.
It achieves the following results on the evaluation set:
* Loss: 0.1598

## Ollama Example

```bash
ollama run chand1012/mistral_sentiment
>>> Apple (NASDAQ:AAPL) Up Fractionally despite Rising Vision Pro Returns Please choose an answer from {negative/neutral/positive} 
 positive
```

## Python Example

```python
from transformers import AutoModel, AutoTokenizer, AutoModelForCausalLM, LlamaForCausalLM, LlamaTokenizerFast
from peft import PeftModel  # 0.8.2

# Load Models
base_model = "mistralai/Mistral-7B-v0.1" 
peft_model = "TimeSurgeLabs/mistral_sentiment_lora"
tokenizer = LlamaTokenizerFast.from_pretrained(base_model, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
model = LlamaForCausalLM.from_pretrained(base_model, trust_remote_code=True, device_map = "cuda:0", load_in_8bit = True,)
model = PeftModel.from_pretrained(model, peft_model)
model = model.eval()

# Make prompts
prompt = [
'''Instruction: What is the sentiment of this news? Please choose an answer from {negative/neutral/positive}
Input: FINANCING OF ASPOCOMP 'S GROWTH Aspocomp is aggressively pursuing its growth strategy by increasingly focusing on technologically more demanding HDI printed circuit boards PCBs .
Answer: ''',
'''Instruction: What is the sentiment of this news? Please choose an answer from {negative/neutral/positive}
Input: According to Gran , the company has no plans to move all production to Russia , although that is where the company is growing .
Answer: ''',
'''Instruction: What is the sentiment of this news? Please choose an answer from {negative/neutral/positive}
Input: A tinyurl link takes users to a scamming site promising that users can earn thousands of dollars by becoming a Google ( NASDAQ : GOOG ) Cash advertiser .
Answer: ''',
]

# Generate results
tokens = tokenizer(prompt, return_tensors='pt', padding=True, max_length=512)
res = model.generate(**tokens, max_length=512)
res_sentences = [tokenizer.decode(i) for i in res]
out_text = [o.split("Answer: ")[1] for o in res_sentences]

# show results
for sentiment in out_text:
    print(sentiment)

# Output:    
# positive
# neutral
# negative
```

## Training procedure

### Training hyperparameters

The following hyperparameters were used during training:
* learning_rate: 0.0001
* train_batch_size: 32
* eval_batch_size: 32
* seed: 42
* distributed_type: multi-GPU
* num_devices: 2
* total_train_batch_size: 64
* total_eval_batch_size: 64
* optimizer: Adam with betas=(0.9, 0.999) and epsilon=1e-08
* lr_scheduler_type: cosine
* lr_scheduler_warmup_steps: 10
* num_epochs: 4

### Training results

| Training Loss | Epoch | Step | Validation Loss |
|:-------------:|:-----:|:----:|:---------------:|
| 0.0678        | 1.0   | 1140 | 0.1124          |
| 0.1339        | 2.0   | 2280 | 0.1008          |
| 0.0497        | 3.0   | 3420 | 0.1146          |
| 0.0016        | 4.0   | 4560 | 0.1598          |

### Framework versions

* PEFT 0.8.2
* Transformers 4.38.0.dev0
* Pytorch 2.1.2+cu121
* Datasets 2.17.0
* Tokenizers 0.15.0
