Dialogbot, fornece tecnologia de modelo de diálogo completo Combinando modelo de diálogo baseado em pesquisa , modelo de diálogo baseado em tarefas e modelo de diálogo generativo , produz a resposta de diálogo ideal.
O Dialogbot implementa uma variedade de soluções de robô de diálogo, como diálogo de perguntas e respostas, diálogo baseado em tarefas e diálogo baseado em bate-papo. Ele oferece suporte a perguntas e respostas de recuperação de rede, perguntas e respostas de conhecimento de domínio, perguntas e respostas guiadas por tarefas e perguntas e respostas de bate-papo, diretamente do local. a caixa.
Guia
Os sistemas de diálogo homem-máquina sempre foram uma direção importante da IA. O teste de Turing usa o diálogo para detectar se uma máquina possui um alto grau de inteligência.
Como construir um sistema de diálogo humano-computador ou um robô de diálogo?
O sistema de diálogo evoluiu ao longo de três gerações:
Os sistemas de diálogo são divididos em três categorias:
Calcule a semelhança entre a pergunta do usuário e a pergunta no banco de dados de perguntas e respostas, selecione a pergunta mais semelhante e dê a resposta correspondente.
O cálculo de similaridade de frases inclui os seguintes métodos:
Recuperar respostas de resumos de resultados de pesquisa no Baidu e Bing
Demonstração oficial: https://www.mulanai.com/product/dialogbot/
O projeto é baseado nos transformadores 4.4.2+, torch 1.6.0+ e Python 3.6+. Então, basta fazer:
pip3 install torch # conda install pytorch
pip3 install -U dialogbot
ou
pip3 install torch # conda install pytorch
git clone https://github.com/shibing624/dialogbot.git
cd dialogbot
python3 setup.py install
exemplo: exemplos/bot_demo.py
from dialogbot import Bot
bot = Bot ()
response = bot . answer ( '姚明多高呀?' )
print ( response )
saída:
query: "姚明多高呀?"
answer: "226cm"
exemplo: exemplos/taskbot_demo.py
Um modelo de diálogo baseado em chat treinado com base no modelo generativo GPT2.
O modelo foi lançado para modelos huggingface: shibing624/gpt2-dialogbot-base-chinese
exemplo: exemplos/genbot_demo.py
from dialogbot import GPTBot
bot = GPTBot ()
r = bot . answer ( '亲 你吃了吗?' , use_history = False )
print ( 'gpt2' , r )
saída:
query: "亲 吃了吗?"
answer: "吃了"
Crie uma pasta de dados no diretório raiz do projeto, nomeie o corpus de treinamento original como train.txt e armazene-o neste diretório. O formato do train.txt é o seguinte. Cada chat é separado por uma linha.
真想找你一起去看电影
突然很想你
我也很想你
想看你的美照
亲我一口就给你看
我亲两口
讨厌人家拿小拳拳捶你胸口
今天好点了吗?
一天比一天严重
吃药不管用,去打一针。别拖着
Execute preprocess.py, tokenize o material de diálogo data/train.txt e, em seguida, serialize e salve-o em data/train.pkl. O tipo de objeto serializado em train.pkl é List[List], que registra o token contido em cada conversa na lista de conversas.
cd dialogbot/gpt/
python preprocess.py --train_path data/train.txt --save_path data/train.pkl
Execute train.py e use os dados pré-processados para realizar o treinamento autorregressivo no modelo. O modelo é salvo na pasta do modelo no diretório raiz.
Durante o treinamento, você pode parar mais cedo especificando o parâmetro paciência. Quando paciência=n, se a perda do modelo no conjunto de validação não diminuir por n épocas consecutivas, será realizada uma parada antecipada para interromper o treinamento. Quando paciência=0, a parada antecipada não é executada.
A parada antecipada está desativada por padrão no código, pois na prática, o modelo gerado pela parada antecipada pode não produzir necessariamente melhores resultados.
python train.py --epochs 40 --batch_size 8 --device 0,1 --train_path data/train.pkl
Para obter mais informações sobre os parâmetros de treinamento, você pode ver diretamente a descrição do parâmetro na função set_args() em train.py
Execute interact.py e use o modelo treinado para realizar a interação humano-computador. Após inserir q para encerrar a conversa, o registro do chat será salvo no arquivo sample.txt.
python interact.py --no_cuda --model_dir path_to_your_model
Ao executar interact.py, você pode tentar ajustar o efeito gerado ajustando parâmetros como topk, topp, repetition_penalty, max_history_len, etc. Para obter mais informações sobre os parâmetros, você pode ver diretamente a descrição dos parâmetros na função set_args() de interact.py. Se desejar usar a GPU para geração, não chame o parâmetro --no_cuda e especifique qual GPU usar por meio de -. -dispositivo gpu_id.
user :在干嘛
chatbot:睡觉
user :这么早就睡觉啦
chatbot:嗯啊你也早点睡啊
user :我再玩一会儿手机
chatbot:早点休息晚安
user :拜拜啦
chatbot:晚安晚安
user :多喝热水
chatbot:哈哈哈
user :多喝热水
chatbot:好的咯
user :在吗
chatbot:在
user :我不开心
chatbot:怎么啦
user :最近好累啊
chatbot:是挺累的
user :作业好多啊
chatbot:还好还好
user :我觉得我快要挂科了
chatbot:我也是啊,但是我觉得我快熬出头了
user :不说了,我还有好多作业没写
chatbot:我也是啊好多啊
user :那先这样,下次再聊,再见了
chatbot:好哒
Corpus de bate-papo chinês | Endereço do conjunto de dados | Descrição do corpus |
---|---|---|
Bate-papo chinês comum | chinês_chatbot_corpus | Incluindo corpus Xiaohuangji, corpus Douban, corpus de diálogo de drama de TV, corpus de resposta do fórum Tieba, corpus Weibo, corpus de fofoca PTT, corpus Qingyun, etc. |
500.000 corpus de bate-papo chinês | Baidu Netdisk [código de extração: 4g5e] ou GoogleDrive | Contém corpus original e dados pré-processados de 500.000 conversas multiturno |
1 milhão de corpus de bate-papo chinês | Baidu Netdisk [código de extração: s908] ou GoogleDrive | Contém corpus original e dados pré-processados de 1 milhão de conversas multivoltas |
Exemplos de corpus de bate-papo chinês são os seguintes:
谢谢你所做的一切
你开心就好
开心
嗯因为你的心里只有学习
某某某,还有你
这个某某某用的好
你们宿舍都是这么厉害的人吗
眼睛特别搞笑这土也不好捏但就是觉得挺可爱
特别可爱啊
今天好点了吗?
一天比一天严重
吃药不管用,去打一针。别拖着
Modelo | endereço compartilhado | Descrição do modelo |
---|---|---|
modelo_época40_50w | shibing624/gpt2-dialogbot-base-chinese ou Baidu Cloud Disk (código de extração: taqh) ou GoogleDrive | Depois de treinar por 40 épocas usando 500.000 rodadas de dados de diálogo, a perda caiu para cerca de 2,0. |
Se você usa o Dialogbot em sua pesquisa, cite-o no seguinte formato:
@misc{dialogbot,
title={dialogbot: Dialogue Model Technology Tool},
author={Xu Ming},
year={2021},
howpublished={ url {https://github.com/shibing624/dialogbot}},
}
O contrato de licenciamento é The Apache License 2.0, que é gratuito para uso comercial. Anexe o link para o dialogbot e o contrato de licença na descrição do produto.
O código do projeto ainda é muito rudimentar. Se você tiver alguma melhoria no código, sinta-se à vontade para enviá-lo de volta a este projeto. Antes de enviar, preste atenção aos dois pontos a seguir:
tests
python -m pytest
para executar todos os testes de unidade para garantir que todos os testes de unidade sejam aprovadosVocê pode então enviar um PR.