This is the code for the following paper:
Target-Guided Open-Domain Conversation
Jianheng Tang, Tiancheng Zhao, Chenyan Xiong, Xiaodan Liang, Eric Xing, Zhiting Hu; ACL 2019
nltk==3.4
tensoflow==1.12
texar>=0.2.1
(Texar)The dataset developed in the paper is on google drive. Download
and unzip it into preprocess/convai2
. Then run the following command:
cd preprocess
python prepare_data.py
By default, the processed data will be put in the tx_data
directory.
In this project there are 5 different types of agents, including the kernel/neural/matrix/retrieval/retrieval_stgy agent,
which are all discribed in the paper. You can modify the configration of each agent in the config
directory.
To train the kernel/neural/matrix agent, you need to first train/test the keyword prediction module,
and then train/test the retrieval module of each agent specified by the --agent
parameter.
python train.py --mode train_kw --agent kernel
python train.py --mode train --agent kernel
python train.py --mode test --agent kernel
The retrieval agent and the retrieval_stgy agent share the same retrival module. You only need to train one of them:
python train.py --mode train --agent retrieval
python train.py --mode test --agent retrieval
After turn-level training, you can start target-guided conversation (human evaluation) with
the kernel/neural/matrix/retrieval/retrieval_stgy agent specified by the --agent
parameter.
python chat.py --agent kernel
A demo of target-guided conversation (user is required to input the response after HUMAN:
)
--------Session 0 --------
START: hello, how are you doing
HUMAN: hi i am great just finishing up some homework. how about you
AGENT: just got done eating some chicken and rice after i got done with my gym session
HUMAN: i am gonna eat some vegetable for dinner
AGENT: so you are vegetarian ? i am from los angeles so thereare lots of vegetarian restaurants
HUMAN: i am not a vegetarian . fried chicken is my favorite.
AGENT: oh boy , when i go to mcdonald i always get fries for my 2 dogs
Successfully chat to the target 'mcdonald'.
You can also watch the simulation of the target-guided conversation
between the retrieval agent pretending the user and the kernel/neural/matrix/retrieval_stgy agent specified by the --agent
parameter. Simulation times are defined by the --times
parameter. The program will calculate the success times and average turns in the end.
python simulate.py --agent kernel --times 100
A demo of simulation:
--------Session 0 --------
START: hey hey good morning to you
retrieval_agent: fine thanks . what do you do for a living ?
kernel_agent: rewarding job , i work at a hospital
Keyword: job, Similarity: 0.58
Successfully chat to the target 'hospital'.
...
--------Session 99 --------
START: hey hows it going ? i'm just cooking a steak
retrieval_agent: i'm thinking of a bbq sandwich for lunch
kernel_agent: nice i love to cook but now its just me and the fur babies
Keyword: baby, Similarity: 0.45
retrieval_agent: i love bagels however i own a dry cleaners
kernel_agent: i love animals felix my cat and my dog emmy
Keyword: cat, Similarity: 0.56
retrieval_agent: sounds awesome i have all kind of pets my family own a farm
kernel_agent: i love blue as well even my hair is blue
Keyword: blue, Similarity: 1.00
Successfully chat to the target 'blue'.
success time 83, average turns 4.28