2tpg / README.md
drwahl's picture
Update README.md
39cc349 verified
|
Raw
History Blame Contribute Delete
4.42 kB
---
language: en
tags:
- gpt2
- reverse-prediction
- text-generation
license: mit
---
# 2-TPG
2-TPG is GPT-2, but fine-tuned on its own output to predict the _previous_ token rather than the next one.
## Model description
2-TPG is a transformers model based on GPT-2 (117M parameters) that has been fine-tuned to predict previous tokens instead of next tokens. While traditional language models are trained to guess the next word in a sequence, 2-TPG does the opposite - it predicts what came before.
This was accomplished by:
1. Taking sample text from GPT-2's typical output distribution
2. Tokenizing the text
3. **Reversing** the token sequence
4. Fine-tuning GPT-2 on these reversed sequences
The result is a model that has learned to "think backwards" - given a sequence like "The end of the story", it can generate what might have come before, rather than what might come after.
Evaluation shows that 2-TPG achieves a perplexity of 14.04 on reverse prediction tasks, compared to 9.05 for standard GPT-2 in the forward prediction task.
## Intended uses & limitations
This model can be used for:
- Generating text that leads up to a specific ending
- Exploring the "causes" that might lead to specific "effects" in text
- Probing language model understanding from a new direction
- Understanding how language models learn bidirectional dependencies
As with all language models, outputs should be treated as experimental and may contain biases present in the training data.
### How to use
You can use this model directly for reversed text generation:
```python
from transformers import GPT2LMHeadModel, GPT2Tokenizer
import torch
# Load the model and tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("drwahl/2tpg")
model = GPT2LMHeadModel.from_pretrained("drwahl/2tpg")
# Function for reverse text generation
def generate_what_came_before(prompt, max_length=50):
# Tokenize the prompt
tokens = tokenizer.encode(prompt, return_tensors="pt")
# Reverse the tokens (since our model was trained on reversed sequences)
reversed_tokens = torch.flip(tokens, dims=[1])
# Generate text with the model
output = model.generate(
reversed_tokens,
max_length=reversed_tokens.shape[1] + max_length,
do_sample=True,
temperature=1.2,
top_k=40,
top_p=0.95,
pad_token_id=tokenizer.eos_token_id
)
# Reverse the output tokens back to normal order
generated_tokens = torch.flip(output[0], dims=[0])[:max_length].cpu()
# Decode the generated tokens
generated_text = tokenizer.decode(generated_tokens, skip_special_tokens=True)
return generated_text
# Example usage
ending = "And they lived happily ever after."
beginning = generate_what_came_before(ending)
print(f"Generated beginning: {beginning}")
print(f"Ending: {ending}")
```
## Training data
The model was fine-tuned on a dataset derived from [GPT-2's typical output distribution](https://github.com/openai/gpt-2-output-dataset). The training process involved:
1. Generating text samples from the base GPT-2 model
2. Reversing the token sequences
3. Fine-tuning the model to predict these reversed sequences
## Training procedure
The model was trained using a standard language modeling objective, but on reversed sequences. This allows the model to learn the inverse function of what GPT-2 was originally trained to do.
### Preprocessing
Texts were tokenized using GPT-2's byte-level BPE tokenizer, then the token sequences were reversed before training.
## Evaluation results
The model was evaluated on a validation set consisting of 5,000 examples. Here's how it compares to the base GPT-2 model:
| Model | Direction | Perplexity |
|-------|-----------|------------|
| 2-TPG | Reverse | 14.04 |
| 2-TPG | Forward | 705.52 |
| GPT-2 | Reverse | 284.11 |
| GPT-2 | Forward | 9.05 |
These results show that:
- 2-TPG is 20x better than standard GPT-2 at predicting previous tokens
- 2-TPG has specialized for the reverse prediction task, as its forward prediction performance is significantly worse than standard GPT-2
- Each model performs best at the task it was trained for
## Citation
If you use this model in your research, please cite:
```bibtex
@misc{wahl2025reversed,
title={2-TPG: Reversing the Direction of Language Model Prediction},
author={Wahl, Daniel},
year={2025}
}
```