--- license: mit library_name: peft base_model: mistralai/Mistral-7B-v0.1 datasets: - FinGPT/fingpt-sentiment-train --- [Built with Axolotl](https://github.com/OpenAccess-AI-Collective/axolotl)
See axolotl config 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: "" eos_token: "" unk_token: "" ```

# 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