This is an implementation of NLProlog, a method for approaching Question Answering tasks with Prolog-like reasoning over natural language statements.
At the core of NLProlog is the Prolog interpreter sPyrolog, which can be found in a separate repository. sPyrolog is a fork of the Prolog interpreter Pyrolog.
This is highly experimental research code which is not suitable for production usage. We do not provide warranty of any kind. Use at your own risk.
- The python version has to be at least
3.6
. - A working version of sPyrolog has to reside in the project root, if the precompiled version from this repository does not work for you, try recompiling it from the sPyrolog repository.
- Install sent2vec and place its wiki-unigrams model in the project root. For reproducing the results on MedHop, the BioSent2Vec model has to reside in the project root.
- Install the
requirements.txt
, e.g. withpip install -r requirements.txt
. - Install pyTorch 1.0
Training a model is straight forward.
For instance, to reproduce the results for the country
predicate of WikiHop use
python train.py configs/country_sent2vec.json
To evaluate the trained model use
python evaluate.py model/country_sent2vec
This will generate a new results file in results/
which can be analyzed like shown in this example notebook.
To train a model on your own data, convert it to the WikiHop format, place it into data/
and put a configuration file into configs/
.