Este repositório contém um novo método de treinamento adversário para nosso Agente Conversacional Generativo (GCA).
Mais detalhes sobre esse novo método de treinamento podem ser encontrados no artigo Oswaldo Ludwig, "End-to-end Adversarial Learning for Generative Conversational Agents", arXiv:1711.10122 cs.CL, Nov 2017. No caso de publicação utilizando ideias ou trechos de código deste repositório, por favor cite este artigo.
Nosso método assume o GCA como um gerador que visa enganar um discriminador que rotula os diálogos como gerados por humanos ou por máquinas. Na nossa abordagem, o discriminador realiza a classificação em nível de token, ou seja, indica se o token atual foi gerado por humanos ou máquinas. Para fazer isso, o discriminador também recebe como entrada as declarações de contexto (o histórico do diálogo) e a resposta incompleta até o token atual. Esta nova abordagem possibilita o treinamento ponta a ponta por retropropagação. Um processo de autoconversação permite produzir um conjunto de dados gerados com maior diversidade para o treinamento adversário. Esta abordagem melhora o desempenho em questões não relacionadas aos dados de treinamento.
O modelo treinado aqui disponível utilizou um conjunto de dados coletados de diálogos de cursos de inglês online, disponíveis aqui.
Nosso modelo GCA pode ser explicado pelo seguinte fluxograma:
enquanto o pseudocódigo a seguir explica nosso algoritmo GCA:
Nosso novo treinamento adversário ponta a ponta pode ser explicado pelo seguinte modelo Keras (implementado no arquivo train_bot_GAN.py), que é composto pelo gerador e pelo discriminador. Os blocos amarelos pertencem ao GCA (o gerador), enquanto os blocos verdes pertencem ao discriminador. Os blocos brancos são compartilhados entre gerador e discriminador:
enquanto o pseudocódigo a seguir explica o novo algoritmo (veja o artigo para a definição das variáveis):
Para conversar com os modelos pré-treinados:
Para avaliar linhas de diálogo usando o discriminador pré-treinado:
Para treinar de ponta a ponta usando o novo método adversário:
Se você deseja iniciar o treinamento adversário do zero, torne o arquivo de peso my_model_weights.h5 (pré-treinado no novo método adversário) igual a my_model_weights20.h5 (pré-treinado pela força do professor) e execute train_script.py.