Library / SDK
vsuthichai/paraphraser avatar
vsuthichai/paraphraser

paraphraser: a 2017 paraphrase checkpoint, a Google Drive download, and a setup.py that declares nothing

Sentence paraphrase generation at the sentence level

407 stars97 forksPythonMIT

At a glance

What is it?
vsuthichai/paraphraser exposes a bidirectional LSTM with attention as a small sentence-level paraphrase API. The model is real and the training notes are honest, but the checkpoint lives outside the repository, two Tensorflow versions are named in one document, and the packaging metadata is thinner than the install hooks it carries.
Who is it for?
Take this if you want to read the pipeline rather than call a service, you are willing to run a Tensorflow 1.x environment, and you already have somewhere to host a checkpoint file. Skip it if you need a maintained package you can pip install and pin, because the dependency pins are from 2018, the repository has no releases, and the README's own pip installable package item is still sitting in the TODO list.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 95 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 11, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Two Tensorflow versions, one document, and pins from 2018

The prerequisites list is short: python 3.5, Tensorflow 1.4.1 and spacy. Two paragraphs later, the setup section tells you to run conda install tensorflow==1.14. Those are different versions in the same file, and nothing in the document says which one the checkpoint was saved with. The heading above that list is spelled Prerequisiteis, which is the level of care the rest of the file is written to.

That environment lives in a file at the repository root, env.yml, and two commands bring it up.

code
conda env create -f env.yml
code
conda activate paraphraser-env

The environment is named paraphraser-env while the package directory is named paraphraser, so the final inference step needs both: an activated environment and a cd into the directory that holds inference.py and the checkpoints folder.

requirements.txt is where the real vintage shows. It pins tensorflow-gpu==1.4.1 next to spacy==2.0.5, Keras==2.1.3, numpy==1.14.0, nltk==3.4.5, thinc==6.10.2 and scipy==1.0.0, with gpustat and nvidia-ml-py3 in the list because training happened on a GPU. None of those versions has a current release line, so installing this file today means reconstructing an environment that was coherent in early 2018.

Three optional commands are offered with the word MAY rather than as required steps:

code
conda install tensorflow==1.14
conda install spacy
python3 -m spacy download en_core_web_sm

The spaCy model is the one that matters most, because en_core_web_sm is the English pipeline the paraphrasing code tokenizes against.

The checkpoint lives on Google Drive, and the README wants it renamed

Nothing model-shaped is in the repository. The weights arrive as a separate download, and the directory tree is small enough to list: .gitignore, LICENSE, README.md, env.yml, images/, paraphraser/, requirements.txt, setup.cfg and setup.py.

The README asks for two downloads and two renames. Fetch the paraphrase model from the linked Google Drive file, rename it to checkpoints, and place it inside the /paraphraser/paraphraser directory. Fetch para-nmt-50m separately, rename that to para-nmt-50m as well, and place it inside the /paraphraser directory rather than one level deeper. Getting either path wrong produces a load failure at inference time with nothing in the README to explain it.

The embeddings are not the author's own work. Pretrained embeddings come from John Wieting's para-nmt-50m project, which is also where the two papers the README cites come from: Pushing the Limits of Paraphrastic Sentence Embeddings with Millions of Machine Translations, and Learning Paraphrastic Sentence Embeddings from Back-Translated Bitext.

The same inference command, written two different ways

The inference command appears twice with different path shapes.

The first, under the model section, is a template:

code
python inference.py --checkpoint=<checkpoint_path/model-171856>

The second, at the end of the setup walkthrough, is concrete:

code
cd paraphraser
python inference.py --checkpoint=checkpoints/model-171856

The model directory is named model-171856 in both, which is a Unix timestamp for the checkpoint's training run rather than a version. A second read is needed to notice that the first form implies the checkpoint directory sits somewhere else on disk, while the second assumes it was renamed to checkpoints and left in the working directory. Nothing tells you which layout inference.py expects.

Run it from inside the paraphraser directory, and the demo for the finished API is at pair-a-phrase.it.

setup.py downloads corpora at install time and declares no requirements

The packaging metadata and the install hooks disagree. setup.py declares name paraphraser at version 0.1.0, author Victor, description Generate sentence paraphrases given an input sentence, and a Development Status :: 3 - Alpha classifier. It then sets install_requires=[] and extras_require={} with both dicts empty, so pip resolves nothing.

What it does add are two custom install commands. DownloadCorpora imports spacy and nltk during installation and calls nltk.download('wordnet') plus spacy.cli.download('download', 'en'), so the package insists on two third-party libraries while declaring a dependency list that names none of them. DownloadParaphraseModel fetches paraphrase-model.tar.gz from a Google Drive id at install time.

The classifier list compounds the confusion: it claims support for Python 2.7 and 3.4 through 3.6 while the prerequisite line asks for python 3.5, and py_modules lists paraphrase.synonym_model, paraphrase.inference and paraphrase.download_models rather than a package tree. package_data and data_files are empty as well, so a wheel built from this metadata carries three modules and nothing else.

requirements.txt depends on the project it belongs to

The pinned requirements file lists paraphraser==0.1.0a1 among its 70-odd entries, alongside uWSGI==2.0.15, murmurhash==0.28.0, msgpack-numpy==0.4.1, html5lib==0.9999999 and bleach==1.5.0. Several of those are there for the web demo rather than for inference.

A file depending on its own project is harmless until it is read as instructions, and then it becomes a trap: pip sees a satisfiable requirement and installs an alpha of paraphraser from wherever it finds one, while the source you are trying to run sits in the directory you just cloned. Removing that single line is what separates the local checkout from the published alpha, and nothing in the README points at it.

The version strings do not line up either. setup.py says 0.1.0, requirements.txt asks for 0.1.0a1, and the repository has no GitHub releases to arbitrate.

The TODO list still asks for a pip installable package

The remaining work list is short enough to quote in full, and its first item is the interesting one: pip installable package. A setup.py and a setup.cfg are sitting in the root of the same repository that still lists the pip package as unfinished.

The rest is model work rather than packaging work: explore deeper number of layers, recurrent layer dropout, greater dataset augmentation, try residual layer, model compression, and byte pair encoding for out of set vocabulary. The last one is the standard remedy for a closed vocabulary, which is what a sentence paraphraser with fixed embeddings has. Nothing in the list mentions updating the pinned dependencies, replacing Tensorflow 1.x, or refreshing the hosted checkpoint.

Read as a maintenance signal, that omission is the useful part. The architecture work is still framed around improving a bidirectional LSTM, which places the project's thinking in a specific era rather than leaving it open-ended.

Two epochs on a GTX 1080, and a training set nobody received

The training notes are the most honest section in the document. Training ran for 2 epochs on an Nvidia GTX 1080 and was evaluated on BLEU score. Tensorboard curves are shown, with the grey curve as train and the orange curve as dev, and the two curves are described rather than interpreted.

The training data is an aggregation of many public datasets. Four are named: para-nmt-5m, Quora question pair, SNLI and Semeval, followed by an open-ended and more. The aggregate is not in the repository, and the README asks readers to contact the author directly if they want to know more about it. That means reproducing the checkpoint means rebuilding the aggregate yourself, which is a research task rather than a setup step.

The project was developed under the Insight Data Science Artificial Intelligence program. With 407 stars, 97 forks and 31 open issues, and a last push on 9 July 2026, this is an archived-in-spirit but not archived project: readable, runnable in principle, and no longer moving.

Editorial conclusion

Take this if you want to read the pipeline rather than call a service, you are willing to run a Tensorflow 1.x environment, and you already have somewhere to host a checkpoint file. Skip it if you need a maintained package you can pip install and pin, because the dependency pins are from 2018, the repository has no releases, and the README's own pip installable package item is still sitting in the TODO list. Before starting, confirm the Google Drive checkpoint is reachable and decide whether you can live with Tensorflow 1.14 alongside a requirements file that pins 1.4.1.

Frequently asked questions

What does the vsuthichai/paraphraser model do?

It generates sentence-level paraphrases. The underlying model is a bidirectional LSTM encoder and LSTM decoder with attention, trained using Tensorflow, and exposed through a simple API whose demo runs at pair-a-phrase.it.

What does vsuthichai/paraphraser need before inference will run?

The prerequisites are python 3.5, Tensorflow 1.4.1 and spacy. The setup walkthrough adds a conda environment created from env.yml, the downloaded checkpoint renamed to checkpoints inside the paraphraser directory, the para-nmt-50m embeddings folder beside it, and three optional conda installs including the en_core_web_sm spaCy model.

How was the vsuthichai/paraphraser model trained?

For 2 epochs on an Nvidia GTX 1080, evaluated on BLEU score, with Tensorboard curves where grey is train and orange is dev. The training data aggregates public datasets including para-nmt-5m, Quora question pair, SNLI and Semeval, and that aggregate is not included in the repository.

What package metadata does vsuthichai/paraphraser ship?

setup.py declares name paraphraser at version 0.1.0, author Victor and a Development Status :: 3 - Alpha classifier. install_requires and extras_require are both empty, while two custom install commands download the NLTK wordnet corpus, the spaCy English model and paraphrase-model.tar.gz from Google Drive.

When was vsuthichai/paraphraser last updated?

The last push to the repository was on 9 July 2026. There are no GitHub releases, and the repository shows 407 stars, 97 forks and 31 open issues.

Official sources

  1. Issues
  2. License: MIT
  3. Project website
  4. README
  5. vsuthichai/paraphraser on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vsuthichai-paraphraser.svg)](https://hysenlabs.com/projects/vsuthichai-paraphraser)