--- license: apache-2.0 datasets: - mteb/imdb - Helsinki-NLP/opus-100 language: - en - fr pipeline_tag: text-classification base_model: - TinyLlama/TinyLlama-1.1B-Chat-v1.0 tags: - unsloth - lora - peft - Multi-Task - Sentiment Analysis - Translation (English to French) --- # TinyLlama Multi-Task LoRA (Sentiment + Translation) This repository contains a **LoRA adapter** trained on top of **TinyLlama/TinyLlama-1.1B-intermediate-step-1431k-3T** to support **multiple tasks** via instruction-style prompting. --- ## 🔧 Base Model - **Base model**: `TinyLlama/TinyLlama-1.1B-intermediate-step-1431k-3T` - **Architecture**: Decoder-only (LLaMA-style) - **Fine-tuning method**: LoRA (PEFT) - **Trainable parameters**: ~4M - **Total parameters**: ~1.1B This repository **only contains the LoRA adapter weights**, not the full base model. --- ## 📌 Supported Tasks ### 1️⃣ Sentiment Analysis (IMDB) Binary sentiment classification for movie reviews: - `positive` - `negative` ### 2️⃣ Translation (English → French) Neural machine translation from English to French. --- ## 🧠 Training Data All datasets are loaded directly from **Hugging Face Datasets**: | Task | Dataset | Description | | ------------------- | ------------------------------- | -------------------------------- | | Sentiment Analysis | `imdb` | Movie reviews with binary labels | | Translation (EN→FR) | `Helsinki-NLP/opus-100` (en-fr) | Parallel English–French corpus | --- ## 🧩 Training Strategy - **Multi-task instruction tuning** - Tasks are distinguished via **explicit prompt headers** - All tasks are unified into a **causal language modeling** objective - Only LoRA parameters are updated; base model weights remain frozen --- ## 🧾 Prompt Format ### Sentiment Analysis ```text ### Task: Sentiment Analysis ### Review: This movie was absolutely fantastic! ### Answer: positive ### Task: Translation (English to French) ### English: I love learning large language models. ### French: J'aime apprendre les grands modèles de langage. ``` **Load Base Model + LoRA Adapter** ```python import torch from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel base_model_name = "TinyLlama/TinyLlama-1.1B-intermediate-step-1431k-3T" lora_repo = "BEncoderRT/tinyllama-multitask-lora" tokenizer = AutoTokenizer.from_pretrained(base_model_name) tokenizer.pad_token = tokenizer.eos_token base_model = AutoModelForCausalLM.from_pretrained( base_model_name, device_map="auto" ).eval() lora_model = AutoModelForCausalLM.from_pretrained( base_model_name, device_map="auto" ) lora_model = PeftModel.from_pretrained(lora_model, lora_repo) lora_model.eval() def generate( model, prompt, max_new_tokens=64, temperature=0.3 ): inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=max_new_tokens, do_sample=True, temperature=temperature, pad_token_id=tokenizer.eos_token_id ) return tokenizer.decode(outputs[0], skip_special_tokens=True) ``` **Inference Examples** Sentiment Analysis Example ```python sentiment_tests = [ "I absolutely loved this movie. The acting was brilliant.", "This film was boring, slow, and a complete waste of time.", "The movie was okay, but nothing special.", ] def test_sentiment_comparison(texts): for text in texts: prompt = ( "### Task: Sentiment Analysis\n" "### Review:\n" f"{text}\n" "### Answer:\n" ) base_out = generate(base_model, prompt, max_new_tokens=8) lora_out = generate(lora_model, prompt, max_new_tokens=8) print("=" * 80) print("REVIEW:") print(text) print("\n[BASE MODEL OUTPUT]") print(base_out) print("\n[LORA MODEL OUTPUT]") print(lora_out) ``` ```python test_sentiment_comparison(sentiment_tests) ``` ``` ================================================================================ REVIEW: I absolutely loved this movie. The acting was brilliant. [BASE MODEL OUTPUT] ### Task: Sentiment Analysis ### Review: I absolutely loved this movie. The acting was brilliant. ### Answer: I loved this movie. It was so [LORA MODEL OUTPUT] ### Task: Sentiment Analysis ### Review: I absolutely loved this movie. The acting was brilliant. ### Answer: positive ================================================================================ REVIEW: This film was boring, slow, and a complete waste of time. [BASE MODEL OUTPUT] ### Task: Sentiment Analysis ### Review: This film was boring, slow, and a complete waste of time. ... ### Review: The movie was okay, but nothing special. ### Answer: negative ``` Translation Example ```python translation_tests = [ "I love learning large language models.", "This movie was disappointing and boring.", "Artificial intelligence is changing the world." ] def test_translation_comparison(texts): for text in texts: prompt = ( "### Task: Translation (English to French)\n" "### English:\n" f"{text}\n" "### French:\n" ) base_out = generate(base_model, prompt, max_new_tokens=64) lora_out = generate(lora_model, prompt, max_new_tokens=64) print("=" * 80) print("ENGLISH:") print(text) print("\n[BASE MODEL OUTPUT]") print(base_out) print("\n[LORA MODEL OUTPUT]") print(lora_out) ``` ```python test_sentiment_comparison(sentiment_tests) ``` ``` ================================================================================ ENGLISH: I love learning large language models. [BASE MODEL OUTPUT] ### Task: Translation (English to French) ### English: I love learning large language models. ### French: J'adore apprendre les modèles de langage grand. ### Translation: I love learning large language models. ### Task: Translation (English to Spanish) ### English: I love learning large language models. ### Spanish: Me gusta [LORA MODEL OUTPUT] ### Task: Translation (English to French) ### English: I love learning large language models. ### French: Je me passionne pour les modèles de langues grandes. ================================================================================ ... ### English: Artificial intelligence is changing the world. ### French: L'intelligence artificielle change le monde. ```