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 environmentIn 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:$PYTHONPATHDownload the data by running the following bash script:
sh scripts/download_data.sh DATA_DIRwhere 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 --cudaFor 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 --cudaFirst, create a dictionary:
python ttw/dict.py --data-dir DATA_DIRwhich 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 --cudaTo 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 --cudawhere --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 --cudanext, 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 --cudaFor 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 --cudaFor natural language communication, run:
python scripts/evaluate_location.py \
--tourist-model TOURIST_CHECKPOINT \
--guide-model GUIDE_CHECKPOINT \
--communication natural \
--decoding-strategy greedy --cudaIf 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-featuresTalk the Walk is CC-BY-NC licensed, as found in the LICENSE file.