This repository provides code for reproducing experiments of the paper Talk The Walk: Navigating New York City Through Grounded Dialogue by Harm de Vries, Kurt Shuster, Dhruv Batra, Devi Parikh, Jason Weston, and Douwe Kiela.
First, create a conda environment with installed dependencies:
conda env create -f environment.yml
source activate ttw
# run your experiments
deactivate # Exit virtual environment
In case you get the error "no module named ttw" when running one of the experiments, please add the main directory to your python path:
export PYTHONPATH=/path/to/talkthewalk:$PYTHONPATH
Download the data by running the following bash script:
sh scripts/download_data.sh DATA_DIR
where DATA_DIR specifies the directory where the data files will be downloaded to (defaults to ./data).
For all experiments, the data directory can be specified through the --data-dir
argument.
Create a directory to store your experiments (logs and model checkpoints), for instance by mkdir exp
to
create an experiment directory in the main talkthewalk folder. By default, experiments will be saved to ./exp
but you can change the experiment directory via the --exp-dir
flag. The results of each experiment will be saved
in this directory under the experiment name, specified via --exp-name
.
To reproduce tourist location via discrete communication, run the following command to train the tourist and guide models:
python ttw/train/predict_location_discrete.py \
--vocab-sz 500 --apply-masc \
--T 1 --exp-name discrete_masc_T1 \
--num-epochs 200 --cuda
For continuous communication, run:
python ttw/train/predict_location_continuous.py \
--vocab-sz 500 --apply-masc \
--T 1 --exp-name continuous_masc_T1 \
--num-epochs 200 --cuda
First, create a dictionary:
python ttw/dict.py --data-dir DATA_DIR
which will save the dictionary to DATA_DIR/dict.txt
.
Next, train the tourist with imitation learning:
python ttw/train/train_tourist.py \
--exp-name tourist_imitation \
--exp-dir EXP_DIR --cuda
To train a guide (from scratch) to perform location prediction from generated tourist utterances, run:
python ttw/train/predict_location_generated.py \
--tourist-model EXP_DIR/tourist_imitation/tourist.pt \
--decoding-strategy greedy --trajectories all \
--train-guide --T 0 --cuda
where --trajectories all
indicates to train on random walk trajectories of length --T
. If --trajectories human
, then the model will be trained
on human trajectories of the Talk The Walk dataset.
To optimize the tourist generation (with RL) in conjunction with a pre-trained guide: first, pretrain the guide:
python ttw/train/predict_location_language.py \
--last-turns 1 \
--exp-name guide_imitation \
--apply-masc --T 3 --cuda
next, train the tourist with the following command:
python ttw/train/predict_location_generated.py \
--tourist-model EXP_DIR/tourist_imitation/tourist.pt \
--guide-model EXP_DIR/guide_imitation/guide.pt \
--decoding-strategy sample --train-tourist --cuda
For discrete comm, the command will be of the following form:
python scripts/evaluate_location.py \
--tourist-model TOURIST_CHECKPOINT \
--guide-model GUIDE_CHECKPOINT \
--communication discrete --cuda
For natural language communication, run:
python scripts/evaluate_location.py \
--tourist-model TOURIST_CHECKPOINT \
--guide-model GUIDE_CHECKPOINT \
--communication natural \
--decoding-strategy greedy --cuda
If you want to run experiments using fasttext features, please install fastText via anaconda's pip of the ttw environment (follow instructions here). Next, download pretrained vectors wiki.en.zip, extract wiki.en.bin and put the file into the data directory.
To run landmark classification with text recognition features, use the following command:
python ttw/train/classify_landmarks.py --textrecog-features
Talk the Walk is CC-BY-NC licensed, as found in the LICENSE file.