|
 |
|
 |
|
 |
|
|
|
# Module networks for question answering on knowledge graph |
|
|
|
This code repository contains a TensorFlow model for question answering on |
|
knowledge graph with end-to-end module networks. The original paper describing |
|
end-to-end module networks is as follows. |
|
|
|
R. Hu, J. Andreas, M. Rohrbach, T. Darrell, K. Saenko, *Learning to Reason: |
|
End-to-End Module Networks for Visual Question Answering*. in arXiv preprint |
|
arXiv:1704.05526, 2017. ([PDF](https://arxiv.org/pdf/1704.05526.pdf)) |
|
|
|
``` |
|
@article{hu2017learning, |
|
title={Learning to Reason: End-to-End Module Networks for Visual Question Answering}, |
|
author={Hu, Ronghang and Andreas, Jacob and Rohrbach, Marcus and Darrell, Trevor and Saenko, Kate}, |
|
journal={arXiv preprint arXiv:1704.05526}, |
|
year={2017} |
|
} |
|
``` |
|
|
|
The code in this repository is based on the original |
|
[implementation](https://github.com/ronghanghu/n2nmn) for this paper. |
|
|
|
## Requirements |
|
|
|
1. Install TensorFlow 1.0.0. Follow the [official |
|
guide](https://www.tensorflow.org/install/). Please note that newer or older |
|
versions of TensorFlow may fail to work due to incompatibility with |
|
TensorFlow Fold. |
|
2. Install TensorFlow Fold. Follow the |
|
[setup instructions](https://github.com/tensorflow/fold/blob/master/tensorflow_fold/g3doc/setup.md). |
|
TensorFlow Fold only supports Linux platform. We have not tested |
|
the code on other platforms. |
|
|
|
## Data |
|
|
|
1. Download the [MetaQA dataset](https://goo.gl/f3AmcY). Click the button |
|
`MetaQA` and then click `Download` in the drop-down list. Extract the zip |
|
file after downloading completed. Read the documents there for dataset |
|
details. |
|
2. Move the `MetaQA` folder to the root directory of this repository. |
|
|
|
## How to use this code |
|
|
|
We provide an experiment folder `exp_1_hop`, which applies the implemented model |
|
to the 1-hop vanilla dataset in MetaQA. More experiment folders are coming soon. |
|
|
|
Currently, we provide code for training with ground truth layout, and testing |
|
the saved model. Configurations can be modified in `config.py`. They can also be |
|
set via command line parameters. |
|
|
|
To train the model: |
|
|
|
``` |
|
python exp_1_hop/train_gt_layout.py |
|
``` |
|
|
|
To test the saved model (need to provide the snapshot name): |
|
|
|
``` |
|
python exp_1_hop/test.py --snapshot_name 00010000 |
|
``` |
|
|
|
## Model introduction |
|
|
|
1. In this model, we store the knowledge graph in a key-value based memory. For |
|
each knowledge graph edge (subject, relation, object), we use the (subject, |
|
relation) as the key and the object as the value. |
|
2. All entities and relations are embedded as fixed-dimension vectors. These |
|
embeddings are also end-to-end learned. |
|
3. Neural modules can separately operate on either the key side or the value |
|
side. |
|
4. The attention is shared between keys and corresponding values. |
|
5. The answer output is based on the attention-weighted sum over keys or |
|
values, depending on the output module. |
|
|
|
## Contact |
|
Authors: Yuyu Zhang, Xin Pan |
|
|
|
Pull requests and issues: @yuyuz |
|
|