transformers safetensors t5 text2text-generation trl reinforcement-learning LLM detoxification conversational en dataset:ProlificAI/social-reasoning-rlhf license:cc autotrain_compatible endpoints_compatible text-generation-inference region:us
---
license: cc
tags:
- trl
- transformers
- reinforcement-learning
- LLM detoxification
datasets:
- ProlificAI/social-reasoning-rlhf
language:
- en
pipeline_tag: conversational
---

# TRL Model

This is a [TRL language model](https://github.com/huggingface/trl). It has been fine-tuned with reinforcement learning to
 guide the model outputs according to a value, function, or human feedback. The model can be used for text generation. 
 This project aims to reduce the level of toxicity in the outputs generated by the LAMINI Flan T5 248M language model using
 Reinforcement Learning with Artificial Intelligence Feedback technique (RLAIF). Reinforcement Learning with Human Feedback (RLHF)
 is a method to align models with a particular kind of data. RLHF creates a latent reward model using human feedback and finetunes
 a model using Proximal Policy Optimization. RLAIF on the other hand replaces human feedback with a high-performance AI agent. The model
 has been fine-tuned on the [Social Reasoning Dataset](https://huggingface.co/datasets/ProlificAI/social-reasoning-rlhf/viewer/default/train?p=38&row=3816) by 
 ProlificAI for 191 steps and 1 epoch using the Proximal Policy Optimisation (PPO) algorithm. The [Roberta hate text detection](https://huggingface.co/facebook/roberta-hate-speech-dynabench-r4-target) 
 model was used as the Proximal Policy Optimisation (PPO) reward model.

 The power of this model lies in its size; it is barely 500 MBs in size and performs well given its size. The intended use of this model should be conversation, text generation, or context-based Q&A.
 This model might not perform well on tasks like mathematics, sciences, coding, etc. It might hallucinate on such tasks. After quantization, this model could be easily run on edge devices like smartphones and microprocessors.

 The training log of the model can be found in this [weights and biases](https://wandb.ai/tnarahul/trl/runs/nk30wukt/overview?workspace=user-tnarahul) page.

 Note: This model is a fine-tuned version of [LaMini Flan T5 248M](https://huggingface.co/MBZUAI/LaMini-Flan-T5-248M), which in turn is a fine-tuned version of the Flan T5 model released by Google. The Flan T5 follows the encoder-decoder architecture, unlike other GPT-like models that are decoder-only.

## Usage

To use this model for inference, first install the TRL library:

```bash
python -m pip install trl
```

You can then generate text as follows:

```python
from trl import AutoModelForSeq2SeqLMWithValueHead
from transformers import pipeline, AutoTokenizer
import torch

checkpoint = "ARahul2003/lamini_flan_t5_detoxify_rlaif"  

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
base_model = AutoModelForSeq2SeqLMWithValueHead.from_pretrained(checkpoint,
                                             device_map='cpu', #or 'auto'/'cuda:0'
                                             torch_dtype=torch.float32)
pipe = pipeline('text2text-generation', 
                 model = base_model,
                 tokenizer = tokenizer,
                 max_length = 512, 
                 do_sample=True,
                 temperature=0.3,
                 top_p=0.95,
                 )

prompt = 'Hello! How are you?'
print(pipe(prompt)[0]['generated_text'])

```

If you want to use the model for training or to obtain the outputs from the value head, load the model as follows:

```python
from transformers import AutoTokenizer
from trl import AutoModelForCausalLMWithValueHead

tokenizer = AutoTokenizer.from_pretrained("ARahul2003/lamini_flan_t5_detoxify_rlaif")
model = AutoModelForCausalLMWithValueHead.from_pretrained("ARahul2003/lamini_flan_t5_detoxify_rlaif")

inputs = tokenizer("Hello, my llama is cute", return_tensors="pt")
outputs = model(**inputs, labels=inputs["input_ids"])
```

If you want to use the model for inference in a gradio app, consider the following code:

```python
from trl import AutoModelForSeq2SeqLMWithValueHead
from transformers import pipeline, AutoTokenizer
import torch
import gradio as gr

title = "LaMini Flan T5 248M"
checkpoint = "ARahul2003/lamini_flan_t5_detoxify_rlaif"  

tokenizer = AutoTokenizer.from_pretrained(checkpoint)
base_model = AutoModelForSeq2SeqLMWithValueHead.from_pretrained(checkpoint,
                                             device_map='cpu', #or 'auto'
                                             torch_dtype=torch.float32)
pipe = pipeline('text2text-generation', 
                 model = base_model,
                 tokenizer = tokenizer,
                 max_length = 512, 
                 do_sample=True,
                 temperature=0.3,
                 top_p=0.95,
                 )

def chat_with_model(inp_chat, chat_history = None):
    prompt = f"{inp_chat}" #f"User: {inp_chat} Bot:"

    responses = pipe(prompt)
    return responses[0]['generated_text']

examples = [
    'Hi!',
    'How are you?',
    'Please let me know your thoughts on the given place and why you think it deserves to be visited: \n"Barcelona, Spain"'
]

gr.ChatInterface(
    fn=chat_with_model,
    title=title,
    examples=examples
).launch()

```

Make sure to keep all the tensors on the same device (CPU/GPU).