Este repositório contém o código para desenvolver um chatbot que pode levar um dos 16 tipos de personalidade de Myers-Briggs .
O chatbot é ajustado para cada personalidade usando postagens e comentários pertencentes ao Subreddit correspondente (por exemplo, R/INFJ para o tipo INFJ ).
reddit_scraper.py contém o script para raspar um determinado subreddit. Para executá -lo, primeiro você precisa de uma instância de um banco de dados MySQL para se conectar. Você também precisa de alguns parâmetros associados à sua conta do Reddit e ao banco de dados MySQL: todos precisam ser inseridos em um arquivo config.py , seguindo o esquema de config.example.py .
O script vai primeiro carregar todas as postagens em uma tabela chamada posts e, em seguida, seus comentários em uma tabela chamada comments . Embora a paralelização tenha sido aplicada, esta segunda parte levará muitas horas. É por isso que, depois de baixar as postagens nas quais está interessado no script principal (~ 20min), você pode usar o script comments_scraper.py para baixar os comentários associados. Se você interromper, na próxima vez que você executar, o script começará de onde você saiu.
Para treinar o modelo, primeiro relatei dados no conversational dataset format , ou seja, uma tabela CSV com a seguinte estrutura.
| eu ia | resposta | contexto | Contexto/0 | ... | contexto/n |
|---|---|---|---|---|---|
| S892NN | Estou bem | Tudo bem. E você? | Como está a vida? | ... | Oi! |
Aqui, o contexto/n representa o início da conversa, indo para a troca mais recente (mostrada em contexto/0 , contexto e resposta , que é a frase mais recente na conversa). É possível alterar a cardinalidade dos contextos, substituindo o parâmetro NUMBER_OF_CONTEXTS no arquivo config.py .
O script create_conversational_dataset.py gera o CSV a partir das tabelas SQL criadas durante a fase de raspagem, salvando -o em um arquivo de picles na pasta de dados. Uma conversa é construída a partir de uma postagem e de seus comentários diretos ou de uma postagem, um comentário e sua cadeia de comentários.
A execução do script é paralela, por isso grava em n diferentes CSVs - n, dependendo do parâmetro NUMBER_OF_PROCESSES - finalmente concatenou para criar o arquivo de pickle resultante.
O notebook training.py contém o ajuste fino do modelo de linguagem DialoGPT-medium nos dados de conversação e é principalmente uma adaptação do código que você pode encontrar this notebook .
A execução de demo.py iniciará a conversa.
Para executar todo o código no repositório, você pode criar um ambiente virtual e executar os seguintes comandos.
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt