Home

Awesome

🍀 小智,又一个中文聊天机器人:yum:

💖 利用有趣的中文语料库qingyun,由@Doragd 同学编写的中文聊天机器人:snowman:

:rainbow:背景

这个项目实际是软件工程课程设计的子模块。我们的目标是开发一个智能客服工单处理系统。

智能客服工单系统实际的工作流程是:当人向系统发出提问时,系统首先去知识库中查找是否存在相关问题,如果有,则返回问题的答案,此时如何人不满意,则可以直接提交工单。如果知识库中不存在,则调用这个聊天机器人进行自动回复。

该系统服务的场景类似腾讯云的客服系统,客户多是来咨询相关问题的(云服务器,域名等),所以知识库也是有关云服务器,域名等的咨询,故障处理的 (问题,答案) 集合。

系统的前端界面和前后端消息交互由另一个同学@adjlyadv 完成,主要采用React+Django方式。

@Doragd 同学负责的是知识库的获取和聊天机器人的编写,训练,测试。这个repo的内容也是关于这个的。

:star2: 测试效果

:floppy_disk:项目结构

│  .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

:couple:依赖库

torch torchnet fire jieba

安装依赖

$ pip install -r requirements.txt

:sparkling_heart:开始使用

数据预处理(可省略)

$ python datapreprocess.py

对语料库进行预处理,产生corpus.pth (这里已经上传好corpus.pth, 故此步可以省略

可修改参数:

# 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' #已处理的对话数据集保存路径

使用

使用知识库时, 需要传入参数use_QA_first=True 此时,对于输入的字符串,首先在知识库中匹配最佳的问题和答案,并返回。找不到时,才调用聊天机器人自动生成回复。

这里的知识库是爬取整理的腾讯云官方文档中的常见问题和答案,100条,仅用于测试!

$ python main.py chat --use_QA_first=True

由于课程设计需要,加入了腾讯云的问题答案对,但对于聊天机器人这个项目来说是无关紧要的,所以一般使用时,use_QA_first=False ,该参数默认为True

$ python main.py chat --use_QA_first=False
$ python main.py chat

其他可配置参数

config.py 文件中说明

需要传入新的参数时,只需要命令行传入即可,形如

$ python main.py chat --model_ckpt='checkpoints/chatbot_0509_1437' --use_QA_first=False

上面的命令指出了加载已训练模型的路径和是否使用知识库

:cherry_blossom:技术实现

语料库

语料名称语料数量语料来源说明语料特点语料样例是否已分词
qingyun(青云语料)10W某聊天机器人交流群相对不错,生活化Q:看来你很爱钱 A:噢是吗?那么你也差不多了

Seq2Seq

Attention

:construction_worker:模型训练与评估

$ python train_eval.py train [--options]

定量评估部分暂时还没写好,应该采用困惑度来衡量,目前只能生成句子,人为评估质量

$ python train_eval.py eval [--options]

:sob:跳坑记录与总结

:pray:致谢