Files
Victor Yang 51d8e29525 add NCE to MP-CNN (#84)
* update nce-sm

* refactor code, update torchtext

* use shared evaluation

* refactor code, use shared data loader

* refactor code

* refactor code

* refactor code according to Michael's great suggestions

* update readme and requirement

* update datasets and readme

* update data loader

* add space between +

* update refactor code

* add nce-mp

* remove duplicate files

* update readme, refactor code according to mp_cnn and delete duplicate code, follow PEP8 standard

* refactor code, add/delete comments

* import exit from sys
2018-01-03 18:12:57 -05:00
..
2018-01-03 18:12:57 -05:00
2018-01-03 18:12:57 -05:00
2018-01-03 18:12:57 -05:00
2018-01-03 18:12:57 -05:00
2018-01-03 18:12:57 -05:00
2018-01-03 18:12:57 -05:00

MP-CNN PyTorch Implementation

This is a PyTorch implementation of the following paper

The SICK and MSRVID datasets are available in https://github.com/castorini/data, as well as the GloVe word embeddings.

Directory layout should be like this:

├── Castor
│   ├── README.md
│   ├── ...
│   └── mp_cnn/
├── data
│   ├── README.md
│   ├── ...
│   ├── msrvid/
│   ├── sick/
│   └── GloVe/

TrecQA Dataset

To run MP-CNN on (Raw) TrecQA, you first need to run ./get_trec_eval.sh in utils under the repo root while inside the utils directory. This will download and compile the official trec_eval tool used for evaluation.

Then, you can run:

python train_script.py --dataset wikiqa --device -1
Metric Without NCE (original paper) only random sampling only max sampling Pair-wise+nagative sampling (original paper) Pair-wise+random sampling Pair-wise+nagative sampling Pair-wise+nagative sampling+pair weighting
MAP 0.762 0.7579 0.7678 0.780 0.7745 0.7873 0.7683
MRR 0.830 0.8239 0.8387 0.834 0.8435 0.8414 0.8253

The paper results are reported in Noise-Contrastive Estimation for Answer Selection with Deep Neural Networks.

WikiQA Dataset

You also need trec_eval for this dataset, similar to TrecQA.

Then, you can run:

python train_script.py --dataset trecqa --device -1
Metric Without NCE (original paper) only random sampling only max sampling Pair-wise+nagative sampling (original paper) Pair-wise+random sampling Pair-wise+nagative sampling Pair-wise+nagative sampling+pair weighting
MAP 0.693 0.6744 0.6795 0.701 0.7047 0.7049 0.7047
MRR 0.709 0.6898 0.6951 0.718 0.7172 0.7192 0.7211

The paper results are reported in Noise-Contrastive Estimation for Answer Selection with Deep Neural Networks.

To see all options available and train with your parameters, use

python main.py --help

Troubleshooting

ModuleNotFoundError: datasets

Traceback (most recent call last):
  File "main.py", line 9, in <module>
    from dataset import MPCNNDatasetFactory
  File "/u/z3tu/castorini/Castor/mp_cnn/dataset.py", line 12, in <module>
    from datasets.sick import SICK
ModuleNotFoundError: No module named 'datasets'

You need to make sure the repository root is in your PYTHONPATH environment variable. One way to do this is while you are in the repo root (Castor) as your current working directory, run export PYTHONPATH=$(pwd).

Optional Dependencies

To optionally visualize the learning curve during training, we make use of https://github.com/lanpa/tensorboard-pytorch to connect to TensorBoard. These projects require TensorFlow as a dependency, so you need to install TensorFlow before running the commands below. After these are installed, just add --tensorboard when running main.py and open TensorBoard in the browser.

pip install tensorboardX
pip install tensorflow-tensorboard