Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tomhosking/torchseq
Pytorch Seq2Seq framework
https://github.com/tomhosking/torchseq
Last synced: 24 days ago
JSON representation
Pytorch Seq2Seq framework
- Host: GitHub
- URL: https://github.com/tomhosking/torchseq
- Owner: tomhosking
- License: apache-2.0
- Created: 2018-10-17T17:32:53.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2024-07-17T14:27:05.000Z (4 months ago)
- Last Synced: 2024-10-08T13:26:39.151Z (about 1 month ago)
- Language: Python
- Homepage:
- Size: 2.7 MB
- Stars: 26
- Watchers: 5
- Forks: 4
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TorchSeq
[![codecov](https://codecov.io/gh/tomhosking/torchseq/branch/main/graph/badge.svg?token=GK9W2LMJDU)](https://codecov.io/gh/tomhosking/torchseq) ![TorchSeq](https://github.com/tomhosking/torchseq/workflows/TorchSeq/badge.svg) [![Documentation Status](https://readthedocs.org/projects/torchseq/badge/?version=latest)](https://torchseq.readthedocs.io/en/latest/?badge=latest)
TorchSeq is a research-first sequence modelling framework built in Pytorch. It's designed to be easy to hack, without crazy levels of inheritance and easy access to the guts of the model.
## Setup
From a fresh venv, run:
```
pip install -r requirements.txt
pip install -e .
``````
# Optional: this will download a bunch of pretrained models from HuggingFace
python3 ./scripts/download_models.py
```Datasets go in `./data/` by default, e.g. `./data/squad/`.
Download our cleaned and clustered split of Paralex [here](http://tomho.sk/models/torchseq/paralex.zip), which goes in `./data/wikianswers-pp/`.
## Quickstart
Have a look in `./examples/` for some notebooks that show how to interact with pretrained models, or try training your own models using the configuration files in `./configs/`:
```
torchseq --train --config ./configs/qg_bart.json
```Then evaluate it with a snippet like this:
```
import json
from torchseq.agents.aq_agent import AQAgent
from torchseq.datasets.qa_loader import QADataLoader
from torchseq.utils.config import Config
from torchseq.metric_hooks.textual import TextualMetricHook
import torchmodel_path = '../models/examples/20210223_191015_qg_bart/'
# Load the config
with open(model_path + 'config.json') as f:
cfg_dict = json.load(f)config = Config(cfg_dict)
# Load the model
instance = AQAgent(config=config, run_id=None, output_path="./runs/examples/qg_bert_eval", data_path="../data/", silent=False, verbose=False)
instance.load_checkpoint(model_path + 'model/checkpoint.pt')
instance.model.eval()# Create a dataset
data_loader = QADataLoader(config, data_path="../data/")# Run inference on the test split
test_loss, all_metrics, (pred_output, gold_output, gold_input), memory_values_to_return = instance.inference(data_loader.test_loader, metric_hooks=[TextualMetricHook(config, 'c', 'q')])# Done!
print(all_metrics['bleu'])
```
> 21.065812894587264You can also easily run your model on a custom dataset:
```
examples = [
{'c': 'Creme Puff was the oldest cat.', 'a': 'Creme Puff'},
{'c': 'Creme Puff lived for 38 years and 3 days', 'a': '38 years and 3 days'},
]# The examples need the answer character position, and a placeholder for the question
examples = [
{**ex, 'a_pos': ex['c'].index(ex['a']), 'q': ''} for ex in examples
]
data_loader_custom = QADataLoader(config, test_samples=examples)test_loss, all_metrics, (pred_output, gold_output, gold_input), memory_values_to_return = instance.inference(data_loader_custom.test_loader)
print(pred_output)
```
> ['Who was the oldest cat?', 'How long did Creme Puff live?']## Pretrained models
Unzip the models to their own folder within `./models/examples/`, e.g. `./models/examples/20210222_145034_qg_transformer/` - then load the model into torchseq using the flag `--load ./models/examples/20210222_145034_qg_transformer/` or the snippet above.
### Question Generation
A transformer model trained on SQuAD - \[ [Download](http://tomho.sk/models/torchseq/qg_transformer.zip) \]
A transformer model using BERT encodings trained on SQuAD - \[ [Download](http://tomho.sk/models/torchseq/qg_bert.zip) \]
BART fine tuned on SQuAD - \[ [Download](http://tomho.sk/models/torchseq/qg_bart.zip) \]
### Paraphrasing
A vanilla autoencoder trained on Paralex - \[ [Download](http://tomho.sk/models/torchseq/paraphrasing_ae.zip) \]
A VAE model trained on Paralex - \[ [Download](http://tomho.sk/models/torchseq/paraphrasing_vae.zip) \]
A VQ-VAE model trained on Paralex - \[ [Download](http://tomho.sk/models/torchseq/paraphrasing_vqvae.zip) \]
Separator for Paralex and QQP
## Citation
If you find TorchSeq useful, please cite one of my papers!
```
@inproceedings{hosking-lapata-2021-factorising,
title = "Factorising Meaning and Form for Intent-Preserving Paraphrasing",
author = "Hosking, Tom and
Lapata, Mirella",
booktitle = "Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers)",
month = aug,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.acl-long.112",
doi = "10.18653/v1/2021.acl-long.112",
pages = "1405--1418",
}
```
```
@inproceedings{hosking-etal-2022-hierarchical,
title = "Hierarchical Sketch Induction for Paraphrase Generation",
author = "Hosking, Tom and
Tang, Hao and
Lapata, Mirella",
booktitle = "Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)",
month = may,
year = "2022",
address = "Dublin, Ireland",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2022.acl-long.178",
doi = "10.18653/v1/2022.acl-long.178",
pages = "2489--2501",
}
```