BEncoderRT's picture
Update README.md
4d03cb6 verified
---
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.
```