class DialogEnv(gym.Env): def __init__( self, user_goals: List[UserGoal], emc_params: Dict, max_round_num: int, database: Dict, slot2values: Dict[str, List[Any]], ) -> None: self.user = UserSimulator(user_goals, max_round_num) self.emc = ErrorModelController(slot2values, emc_params) self.state_tracker = StateTracker(database, max_round_num) self.action_space = gym.spaces.Discrete(len(AGENT_ACTIONS)) self.observation_space = gym.spaces.multi_binary.MultiBinary( self.state_tracker.get_state_size()) def step(self, agent_action_index: int): agent_action = map_index_to_action(agent_action_index) self.state_tracker.update_state_agent(agent_action) user_action, reward, done, success = self.user.step(agent_action) if not done: self.emc.infuse_error(user_action) self.state_tracker.update_state_user(user_action) next_state = self.state_tracker.get_state(done) return next_state, reward, done, success def reset(self): self.state_tracker.reset() init_user_action = self.user.reset() self.emc.infuse_error(init_user_action) self.state_tracker.update_state_user(init_user_action) return self.state_tracker.get_state()
# Load movie dict db_dict = pickle.load(open(DICT_FILE_PATH, 'rb'), encoding='latin1') # Load goal File user_goals = pickle.load(open(USER_GOALS_FILE_PATH, 'rb'), encoding='latin1') # Init. Objects if USE_USERSIM: user = UserSimulator(user_goals, constants, database) else: user = User(constants) emc = ErrorModelController(db_dict, constants) state_tracker = StateTracker(database, constants) sarsa_agent = SARSAgent(state_tracker.get_state_size(), constants) #dqn_agent = DQNAgent(state_tracker.get_state_size(), constants) def run_round(state, warmup=False): # 1) Agent takes action given state tracker's representation of dialogue (state) agent_action_index, agent_action = sarsa_agent.get_action(state, use_rule=warmup) # 2) Update state tracker with the agent's action state_tracker.update_state_agent(agent_action) # 3) User takes action given agent action user_action, reward, done, success = user.step(agent_action) if not done: # 4) Infuse error into semantic frame level of user action emc.infuse_error(user_action) # 5) Update state tracker with user action
# Load movie dict db_dict = pickle.load(open(DICT_FILE_PATH, 'rb'), encoding='latin1') # Load goal File user_goals = pickle.load(open(USER_GOALS_FILE_PATH, 'rb'), encoding='latin1') # Init. Objects if USE_USERSIM: user = UserSimulator(user_goals, constants, database) else: user = User(constants) emc = ErrorModelController(db_dict, constants) state_tracker = StateTracker(database, constants) dqn_agent = DuellingQNetworkAgent(state_tracker.get_state_size(), constants) def run_round(state, warmup=False): # 1) Agent takes action given state tracker's representation of dialogue (state) agent_action_index, agent_action = dqn_agent.get_action(state, use_rule=warmup) # 2) Update state tracker with the agent's action state_tracker.update_state_agent(agent_action) # 3) User takes action given agent action user_action, reward, done, success = user.step(agent_action) if not done: # 4) Infuse error into semantic frame level of user action emc.infuse_error(user_action) # 5) Update state tracker with user action
# Load movie dict # db_dict = pickle.load(open(DICT_FILE_PATH, 'rb'), encoding='latin1') db_dict = json.load(open(DICT_FILE_PATH, encoding='utf-8'))[0] # Load goal file # user_goals = pickle.load(open(USER_GOALS_FILE_PATH, 'rb'), encoding='latin1') user_goals = json.load(open(USER_GOALS_FILE_PATH, encoding='utf-8')) # Init. Objects if USE_USERSIM: user = UserSimulator(user_goals, constants, database) else: user = User(constants) emc = ErrorModelController(db_dict, constants) state_tracker = StateTracker(database, constants) dqn_agent = DQNAgent(state_tracker.get_state_size(), constants) def test_run(): """ Runs the loop that tests the agent. Tests the agent on the goal-oriented chatbot task. Only for evaluating a trained agent. Terminates when the episode reaches NUM_EP_TEST. """ print('Testing Started...') episode = 0 while episode < NUM_EP_TEST: episode_reset()
db_dict = pickle.load(open(DICT_FILE_PATH, 'rb'), encoding='latin1') # Load goal File user_goals = pickle.load(open(USER_GOALS_FILE_PATH, 'rb'), encoding='latin1') # Init. Objects if USE_USERSIM: user = UserSimulator(user_goals, constants, database) else: user = User(constants) emc = ErrorModelController(db_dict, constants) state_tracker = StateTracker(database, constants) # sarsa_agent = SARSAgent(state_tracker.get_state_size(), constants) sess = K.get_session() ac_agent = ActorCritic(state_tracker.get_state_size(), constants, sess) #dqn_agent = DQNAgent(state_tracker.get_state_size(), constants) def run_round(state, warmup=False): # 1) Agent takes action given state tracker's representation of dialogue (state) agent_action = ac_agent.act(state) # 2) Update state tracker with the agent's action state_tracker.update_state_agent(agent_action) # 3) User takes action given agent action user_action, reward, done, success = user.step(agent_action) if not done: # 4) Infuse error into semantic frame level of user action emc.infuse_error(user_action) # 5) Update state tracker with user action state_tracker.update_state_user(user_action)
# Load movie dict db_dict = pickle.load(open(DICT_FILE_PATH, 'rb'), encoding='latin1') # Load goal File user_goals = pickle.load(open(USER_GOALS_FILE_PATH, 'rb'), encoding='latin1') # Init. Objects if USE_USERSIM: user = UserSimulator(user_goals, constants, database) else: user = User(constants) emc = ErrorModelController(db_dict, constants) state_tracker = StateTracker(database, constants) acm = AdvantageACM(state_tracker.get_state_size(), constants) def run_round(state, Agent_Actions, User_Actions, tot_slt_len, stp, q, warmup): u_r = 0 ##User Repeatition a_r = 0 ##Agent Repeatition a_q = 0 ##Agent Question u_q = q ##User Question pen = 0 ##User asked Question Agent replied Question # 1) Agent takes action given state tracker's representation of dialogue (state) agent_action_index, agent_action = acm.act(state, warmup) print('Agent Action_Index:', agent_action_index) #print('Agent_Action:',agent_action) if (agent_action['intent'] == 'request'): a_q = 1 if (agent_action_index in Agent_Actions):
# Load movie dict db_dict = pickle.load(open(DICT_FILE_PATH, 'rb'), encoding='latin1') # Load goal File user_goals = pickle.load(open(USER_GOALS_FILE_PATH, 'rb'), encoding='latin1') # Init. Objects if USE_USERSIM: user = UserSimulator(user_goals, constants, database) else: user = User(constants) emc = ErrorModelController(db_dict, constants) state_tracker = StateTracker(database, constants) dqn_agent = DRQNAgent( state_tracker.get_state_size(), constants) # the variable dqn agent is intialized to a DRQN agent def run_round(states, warmup=False): # 1) Agent takes action given state tracker's representation of dialogue (state) #print(states[0].shape) if len(states) > 3: state_1 = np.stack((states[-4], states[-3], states[-2], states[-1]), axis=0) else: state_1 = np.vstack((np.zeros( (4 - len(states), 224)), np.array(states))) agent_action_index, agent_action = dqn_agent.get_action(state_1, use_rule=warmup) # 2) Update state tracker with the agent's action