| --- |
| 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. |
| ``` |