All Projects → Doragd → Chinese Chatbot Pytorch Implementation

Doragd / Chinese Chatbot Pytorch Implementation

Licence: apache-2.0
🍀 Another Chinese chatbot implemented in PyTorch, which is the sub-module of intelligent work order processing robot. 👩‍🔧

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Chinese Chatbot Pytorch Implementation

Chinese Chatbot
中文聊天机器人,基于10万组对白训练而成,采用注意力机制,对一般问题都会生成一个有意义的答复。已上传模型,可直接运行,跑不起来直播吃键盘。
Stars: ✭ 124 (-78.47%)
Mutual labels:  chatbot, chinese-nlp
Gossiping Chinese Corpus
PTT 八卦版問答中文語料
Stars: ✭ 137 (-76.22%)
Mutual labels:  chatbot, chinese-nlp
Weatherbot
一个基于 Rasa 的中文天气情况问询机器人(chatbot), 带 Web UI 界面
Stars: ✭ 186 (-67.71%)
Mutual labels:  chatbot, chinese-nlp
Chinese Nlp Corpus
Collections of Chinese NLP corpus
Stars: ✭ 438 (-23.96%)
Mutual labels:  chinese-nlp
Onebot
OneBot 标准:一个聊天机器人应用接口标准
Stars: ✭ 455 (-21.01%)
Mutual labels:  chatbot
Aws Lex Web Ui
Sample Amazon Lex chat bot web interface
Stars: ✭ 500 (-13.19%)
Mutual labels:  chatbot
Practical seq2seq
A simple, minimal wrapper for tensorflow's seq2seq module, for experimenting with datasets rapidly
Stars: ✭ 563 (-2.26%)
Mutual labels:  chatbot
Rultor
DevOps Team Assistant
Stars: ✭ 428 (-25.69%)
Mutual labels:  chatbot
Articulate
A platform for building conversational interfaces with intelligent agents (chatbots)
Stars: ✭ 534 (-7.29%)
Mutual labels:  chatbot
Chatbot List
行业内关于智能客服、聊天机器人的应用和架构、算法分享和介绍
Stars: ✭ 484 (-15.97%)
Mutual labels:  chatbot
Stealth
An open source Ruby framework for text and voice chatbots. 🤖
Stars: ✭ 481 (-16.49%)
Mutual labels:  chatbot
Build A Bot With Zero Coding
An example of using Google Sheets to create a Viber survey chat bot without a backend server
Stars: ✭ 460 (-20.14%)
Mutual labels:  chatbot
Chat
基于自然语言理解与机器学习的聊天机器人,支持多用户并发及自定义多轮对话
Stars: ✭ 516 (-10.42%)
Mutual labels:  chatbot
Nlp.js
An NLP library for building bots, with entity extraction, sentiment analysis, automatic language identify, and so more
Stars: ✭ 4,670 (+710.76%)
Mutual labels:  chatbot
Ddparser
百度开源的依存句法分析系统
Stars: ✭ 537 (-6.77%)
Mutual labels:  chinese-nlp
Messenger
Open source, native iOS Messenger, with realtime chat conversations (full offline support).
Stars: ✭ 4,264 (+640.28%)
Mutual labels:  chatbot
Robot
知识图谱问答机器人,聊天机器人,基于知识图谱、语义理解等的对话机器人。
Stars: ✭ 530 (-7.99%)
Mutual labels:  chatbot
Seq2seqchatbots
A wrapper around tensor2tensor to flexibly train, interact, and generate data for neural chatbots.
Stars: ✭ 466 (-19.1%)
Mutual labels:  chatbot
Weixin public corpus
微信公众号语料库
Stars: ✭ 465 (-19.27%)
Mutual labels:  chinese-nlp
Slacker
Slack Bot Framework
Stars: ✭ 495 (-14.06%)
Mutual labels:  chatbot

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

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

  • 尽管她不是那么完善💪,不是那么出色🐾

  • 但她是由我自己coding出来的💖 ,所以

  • 希望大家能够多多star支持⭐️ 这个NLP初学者🏃和他的朋友🍀 小智

🌈背景

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

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

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

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

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

🌟 测试效果

  • 不使用知识库进行回答
  • 使用知识库进行回答
  • 整个系统效果:

💾项目结构

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

👫依赖库

torch torchnet fire jieba

安装依赖

$ pip install -r requirements.txt

💖开始使用

数据预处理(可省略)

$ 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
  • 退出聊天:输入exit, quit, q 均可

其他可配置参数

config.py 文件中说明

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

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

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

🌸技术实现

语料库

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

Seq2Seq

  • Encoder:两层双向GRU
  • Decoder:双层单向GRU

Attention

👷模型训练与评估

$ python train_eval.py train [--options]

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

$ python train_eval.py eval [--options]

😭跳坑记录与总结

  • 最深刻的体会就是“深度学习知识的了解和理解之间差了N个编程实现”。虽然理论大家都很清楚,但是真正到编程实现时,总会出这样,那样的问题:从数据集的处理,到许多公式的编程实现,到参数的调节,GPU配置等等各种问题
  • 这次实践的过程实际是跟着PyTorch Tutorial先过了一遍Chatbot部分,跑通以后,再更换语料库,处理语料库,再按照类的风格去重构了代码,然后就是无尽的Debug过程,遇到了很多坑,尤其是把张量移到GPU上遇到各种问题,主要是不清楚to(device)时究竟移动了哪些。
    • 通过测试发现,model.to(device)只会把参数移到GPU,不会把类中定义的成员tensor移过去,所以如果在forward方法中定义了新的张量,要记得移动。
    • 还有就是移动的顺序问题:先把模型移动到GPU,再去定义优化器。以及移动的方法:model=model.to(device),不要忘记赋值。
    • 很容易出现GPU显存不足的情况,注意写代码时要考虑内存利用率问题,尽量减少重复tensor。
    • 在一开始更换中文语料库后,训练总是不收敛,最后才发现原来是batch_size设置小了,实际上我感觉batch_size在显存足够时要尽量大,其实之前看到过,只是写代码的时候完全忘记这回事了。说明自己当时看mini-batch时还不够理解,还是要真的写代码才能够深入人心,至少bug深入人心
    • 还有一个问题就是误解了torch.long,以为是高精度浮点,结果是int64型,造成了一个bug,找了好久才发现怎么回事。这告诉我们要认真看文档。
    • 最后的收获就是熟悉了如何实际实现一个模型,这很重要。
  • 实际上这个模型的效果不是很好,除开模型本身的问题不谈,我发现分词的质量会严重影响句子的质量,但是分词时我连停用词还没设置,会出现一些奇特的结果
  • 还有一个问题是处理变长序列时,损失函数如果用自己定义的,很容易出现不稳定情况,现在还在研究官方API
  • 本次实践还发现自己对一些参数理解还不够深,不知道怎么调,还要补理论。
  • 对模型的评估这部分还要继续做。

🙏致谢

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].