? Usando o interessante corpus chinês qingyun, um robô de bate-papo chinês escrito por @Doragd: boneco de neve:
Mesmo que ela não seja tão perfeita :muscle:, não é tão boa assim :paw_prints:
Mas ela foi codificada por mim: sparkling_heart:, então
Espero que todos possam dar mais estrelas para apoiar este iniciante em PNL e seus amigos.
Este projeto é na verdade um submódulo do design do curso de engenharia de software. Nosso objetivo é desenvolver um sistema inteligente de processamento de tickets de atendimento ao cliente.
O fluxo de trabalho real do sistema inteligente de ordem de serviço de atendimento ao cliente é: quando uma pessoa faz uma pergunta ao sistema, o sistema primeiro pesquisa a base de conhecimento para ver se há uma pergunta relevante. Em caso afirmativo, ele retorna a resposta à pergunta. Se a pessoa não estiver satisfeita neste momento, ela poderá enviar diretamente uma ordem de serviço. Caso não exista na base de conhecimento, este chatbot é chamado para resposta automática.
O cenário de serviço deste sistema é semelhante ao sistema de atendimento ao cliente da Tencent Cloud. Os clientes vêm principalmente para consultar questões relacionadas (servidores em nuvem, nomes de domínio, etc.), portanto a base de conhecimento também é uma coleção de consultas e solução de problemas (perguntas, respostas). sobre servidores em nuvem, nomes de domínio, etc.
A interface front-end do sistema e a interação de mensagens front-end e back-end são completadas por outro colega @adjlyadv, principalmente usando React + Django.
@Doragd é responsável por adquirir a base de conhecimento e escrever, treinar e testar o chatbot. O conteúdo deste repositório também trata disso.
│ .gitignore
│ config.py #模型配置参数
│ corpus.pth #已经过处理的数据集
│ dataload.py #dataloader
│ datapreprocess.py #数据预处理
│ LICENSE
│ main.py
│ model.py
│ README.md
│ requirements.txt
│ train_eval.py #训练和验证,测试
│
├─checkpoints
│ chatbot_0509_1437 #已经训练好的模型
│
├─clean_chat_corpus
│ qingyun.tsv #语料库
│
├─QA_data
│ QA.db #知识库
│ QA_test.py #使用知识库时调用
│ stop_words.txt #停用词
│ __init__.py
│
└─utils
beamsearch.py #to do 未完工
greedysearch.py #贪婪搜索,用于测试
__init__.py
Instalar dependências
$ pip install -r requirements.txt
$ python datapreprocess.py
Pré-processe o corpus para gerar corpus.pth ( corpus.pth foi carregado aqui, portanto esta etapa pode ser omitida )
Parâmetros modificáveis:
# datapreprocess.py
corpus_file = 'clean_chat_corpus/qingyun.tsv' #未处理的对话数据集
max_voc_length = 10000 #字典最大长度
min_word_appear = 10 #加入字典的词的词频最小值
max_sentence_length = 50 #最大句子长度
save_path = 'corpus.pth' #已处理的对话数据集保存路径
Ao usar a base de conhecimento, você precisa passar o parâmetro use_QA_first=True
Neste momento, para a sequência de entrada, a melhor pergunta e resposta são primeiro correspondidas na base de conhecimento e retornadas. Quando não for encontrado, o chatbot é chamado para gerar automaticamente uma resposta.
A base de conhecimento aqui é uma coleção de 100 perguntas e respostas frequentes compiladas de documentos oficiais da Tencent Cloud, apenas para teste!
$ python main.py chat --use_QA_first=True
Devido às necessidades de design do curso, os pares de perguntas e respostas da Tencent Cloud foram adicionados, mas são irrelevantes para o projeto do robô de bate-papo, portanto, quando usado geralmente, use_QA_first=False
, este parâmetro é padronizado como True
$ python main.py chat --use_QA_first=False
$ python main.py chat
exit
, quit
ou q
. Explique no arquivo config.py
Quando precisar passar novos parâmetros, basta passá-los a partir da linha de comando, na forma de
$ python main.py chat --model_ckpt= ' checkpoints/chatbot_0509_1437 ' --use_QA_first=False
O comando acima indica o caminho para carregar o modelo treinado e se deve usar a base de conhecimento
Nome do corpus | Número do corpus | Explicação das fontes do corpus | Características do corpus | Amostra de corpus | Se foi particípio |
---|---|---|---|---|---|
qingyun (corpus Qingyun) | 10W | Um grupo de comunicação chatbot | Relativamente bom, favorável à vida | P: Parece que você ama muito o dinheiro. A: Ah, é mesmo? Então você está quase lá | não |
$ python train_eval.py train [--options]
A parte da avaliação quantitativa ainda não foi escrita. Deve ser medida pela perplexidade. Atualmente, só pode gerar sentenças e avaliar manualmente a qualidade.
$ python train_eval.py eval [--options]