- Aliaksei _S_everyn and Alessandro _M_oschitti. 2015. Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks. In Proceedings of the 38th International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR '15). ACM, New York, NY, USA, 373-382. DOI: http://dx.doi.org/10.1145/2766462.2767738
Clone and create the dataset:
git clone https://github.com/castorini/data.git
git clone https://github.com/castorini/Castor.gitYou should you see the following tree:
.
├── Castor
│ ├── README.md
│ ├── baseline_results.tsv
│ ├── idf_baseline
│ ├── kim_cnn
│ ├── mp_cnn
│ ├── setup.py
│ ├── sm_cnn
└── data
├── GloVe
├── ParagramEmbeddings
├── README.md
├── SimpleQuestions_v2
├── TrecQA
├── WikiQA
├── msrvid
├── requirements.txt
├── sick
├── twitterPPDB
├── utils
└── word2vec
Parse the TrecQA datset:
cd ../../data/TrecQA/
python parse.py
cd -Parse the WikiQA datset:
cd ../../data/WikiQA/
unzip WikiQACorpus.zip
python create-train-dev-test-data.py
cd -Your repository root should be in your PYTHONPATH environment variable:
export PYTHONPATH=$(pwd)To create the dataset:
cd Castor/sm_cnn/
./create_dataset.shWe use trec_eval for evaluation:
cd ../utils/
./get_trec_eval.sh
cd ../sm_cnnDownload the word2vec model from here
and copy it to the data/ folder.
You can train the SM model for the 4 following configurations:
- random - the word embedddings are initialized randomly and are tuned during training
- static - the word embeddings are static (Severyn and Moschitti, SIGIR'15)
- non-static - the word embeddings are tuned during training
- multichannel - contains static and non-static channels for question and answer conv layers
To train on GPU 0 with static configuration:
python train.py --mode static --gpu 0NB: pass --no_cuda to use CPU
The trained model will be save to:
saves/static_best_model.pt
python main.py --trained_model saves/TREC/multichannel_best_model.pt
The performance on TrecQA dataset:
| Metric | rand | static | non-static | multichannel |
|---|---|---|---|---|
| MAP | 0.8096 | 0.8162 | 0.8387 | 0.8274 |
| MRR | 0.8560 | 0.8918 | 0.9058 | 0.8818 |
| Metric | rand | static | non-static | multichannel |
|---|---|---|---|---|
| MAP | 0.7441 | 0.7524 | 0.7688 | 0.7641 |
| MRR | 0.8172 | 0.8012 | 0.8144 | 0.8174 |
| Metric | rand | static | non-static | multichannel |
|---|---|---|---|---|
| MAP | 0.7109 | 0.7204 | 0.7049 | 0.7245 |
| MRR | 0.7169 | 0.7234 | 0.7075 | 0.7259 |
| Metric | rand | static | non-static | multichannel |
|---|---|---|---|---|
| MAP | 0.6313 | 0.6378 | 0.6455 | 0.6476 |
| MRR | 0.6522 | 0.6542 | 0.6689 | 0.6646 |
NB: The results on WikiQA are based on the SM model hyperparameters.
- Download word2vec from here
to the
data/folder
python $PYTHONPATH/utils/build_w2v.py --input data/aquaint+wiki.txt.gz.ndim=50.binNote that $PYTHONPATH holds the location of the repository root.