uncategorized

本周进展

1. 确定了(状态,动作,奖励,下一状态,对话是否结束)的组成,即训练数据:

  • 状态:每次的状态针对于用户说完一句话

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    {
    'agent_action': { # 针对于agent的话
    'request_slots':{},
    'turn': 0, # agent的话所在的轮次,从0开始
    'speaker': 'agent',
    'inform_slots': {},
    'diaact': 'request'
    },

    'user_action': {
    'request_slots':{},
    'turn': 0,
    'speaker': 'user',
    'inform_slots': {},
    'diaact': 'request'
    },

    'turn': 1, # 从1开始,每次加2

    'current_slots': {
    'request_slots': {}, # 当前状态下所有未知的slot
    'agent_request_slots': {}, # agent问过的所有slot
    'inform_slots': {}, # 当前状态下所有已知的slot
    },

    'history': [ # 存储用户和agent的历史记录
    {
    'request_slots':{},
    'turn': 1
    'speaker': 'user',
    'inform_slots': {},
    'diaact': 'request'
    },
    {
    'request_slots':{},
    'turn': 1
    'speaker': 'user',
    'inform_slots': {},
    'diaact': 'request'
    }
    ]
    }
  • 动作:针对于当前的状态,agent下一时刻所要采取的动作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    'act_slot_response': {
    'request_slots': {},
    'turn': 1,
    'diaact': '',
    'inform_slots': {},
    'nl': '', # 当前状态对应下一时刻agent的输出
    }
    }
  • 奖励:对话成功,奖励为2*max_turn;对话失败,奖励为-max_turn

  • 下一状态:用户的下一句话

  • 对话是否结束:当前状态是否为对话的最后一句话

2. 确定了动作集的表示

  • 动作集是指用户状态所对应的动作的集合,DQN的目的就是根据当前状态,从该动作集中选择一个Q值最大的动作
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    # 之后可能会补充
    feasible_actions = [
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'child_name': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'client_name': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'phone_number': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'child_age': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'client_gender': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'english_level': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'client_location': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'reserve_location': 'UNK'}},
    {'diaact': "request", 'inform_slots': {}, 'request_slots': {'reserve_time': 'UNK'}},

    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'child_name': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'teacher_nation': 'PLACEHOLDER'}, 'request_slots': {'child_name': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'online_course': 'PLACEHOLDER'}, 'request_slots': {'child_name': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'reserve_location': 'PLACEHOLDER'}, 'request_slots': {'phone_number': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'phone_number': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'teacher_nation': 'PLACEHOLDER'}, 'request_slots': {'phone_number': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'online_course': 'PLACEHOLDER'}, 'request_slots': {'phone_number': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'client_gender': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'child_age': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'online_course': 'PLACEHOLDER'}, 'request_slots': {'english_level': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'client_location': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'client_name': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'child_grade': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'class_type': 'PLACEHOLDER'}, 'request_slots': {'phone_number': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'english_level': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'school_location': 'PLACEHOLDER'}, 'request_slots': {'reserve_location': 'UNK'}},
    {'diaact': "request", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {'client_location': 'UNK'}},

    {'diaact': "inform", 'inform_slots': {'fee': 'PLACEHOLDER'}, 'request_slots': {}},
    {'diaact': "inform", 'inform_slots': {'teacher_nation': 'PLACEHOLDER'}, 'request_slots': {}},
    {'diaact': "inform", 'inform_slots': {'online_course': 'PLACEHOLDER'}, 'request_slots': {}},
    {'diaact': "inform", 'inform_slots': {'school_location': 'PLACEHOLDER'}, 'request_slots': {}},
    {'diaact': "inform", 'inform_slots': {'class_type': 'PLACEHOLDER'}, 'request_slots': {}}
    ]

3. 从原始对话中提取出(状态,动作,奖励,下一状态,对话是否结束)五元组,作为训练数据

  • 主要使用规则的nlu来处理,因此提取的五元组可能会有一些错误,需要人工改正

4. 重写了之前电影推荐的代码,使用提取的五元组来训练我们自己的DQN网络,目前代码已经调试完成,我们用小规模数据验证了整个流程的可行性

5. 下周计划

  • 更正提取到的所有五元组
  • 使用更正后的训练数据来训练DQN网络,测试对话的成功率
  • 根据上述成功率来对网络的参数作相应的改变,提高正确率
  • 查阅针对于强化学习策略改进的论文,试着借鉴一些新的方法