tzoulio's picture
Update README.md
b6376b7 verified
---
base_model: meta-llama/Llama-3.2-1B
library_name: peft
datasets:
- cjziems/Article-Bias-Prediction
metrics:
- accuracy
pipeline_tag: text-classification
tags:
- Bias
- News
- Articles
- Political
---
# **Llama-3.2-1B (Political Bias Detection)**
## **Overview**
This model is designed to detect potential political bias in news articles. Given a text passage (e.g., a news article), the model returns probabilities indicating whether the text is leaning to the *Left*, *Center*, or *Right* of the political spectrum.
## **Model Description**
### **Model Architecture**
- **Base Model**: [meta-llama/Llama-3.2-1B](https://huggingface.co./meta-llama/Llama-3.2-1B)
- **Adapters**: LoRA (Low-Rank Adaptation)
- **Precision**: 4-bit quantization enabled for efficient inference and training (with nested/double quantization).
### **Intended Use**
- **Primary**: Provide a text of a news article, the model outputs probabilities corresponding to three political bias labels:
- **LABEL_0**: Left
- **LABEL_1**: Center
- **LABEL_2**: Right
- **Usage Scenarios**:
- Media research and analytics
- Automated or semi-automated political bias detection in digital news
- Educational or journalistic explorations of bias
> **Note**: This model is *not* an authoritative arbiter of political bias. It can be used as a *supplementary* tool to help flag potential leanings.
---
## **How to Use**
Below is a sample code snippet demonstrating how to load the model and apply LoRA adapters for classification:
```python
import transformers
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from peft import PeftModel
# 1. Load the *base* LLaMA model for sequence classification
base_model_name = "meta-llama/Llama-3.2-1B"
access_token = "YOUR_HF_ACCESS_TOKEN" # If needed
model = AutoModelForSequenceClassification.from_pretrained(
base_model_name,
use_auth_token=access_token,
num_labels=3,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
# 2. Load the LoRA adapter on top of the base model
adapter_path = "tzoulio/news-bias-finder-llama-3.2-1B"
model = PeftModel.from_pretrained(model, adapter_path)
# 3. Create the pipeline with the specified model and tokenizer
pipeline = transformers.pipeline(
"text-classification",
model=model,
tokenizer=tokenizer
)
# Example usage
text = "Insert the news article text here..."
prediction = pipeline(text)
print(prediction)
```
### **Input / Output Details**
**Input**: A single string containing the text of a news article.
**Output**: A list of dictionaries, where each dictionary contains:
- "label": The predicted label (e.g., "LABEL_2")
- "score": The probability for that label.
```css
Example Output: [[{"LABEL_0": 0.23, "LABEL_1": 0.30, "LABEL_2": 0.47}]]
Indicates 23% chance of Left, 30% chance of Center, 47% chance of Right.
```
## **Training & Fine-tuning**
### **Dataset Sizes**
- **Training Set**: 17,984 examples
- **Evaluation Set**: 4,496 examples
- **Test Set**: 5,620 examples
### **Hyperparameters and Important Settings**
```python
# Precision & Quantization
load_in_4bit = True
bnb_4bit_use_double_quant = True
bnb_4bit_quant_type = "nf4"
bnb_4bit_compute_dtype = torch.bfloat16
# LoRA Configuration
lora_r = 16
lora_alpha = 64
lora_dropout = 0.1
bias = "none"
# Task Type
task_type = "SEQ_CLS"
# Training Setup
per_device_train_batch_size = 4
gradient_accumulation_steps = 4
learning_rate = 2e-4
optim = "paged_adamw_32bit"
num_train_epochs = 3
warmup_steps = 2
fp16 = True
logging_steps = 1
```
## **Evaluation**
### **Metrics**
We report the F1-score on each dataset split.
## **Results**
- F1-Score (Training): 0.96658
- F1-Score (Eval) : 0.96664
- F1-Score (Test) : 0.96299