Baseado no repositório de código TC-Bot e em sistemas de diálogo neural de conclusão de tarefas de ponta a ponta. Este repositório é uma versão simplificada do TC-Bot, tem desempenho com um nível de precisão semelhante, embora não seja diretamente comparável.
Isso mostra como treinar um agente DQN simples com aprendizado de reforço profundo como um chatbot orientado a objetivos usando um simulador de usuário simples. O código é uma versão simplificada do TC-Bot da MiuLab com a principal diferença é que este código não inclui componentes NLG ou NLU, mas apenas treina o gerenciador de diálogo. Os componentes NL não são necessários para entender como um chatbot GO é treinado com DRL e, portanto, não são implementados.
Aqui está um diagrama do artigo para TC-Bot e é semelhante ao fluxo de diálogo usado neste projeto, exceto os componentes LU e NLG:
Além da remoção de NL, há alterações nas condições de sucesso, no otimizador do agente DQN e algumas outras pequenas alterações. Portanto, a precisão não deve ser comparada diretamente entre o TC-Bot e este repositório.
O banco de dados é de ingressos de cinema, o mesmo banco de dados utilizado no TC-Bot. As versões pickle e text dos dados podem ser vistas no diretório de dados.
Uma série de tutoriais em 5 partes que descreve e analisa esse código em detalhes pode ser encontrada no meio aqui!
Você pode treinar um agente do zero com python train.py
.
Em constantes.json você pode alterar hiperparâmetros, incluindo "save_weights_file_path" e "load_weights_file_path" (ambos caminhos relativos) para salvar e carregar pesos, respectivamente. Por exemplo, para usar os pesos pré-treinados na pasta pesos, defina o valor de "load_weights_file_path" como "weights/model.h5". Os pesos dos modelos keras alvo (tar) e comportamental (beh) são salvos sempre que a taxa de sucesso atual atinge um novo máximo.
Você também pode testar um agente com python test.py
. Mas certifique-se de carregar os pesos definindo "load_weights_file_path" em constantes.json para um caminho relativo com comportamento e pesos alvo.
Todas as constantes são bastante autoexplicativas, exceto "vanilla" no agente, que significa DQN (verdadeiro) ou Duplo DQN (falso). O padrão é vanilla DQN.
Nota: Se você receber um erro de decapagem no trem ou teste, execute python pickle_converter.py
e isso deve resolver o problema
Você pode testar o agente inserindo suas próprias ações como usuário (em vez de usar um usuário sim) definindo "usersim" em execução em constantes.json como falso. Você insere uma ação e um indicador de sucesso em cada etapa de um episódio/conversa no console. O formato para a entrada da ação é: slots de intenção/informação/slots de solicitação.
Exemplo de entradas de ação:
Além disso, o console solicitará um indicador sobre se o agente já teve sucesso (exceto após a ação inicial de um episódio). As entradas permitidas são -1 para perda, 0 para nenhum resultado ainda, 1 para sucesso.
Hiperparâmetros usados de constantes.json.
Tabela de episódios (a cada 2.000 de 40.000) por taxa máxima de sucesso de um período/frequência de trem (a cada 100 episódios) até esse episódio: