End-To-End Memory Networks for Question Answering
This is an implementation of MemN2N model in Python for the bAbI question-answering tasks as shown in the Section 4 of the paper "End-To-End Memory Networks". It is based on Facebook's Matlab code.
Requirements
- Python 2.7
- Numpy, Flask (only for web-based demo) can be installed via pip:
$ sudo pip install -r requirements.txt
- bAbI dataset should be downloaded to
data/tasks_1-20_v1-2
:
$ wget -qO- http://www.thespermwhale.com/jaseweston/babi/tasks_1-20_v1-2.tar.gz | tar xvz -C data
Usage
- To run on a single task, use
babi_runner.py
with-t
followed by task's id. For example,
python babi_runner.py -t 1
The output will look like:
Using data from data/tasks_1-20_v1-2/en
Train and test for task 1 ...
1 | train error: 0.876116 | val error: 0.75
|=================================== | 71% 0.5s
- To run on 20 tasks:
python babi_runner.py -a
- To train using all training data from 20 tasks, use the joint mode:
python babi_runner.py -j
Question Answering Demo
- In order to run the Web-based demo using the pretrained model
memn2n_model.pklz
intrained_model/
, run:
python -m demo.qa
- Alternatively, you can try the console-based demo:
python -m demo.qa -console
- The pretrained model
memn2n_model.pklz
can be created by running:
python -m demo.qa -train
- To show all options, run
python -m demo.qa -h
Benchmarks
See the results here.
Author
Vinh Khuc
Future Plans
- Port to TensorFlow/Keras
- Support Python 3
References
- Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, Rob Fergus, "End-To-End Memory Networks", arXiv:1503.08895 [cs.NE].