transformers pytorch rust safetensors t5 text2text-generation text-generation en fr dataset:wikitext dataset:bookcorpus base_model:t5 license:apache-2.0 autotrain_compatible endpoints_compatible text-generation-inference region:us
---
language:
- en
- fr
thumbnail: "https://www.warpy.io/_next/static/media/tgshell_icon.4fa45b6d.svg"
tags:
- text-generation
- t5
license: "apache-2.0"
datasets:
- wikitext
- bookcorpus
metrics:
- perplexity
- bleu
base_model: "t5"
---

# tgs-model

# Terminal Generative Shell (tgs) Model

## TGS Model implements NL2Bash: Natural Language Interface to Linux Bash



## Citation

If you use this software, please cite it as follows:

```bibtex
@inproceedings{LinWZE2018:NL2Bash,
  author = {Xi Victoria Lin and Chenglong Wang and Luke Zettlemoyer and Michael D. Ernst},
  title = {NL2Bash: A Corpus and Semantic Parser for Natural Language Interface to the Linux Operating System},
  booktitle = {Proceedings of the Eleventh International Conference on Language Resources and Evaluation {LREC} 2018, Miyazaki (Japan), 7-12 May, 2018.},
  year = {2018}
}
```

## Description

This project is based on the NL2Bash dataset, constructed from the GitHub repository [nl2bash](https://github.com/TellinaTool/nl2bash). The objective is to create a semantic parser that translates natural language commands into executable Bash commands using deep learning techniques.

## Installation

### Prerequisites

- Python 3.6+
- PyTorch
- Transformers library
- PyTorch Lightning
- Scikit-learn
- Sentencepiece

### Setup

Clone the repository and install the required packages:

```bash
git clone https://github.com/your-repo/nl2bash.git
cd nl2bash
pip install -r requirements.txt
```

## Usage

1. **Import Libraries**  
   Import all the necessary libraries including PyTorch, Transformers, and PyTorch Lightning.

2. **Load Data**  
   Load the NL2Bash dataset JSON file and inspect its structure.

3. **Preprocess Data**  
   Convert the data into a suitable format for training, including tokenization.

4. **Model Initialization**  
   Initialize the T5 model and tokenizer, and set up the necessary configurations.

5. **Training**  
   Train the model using PyTorch Lightning with specified callbacks and checkpointing.

6. **Validation and Testing**  
   Validate and test the model on the NL2Bash dataset.

7. **Model Inference**  
   Use the trained model to translate natural language commands to Bash commands.

## Example

Here's a quick example to get you started:

```python
from your_module import NL2BashModel, generate_answer
model = NL2BashModel.load_from_checkpoint('path_to_checkpoint')
tokenizer = YourTokenizer.from_pretrained('path_to_tokenizer')
question = "Prints process tree of a current process with id numbers and parent processes."
answer = generate_answer(question, model, tokenizer)
print(answer)
```

## Training Analysis

The T5 model was fine-tuned for the NL2Bash task. The training process showed the following characteristics:

![training_analysis.png](https://github.com/warpy-ai/tgs-model/blob/main/plot.png)

- Training Loss: Demonstrated a consistent decrease over time, indicating effective learning and adaptation to the training data.
- Validation Loss: Also decreased, suggesting good generalization to unseen data.
- Stability: The training process was stable, without significant fluctuations in loss values.
- Overfitting: No evidence of overfitting was observed, as both training and validation losses decreased concurrently.

This analysis provides confidence in the model's ability to learn and generalize from the NL2Bash dataset effectively.

### Bias Analysis

tgs_model `v0.1.0` has a bias towards the NL2Bash dataset. The nl2bashdataset has a huge amount of `find` command on top of the others.

![training_analysis.png](https://camo.githubusercontent.com/3d88e1e35b0b2774ad407760a6718e7975e99ede72d687c8149ee100a8c6a62f/687474703a2f2f766963746f7269616c696e2e6e65742f696d672f6769746875622f6e6c32626173682d7574696c6974792d64697374322e706e67)

For the `v0.2.0` model, we will be treating the NL2Bash dataset as a biased dataset. We will be using the [NL2Bash-2](https://github.com/TellinaTool/nl2bash-2) dataset. The dataset is a more balanced dataset with more commands.

## Contributing

Contributions to improve NL2Bash are welcome. Please read `CONTRIBUTING.md` for guidelines on how to contribute.

## License

This project is licensed under the MIT License - see the `LICENSE` file for details.
