Como treinar um chatbot

10

Eu queria começar a experimentar redes neurais e, como um problema de brinquedo, queria treinar um para conversar, ou seja, implementar um bot de bate-papo como o cleverbot. Não é tão inteligente assim.

Procurei alguma documentação e encontrei muitos tutoriais sobre tarefas gerais, mas poucos sobre esse tópico específico. O que encontrei apenas expôs os resultados sem fornecer informações sobre a implementação. Os que fizeram, fizeram isso muito superficial (a página de documentação do tensorflow no seq2seq está faltando imho).

Agora, sinto que posso ter entendido o princípio mais ou menos, mas não tenho certeza e nem mesmo como começar. Assim, explicarei como resolveria o problema e gostaria de receber um feedback sobre essa solução, informando onde estou enganado e possivelmente tenho algum link para explicações detalhadas e conhecimentos práticos sobre o processo.

  1. O conjunto de dados que usarei para a tarefa é o despejo de todo o meu histórico de bate-papo do facebook e whatsapp. Não sei quão grande será, mas possivelmente ainda não o suficiente. O idioma de destino não é o inglês, portanto, não sei onde reunir rapidamente amostras significativas de conversas.

  2. Vou gerar um vetor de pensamento de cada frase. Ainda não sei como na verdade; Encontrei um bom exemplo para o word2vec no site deeplearning4j, mas nenhum para frases. Entendi como os vetores de palavras são construídos e por quê, mas não consegui encontrar uma explicação exaustiva para os vetores de frases.

  3. Usando vetores de pensamento como entrada e saída, vou treinar a rede neural. Não sei quantas camadas ela deve ter e quais devem ser camadas lstm.

  4. Deve haver outra rede neural capaz de transformar um vetor de pensamento em uma sequência de caracteres que compõem uma frase. Eu li que deveria usar preenchimento para compensar comprimentos de frases diferentes, mas sinto falta de codificar caracteres (os pontos de código são suficientes?).

Totem
fonte

Respostas:

7

Eu recomendaria começar lendo este post do blog . Provavelmente, você pode canibalizar o código para criar uma RNN que receba uma declaração de um diálogo e, em seguida, prossiga para gerar a resposta para essa declaração.

Essa seria a versão fácil do seu projeto, tudo sem vetores de palavras e vetores de pensamento. Você está apenas inserindo caracteres, portanto, erros de digitação não precisam se preocupar.

O próximo passo mais complexo seria inserir vetores de palavras em vez de caracteres. Isso permitiria generalizar para palavras que não fazem parte dos seus dados de treinamento. E provavelmente ainda é apenas uma pequena modificação do código.

Se você insistir em usar vetores de pensamento, comece a ler a tradução do NN . E provavelmente tente obter uma rede de codificadores pré-treinados. Ou faça um treinamento prévio em um grande corpus de tradução para o seu idioma.

Com o seu pequeno conjunto de treinamento, o melhor que você pode fazer é provavelmente se ajustar excessivamente até que o sistema recrie os dados do treinamento literalmente. O uso de vetores de palavras permitirá que o seu sistema dê a mesma resposta para "Eu venci o gato hoje". como você deu nos dados de treinamento para "Eu chutei o cachorro ontem".

Não tenho certeza se os vetores de pensamento farão uma grande diferença. Se você conseguir que o decodificador aprenda.

BlindKungFuMaster
fonte
Já li o primeiro artigo há algum tempo e sinto que os personagens não são o nível certo de abstração. Eu não pensei em usar vetores de palavras um de cada vez, mas acho que também é uma maneira interessante e menos complexa. Vou ler o jornal, que é provavelmente o que eu estava procurando ...
Totem
Encontrei um núcleo de bot para usar ... Mas estou preso à geração de texto. ai.stackexchange.com/questions/5963/… O que estou pensando é que, apesar dos vetores e da taxa de aprendizado, ele ainda não está funcionando como deveria ... Estou preocupado que isso possa ser uma falha da Biblioteca. usando, mas acho que isso não seria possível para um tamanho de camada de 300 ... Ou a quantidade de treinamento necessária está relacionada ao tamanho da camada? Qualquer ajuda seria apreciada. Observe a biblioteca que está sendo usada.
FreezePhoenix # 11/18
0

De acordo com o conceito do seu projeto, para iniciantes, solicito que você aplique algumas técnicas de desenvolvimento orientadas a testes. Primeiro, tente criar um banco de dados de tamanho menor que você possa usar para lidar com uma pequena quantidade de conjunto de dados, o que pode proporcionar a melhoria desejada.

Dito isso, use esse banco de dados para criar uma árvore organizada em linha com seus dados, como nós. Portanto, se um bot começar a gerar algum feedback, a partir do banco de dados, marcado com pontos de dados do conjunto de dados especificado. para o próximo nó na árvore.

nota : Para iniciantes, não use seu grande histórico de bate-papos como um todo, porque esta é uma tarefa simples.

quintumnia
fonte